Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Partia JDBC z PreparedStatement nie działa w MySQL

Wygląda na to, że tworzysz nowy PreparedStatement w każdej iteracji, więc executeBatch() zostanie zastosowany tylko do ostatniego PreparedStatement obiekt.

Ponadto PreparedStatement służy do unikania wstrzykiwania SQL i dba o uciekanie wartości, gdy używasz ? system symboli zastępczych.

addBatch() Metoda, której używasz, jest przeznaczona do pracy ze zmiennymi parametrami :

, a nie z surowymi zapytaniami, jak próbowałeś (w tym celu użyjesz addBatch(zapytanie java.lang.String)

Poniższy przykład powinien zrobić to, co chcesz:

String[][] data = { { "first", "data" }, { "second", "data" }, { "third", "data" } };

String sql = "insert into abc(col1,col2) values (?, ?)";// use placeholders

PreparedStatement pst = connection.prepareStatement(sql);// create a single statement

for (String[] row : data) {

       // set parameters
       pst.setString(1, row[0]);
       pst.setString(2, row[1]);

       pst.addBatch();// validate the set
}

int[] chkSql = pst.executeBatch(); // execute the batch of commands
//check if chkSql consists of 0..rollback else commit for > 0


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak znaleźć nazwę ograniczenia w MySQL

  2. jaki jest lepszy sposób na zmianę zestawu znaków dla dużych tabel danych?

  3. Znajdowanie wolnych miejsc w systemie rezerwacji

  4. Ustaw wynik zapytania MySQL w JComboBox

  5. upewnij się, że wynik metody pobierania PDO jest błędem lub pustym wynikiem