Mysql с ExecutorService - PullRequest
       15

Mysql с ExecutorService

0 голосов
/ 30 октября 2018

Я хочу использовать Executors для ускорения импорта списка доступных данных в базу данных

            public static void main(String[] args) {

            methodOpenDatabaseConnection();

                        ExecutorService newFixedThreadPool = Executors.newScheduledThreadPool(100);

                        for (long i = 0; i < 1000; i++) {
                            newFixedThreadPool.execute(new Runnable() {
                                @Override
                                public void run( {
methodSaveDataToDatabaseMysql();
                                }
                            });
                        }

                       newFixedThreadPool.shutdown();
                       newFixedThreadPool.shutdown();
                       newFixedThreadPool.awaitTermination(60, TimeUnit.SECONDS);
                       if (newFixedThreadPool.isShutdown()) {
                          methodCloseConnectionDatabase();
                      }
                    }

        public void methodSaveDataToDatabaseMysql() {
                try {
                    preparedStatement = connection.prepareStatement("INSERT INTO `demo`"
                            + " (`name`,`name2`,`name3`) VALUES (?,?,?)");
                    preparedStatement.setString(1, "name1");
                    preparedStatement.setString(2, "name2");
                    preparedStatement.setString(3, "name3");
                    preparedStatement.executeUpdate();
                } catch (SQLException ex) {
                    Logger.getLogger(WebsiteResourcesImpl1.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

Сгенерировано сообщение об ошибке. Если добавить метод синхронизации в методе сохранения. Это будет успешно выполнено, но скорость не улучшится

java.sql.SQLException: No value specified for parameter 3
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:569)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:537)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:527)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:512)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:480)
    at com.mysql.cj.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2159)

Я думаю, что нет проблемы с оператором сохранения, потому что он все еще может сохранять данные успешно, но не стабильно в ExecutorService

1 Ответ

0 голосов
/ 30 октября 2018

На основании этого кода preparedStatement = connection.prepareStatement... тогда preparedStatement не является поточно-ориентированным.

Попробуйте сделать его локальным для methodSaveDataToDatabaseMysql метода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...