2013-07-16 148 views
3

我想一些JTable中的數據保存到數據庫:我的代碼是這樣的:將數據插入數據庫

public void save(){ 
String invSL = new Mixed_Calculation().invoice_Sl(); 
jTextField6.setText(invSL); 

int rows = jTable1.getRowCount(); 


for(int row = 0; row<rows ; row++){ 

String code = (String) jTable1.getValueAt(row, 1); 
String name = (String) jTable1.getValueAt(row, 2); 
String unit = (String) jTable1.getValueAt(row, 3); 

    String units[] = unit.split(" "); 
    int q = Integer.parseInt(units[0]); 
    String u = units[1]; 

    String rate = (String) jTable1.getValueAt(row, 4); 
    String total = (String) jTable1.getValueAt(row, 5); 
    String d_rat = (String) jTable1.getValueAt(row, 6); 
    String discount = (String) jTable1.getValueAt(row, 7); 
    String net = (String) jTable1.getValueAt(row, 8); 


try{ 
conn = new connection().db(); 
conn.setAutoCommit(false); 


    String query = "INSERT INTO INVOICE(INVOICE_NO, CODE, DESCRIPTION, BONUSABLE," 
     + " TAXABLE, CATEGORY, QNTY, UNIT, RATE, TOTAL , DISC_PERCENTAGE, DISCOUNT, NET_AMOUNT) " 
     + " VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) " ; 


stmt = conn.prepareStatement(query); 
stmt.setString(1, jTextField6.getText()); //Invoice No 
stmt.setString(2, code); //Code 
stmt.setString(3, name); //Description 
stmt.setString(4, ""); //Bonusable 
stmt.setString(5, ""); //Taxable 
stmt.setString(6, ""); //Category 
stmt.setInt(7, q); //Qnty 
stmt.setString(8, u); //Unit 
stmt.setDouble(9, Double.parseDouble(rate)); //Rate 
stmt.setDouble(10, Double.parseDouble(total)); //Total 
stmt.setDouble(11, Double.parseDouble(d_rat)); //Disc_% 
stmt.setDouble(12, Double.parseDouble(discount)); //Discount 
stmt.setDouble(13, Double.parseDouble(net)); //net_Amount 

stmt.addBatch(); stmt.executeBatch(); 
conn.commit(); 

} 

catch(SQLException ex){ 
    JOptionPane.showMessageDialog(null, "Cannot save. "+ ex); 
    } 
    finally{try{stmt.close(); conn.close(); conn.setAutoCommit(true);}  catch(SQLException ex){} } 

} 
} 

爲什麼這個方法有沒有效果呢?我在這裏做錯了什麼?有沒有其他的系統,我可以直接從jTable插入數據?

+1

您是否收到任何錯誤?你的數據庫連接是否正確? – amaurs

回答

3

就拿for循環外批次的執行,這就是addBatch()的利益,因爲它擊中的數據庫只有一個時executeBatch()被調用時。

for(int row = 0; row<rows ; row++) 
    { 
    //...... 
    stmt.addBatch(); 
} 
stmt.executeBatch(); 
conn.commit(); 
+0

+1幫助。:)我解決了我的問題與你的建議答案的幫助。謝謝 – rachana