2017-09-13 74 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) 
相關問題