Данные добавлены дважды в базу данных с использованием JTable Java - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь добавить все свои данные в Jtable в базу данных mysql. но данные добавлены успешно. но данные добавляются дважды в базу данных. Я прикрепил скриншот ниже таблицы базы данных, как добавлена ​​запись введите описание изображения здесь

это код, который я пробовал

try{      

  int rows=jTable1.getRowCount();
  Class.forName("com.mysql.jdbc.Driver");   
  java.sql.Connection  con1=DriverManager.getConnection("jdbc:mysql://localhost/javasales","root",""); 
  con1.setAutoCommit(false);
  String queryco = "Insert into sales_product(product,price) values (?,?)";    
  PreparedStatement preparedStmt = (PreparedStatement) con1.prepareStatement(queryco,Statement.RETURN_GENERATED_KEYS);
  for(int row = 0; row<rows; row++)
  {         
    String product = (String)jTable1.getValueAt(row, 0);
    String price = (String)jTable1.getValueAt(row, 1);       
    preparedStmt.setString(1, product);
    preparedStmt.setString(2, price);
    preparedStmt.executeUpdate();
    ResultSet generatedKeyResult = preparedStmt.getGeneratedKeys();
     preparedStmt.addBatch();

    preparedStmt.executeBatch();
    con1.commit();       
  }
  JOptionPane.showMessageDialog(null, "Successfully Save");    
}
catch(ClassNotFoundException | SQLException | HeadlessException e){
  JOptionPane.showMessageDialog(this,e.getMessage());
}

1 Ответ

0 голосов
/ 11 января 2019

Как и в вашем коде, вы перебираете каждую строку одну за другой, и на каждой итерации вы выполняете оба:

preparedStmt.executeUpdate();
preparedStmt.executeBatch();

Вот почему один и тот же ряд был вставлен дважды. Вы можете использовать следующие решения, чтобы избежать многократной вставки.

  1. Используйте только preparedStmt.executeUpdate(); внутри цикла и удалите preparedStmt.executeBatch();

    preparedStmt.executeUpdate();
        ResultSet generatedKeyResult = preparedStmt.getGeneratedKeys();
    //     preparedStmt.addBatch();
      //  preparedStmt.executeBatch();
        con1.commit();       
      }
    
  2. Не используйте preparedStmt.executeUpdate(); и перемещайте preparedStmt.executeBatch(); за пределы цикла.

    //preparedStmt.executeUpdate();
    //ResultSet generatedKeyResult = preparedStmt.getGeneratedKeys();
     preparedStmt.addBatch();
    }
    preparedStmt.executeBatch();
    con1.commit();
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...