2017-09-13 12 views
0

私はデータベースから選択した列をJTableに保存する必要があり、のデータを同じに保存する必要があるということを認識しました。JTablejava.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, 
} 

そして、これは私が情報あなたは、それが意志DBから件のデータを取るために持っているすべての

/*** 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あなたのテーブルを埋めるモデル

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

にこれを追加するためのEA法は、使用してください文の先頭の大文字、単語I、 'ArrayList'やOracleのような適切な名前が含まれています。しかし、**それを残してください。**大文字で他のすべての単語を開始しても、メッセージがより明確になるわけではなく、代わりに質問を閉じて他の人を助けたいと思うようになります。 2)すぐに助けを得るために、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 –

+0

'i'はテーブルモデルの列インデックスを反復しますが、' getValueAt() 'を呼び出すときはrow-index引数として使用しています。おそらく、あなたはあなたのループ制限に 'i

答えて

0

ファーストを格納する必要がJTableです:

データベースは、いくつかの列のように持っています列番号/列名と具体的なデータを入力してください

public DefaultTableModel CreateTableModel(){ 
    //-- 

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

//-- 
} 

今すぐcreat )columns_nameを取るか、単に自分でそれを命名し、今ちょうどあなたの結果セットを反復処理し、

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) 
関連する問題