Я пытаюсь вставить в базу данных огромное количество данных (несколько миллионов строк), и я хочу сделать это с помощью «пакетов».Итак, у меня есть метод, который получает, скажем, 1000 строк из CSV, и он будет выполнять пакет после цикла for для всех этих 1000 тысяч строк и так далее.Я написал метод, но кажется, что он добавляет в базу данных только одну строку из этих 1000.
Вот то, что я пробовал.
public void insertToDatabase(List<Account> listOfAccounts, Connection connection){
PreparedStatement preparedStatement = null;
try
{
preparedStatement = connection.prepareStatement( INSERT_ACCOUNT_QUERY );
}
catch( SQLException e1 )
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
try
{
for( Account account : listOfAccounts )
{
connection.setAutoCommit( false );
preparedStatement.setString( 1, account.getFirstName( ) );
preparedStatement.setString( 2, account.getLastName( ) );
preparedStatement.setInt( 3, account.getHomeTellNumber( ) );
preparedStatement.setInt( 4, account.getMobileTellNumber( ) );
preparedStatement.setString( 5, account.getAddress( ) );
preparedStatement.setString( 6, account.getCity( ) );
preparedStatement.setString( 7, account.getState( ) );
preparedStatement.setString( 8, account.getJob( ).getCode( ) );
preparedStatement.setString( 9, account.getLocale( ).getCode( ) );
preparedStatement.addBatch( );
}
preparedStatement.executeBatch( );
}
catch( SQLException e )
{
// TODO Auto-generated catch block
e.printStackTrace( );
}
finally
{
try
{
preparedStatement.close( );
}
catch( SQLException e )
{
// TODO Auto-generated catch block
e.printStackTrace( );
}
}
}
Таким образом, метод вставки в базу данных толькопоследний элемент из списка, чтобы добавить их все сразу, в конце.
Спасибо.