2017-01-19 3 views
0

Это мой код, и я хочу две строки данных в моей базе данных, но когда я перейти только последнюю строку или второй строки, набор данных в моей базе данных таблицы:Как вставить много строк данных таблицы в БД?

try{ 

int rows=tblCO2.getRowCount(); 

for(int row = 0; row<rows; row++) 
    { 
    System.out.println(row); 
    String itemcode = (String)tblCO2.getValueAt(row, 0); 
    String lotno = (String)tblCO2.getValueAt(row, 1); 
    String stackno = (String)tblCO2.getValueAt(row, 2); 
    String grade = (String)tblCO2.getValueAt(row, 3); 
    String ctns = (String)tblCO2.getValueAt(row, 4); 

    try 
    { 
     Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance(); 
     conn = DriverManager.getConnection("jdbc:derby://localhost:1527/demo","user","pw"); 
     conn.setAutoCommit(false); 
     String queryco = "Insert into alicreative.pur(itemcode,lotno,stackno,grade,ctns) values (?,?,?,?,?)"; 
     pst = conn.prepareStatement(queryco); 
     pst.setString(1, itemcode); 
     pst.setString(2, lotno); 
     pst.setString(3, stackno); 
     pst.setString(4, grade); 
     pst.setString(5, ctns); 
     pst.addBatch(); 
    } 
    catch(ClassNotFoundException | InstantiationException | IllegalAccessException | SQLException e) 
    { 
     JOptionPane.showMessageDialog(this,e.getMessage()); 
    } 


} 
pst.executeBatch(); 
conn.commit(); 
} 
catch( HeadlessException | SQLException e){ 
    JOptionPane.showMessageDialog(this,e.getMessage()); 
} 

Так скажите мне решение сохранить два ряда данных в одно действие.

ответ

0

Вы создаете новый объект Connection для каждой строки. Зачем ?

(Как следствие, вы также будете иметь столько объектов различны PreparedStatement, как у вас есть строки. Сколько и какой из них будет на самом деле выполнить после того, как в конце вашего цикла?)

0

PreparedStatement инициализировать (и создавать ваше соединение) перед вашим циклом, потому что, поскольку это так, вы создаете новый на каждой итерации и заполняете его одной партией.

Наконец, вы заканчиваете выполнение только последнего PreparedStatement (который содержит только партию для последней строки).

try{ 

int rows=tblCO2.getRowCount(); 

Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance(); 
conn = DriverManager.getConnection("jdbc:derby://localhost:1527/demo","user","pw"); 
conn.setAutoCommit(false); 
String queryco = "Insert into alicreative.pur(itemcode,lotno,stackno,grade,ctns) values (?,?,?,?,?)"; 
PreparedStatement pst = conn.prepareStatement(queryco); 

for(int row = 0; row<rows; row++) 
{ 
    System.out.println(row); 
    String itemcode = (String)tblCO2.getValueAt(row, 0); 
    String lotno = (String)tblCO2.getValueAt(row, 1); 
    String stackno = (String)tblCO2.getValueAt(row, 2); 
    String grade = (String)tblCO2.getValueAt(row, 3); 
    String ctns = (String)tblCO2.getValueAt(row, 4); 

    try 
    { 

     pst.setString(1, itemcode); 
     pst.setString(2, lotno); 
     pst.setString(3, stackno); 
     pst.setString(4, grade); 
     pst.setString(5, ctns); 
     pst.addBatch(); 
    } 
    catch(ClassNotFoundException | InstantiationException | IllegalAccessException | SQLException e) 
    { 
     JOptionPane.showMessageDialog(this,e.getMessage()); 
    } 


} 
pst.executeBatch(); 
conn.commit(); 
} 
catch( HeadlessException | SQLException e){ 
    JOptionPane.showMessageDialog(this,e.getMessage()); 
} 
Смежные вопросы