2017-09-13 73 views
0

我已经制作了一个Pogram,我需要将选定的列从数据库存储到JTable,并且我还必须将一些数据从JTextField存储到JTable我尝试了很多东西,但它没有得到正确的结果,它显示错误,如java.lang.ArrayIndexOutOfBoundsException:0源代码太长,不够粘贴,但我粘贴了一些有用的线,让你了解我的问题。如何将选定列从数据库中的数据库转换为Java中的JTable

该数据库具有一些列,如:

/*** ProductInfo Table******// 
CREATE TABLE ProductInfo (
P_Code VARCHAR (45) PRIMARY KEY 
NOT NULL, 
P_Name VARCHAR (45), 
Category VARCHAR (45), 
SubCategory VARCHAR (45) , 
Description VARCHAR (500), 
Cost_Price VARCHAR (45), 
Selling_Price VARCHAR (45), 
Reorder_Point INTEGER (10), 
Opening_Stock INTEGER (10), 
Discount INTEGER (10), 
VAT INTEGER (10), 
P_Image BLOB, 
} 

,这是JTable在那里我有存储信息

/*** StockInfo Table******// 
CREATE TABLE StockInfo (
P_Code VARCHAR (45) , 
P_Name VARCHAR (45), 
Description VARCHAR (500), 
Selling_Price VARCHAR (45), 
Opening_Stock INTEGER (10), 
Discount INTEGER (10), 
VAT INTEGER (10), 
Date Date, 
Pay_Due Varchar(45), 
Tot_Pay varchar(45), 
} 

    public void InsertDataToStockInfo() 
{ 
    try 
    { 
     ProductList obj=new ProductList(); //it is that JTable from where i have to fetch some column. 
     model=(DefaultTableModel)obj.table.getModel(); 
     for(int i=0;i<obj.table.getColumnCount();i++) 
     { 
      String P_Code=model.getValueAt(i,0).toString(); 
      String P_Name=model.getValueAt(i,1).toString(); 
      String Description=model.getValueAt(i,4).toString(); 
      String Selling_Price=model.getValueAt(i,6).toString(); 
      String qnty=model.getValueAt(i, 8).toString(); 
      int Qnty=Integer.parseInt(qnty); 
      String discount=model.getValueAt(i,9).toString(); 
      int Discount=Integer.parseInt(discount); 
      String vAT=model.getValueAt(i,10).toString(); 
      int VAT=Integer.parseInt(vAT); 

      query="Insert into StockInfo (P_Code,P_Name,Description,Selling_Price,Qnty,Discount,VAT)" 
        + "Select P_Code,P_Name,Description,Selling_Price,Opening_Stock,Discount,VAT from ProductInfo where P_Code='"+P_Code+"'"; 
      PStat=con.prepareStatement(query); 

      PStat.setString(1,P_Code); 
      PStat.setString(2,P_Name); 
      PStat.setString(3,Description); 
      PStat.setString(4,Selling_Price); 
      PStat.setInt(5,Qnty); 
      PStat.setInt(6,Discount); 
      PStat.setInt(7,VAT); 

      // here i also want to add some more information from JTextfield into the columns in JTable is it possible. 

      PStat.addBatch(); 
     } 
     PStat.executeBatch(); 

     JOptionPane.showMessageDialog(null,"Data Saved from ProductInfo"); 
    } 
    catch(Exception e) 
    { 
     JOptionPane.showMessageDialog(null,e); 
    } 
    finally 
    { 
    try 
    { 
    PStat.close(); 
    res.close(); 
    } 
    catch(Exception e) 
    { 
    JOptionPane.showMessageDialog(null,e); 
    } 
} 
} 
+0

1)请使用句子开头的大写字母,单词I以及诸如'ArrayList'或Oracle之类的专有名称。但是**就这样。**以大写字母开头的其他单词不会使信息更加清晰,而是让我想要结束问题并帮助其他人。 2)为了更快地获得更好的帮助,请发布[MCVE]或[简短,独立,正确的示例](http://www.sscce.org/)。 –

+0

'i'正在遍历表模型的列索引,但在调用'getValueAt()'时将它用作row-index参数。也许你打算为你的循环限制写'i

回答

0

首先你必须采取从DB DATAS,它会的给你列数/列的名称和具体DATAS

public DefaultTableModel CreateTableModel(){ 
    //-- 

    String query = "select field1,field2..."; 
    ResultSet results = statment.executeQuery(query); 

//-- 
} 

现在科瑞EA方法采取columns_name或只是自己命名它,将其添加到模型

DefaultTableModel model = new DefaultTableModel(); 
String[] ColumnNamesCollections = GetColumnsNameByQuery(query); 
model.setColumnIdentifiers(ColumnNamesCollections); 

现在只是重复你的结果集,并填写你的表

while(results.next()) 
{ 
    Vector<Objetc> element = new Vector<Object> 

    for(counter=0;counter<ColumnNamesCollections.size();counter++) 
    { 

     element.add(results.getObjetc(counter)) 
    } 

    model.addRow(element); 
} 

DefaultTableModel model = CreateTableModel(); 
java.swing.JTable myTable = new java.swing.JTable(model) 
相关问题