For some reason, PreparedStatement.addBatch() is discarding previous batches and so only keeping last batch.
String insertSQL = "INSERT INTO sp500data (sic, cik, name, ddate, value, stmt, line, ctag) VALUES (?,?,?,?,?,?,?,?);";
try {
DatabaseMigrator migrator = new DatabaseMigrator();
migrator.connectToLocalDB();
ResultSet rs = migrator.getDataFromLocalDB(selectSQL);
PreparedStatement preparedStatement = migrator.getLocalConn().prepareStatement(insertSQL);
while(rs.next()){
preparedStatement.setInt(1, rs.getInt(1));
preparedStatement.setInt(2, rs.getInt(2));
preparedStatement.setString(3, rs.getString(3));
preparedStatement.setInt(4, rs.getInt(4));
preparedStatement.setDouble(5, rs.getDouble(5));
preparedStatement.setString(6, rs.getString(6));
preparedStatement.setInt(7, rs.getInt(7));
preparedStatement.setString(8, rs.getString(8));
System.out.println("batch added");
preparedStatement.addBatch();
}
System.out.println(preparedStatement.toString());
} catch (SQLException e) {
throw new RuntimeException(e);
}
batch added
batch added
batch added
batch added
INSERT INTO sp500data (sic, cik, name, ddate, value, stmt, line, ctag) VALUES (('1731'::int4),('1050915'::int4),('QUANTA SERVICES INC'),('20121231'::int4),('2.201727E9'::double precision),('BS'),('17'::int4),('CurrentAssets'))
The PrepareStatement is outside of the while loop, I’ve checked via a print statement that it’s making a new insert statement every single loop. But why is this the case
DatabaseMigrator migrator = new DatabaseMigrator();
migrator.connectToLocalDB();
ResultSet rs = migrator.getDataFromLocalDB(selectSQL);
PreparedStatement preparedStatement = migrator.getLocalConn().prepareStatement(insertSQL);
while(rs.next()){
preparedStatement.setInt(1, rs.getInt(1));
preparedStatement.setInt(2, rs.getInt(2));
preparedStatement.setString(3, rs.getString(3));
preparedStatement.setInt(4, rs.getInt(4));
preparedStatement.setDouble(5, rs.getDouble(5));
preparedStatement.setString(6, rs.getString(6));
preparedStatement.setInt(7, rs.getInt(7));
preparedStatement.setString(8, rs.getString(8));
// System.out.println("batch added");
preparedStatement.addBatch();
System.out.println(preparedStatement.toString());
}
INSERT INTO sp500data (sic, cik, name, ddate, value, stmt, line, ctag) VALUES (('2273'::int4),('851968'::int4),('MOHAWK INDUSTRIES INC'),('20121231'::int4),('2.550046E9'::double precision),('BS'),('8'::int4),('CurrentAssets'))
INSERT INTO sp500data (sic, cik, name, ddate, value, stmt, line, ctag) VALUES (('3711'::int4),('1318605'::int4),('TESLA MOTORS INC'),('20121231'::int4),('5.24768E8'::double precision),('BS'),('11'::int4),('CurrentAssets'))
INSERT INTO sp500data (sic, cik, name, ddate, value, stmt, line, ctag) VALUES (('3829'::int4),('864749'::int4),('TRIMBLE NAVIGATION LTD /CA/'),('20121231'::int4),('8.15973E8'::double precision),('BS'),('12'::int4),('CurrentAssets'))
INSERT INTO sp500data (sic, cik, name, ddate, value, stmt, line, ctag) VALUES (('1731'::int4),('1050915'::int4),('QUANTA SERVICES INC'),('20121231'::int4),('2.201727E9'::double precision),('BS'),('17'::int4),('CurrentAssets'))
INSERT INTO sp500data (sic, cik, name, ddate, value, stmt, line, ctag) VALUES (('1731'::int4),('1050915'::int4),('QUANTA SERVICES INC'),('20121231'::int4),('2.201727E9'::double precision),('BS'),('17'::int4),('CurrentAssets'))
New contributor
nnonname is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.