Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL и JDBC с rewriteBatchedStatements=true

с rewriteBatchedStatements=true JDBC ще опакова възможно най-много заявки в един мрежов пакет, намалявайки по този начин мрежовите разходи. Прав ли съм?

да. Следният код

String myConnectionString =
        "jdbc:mysql://localhost:3307/mydb?" +
        "useUnicode=true&characterEncoding=UTF-8";
try (Connection con = DriverManager.getConnection(myConnectionString, "root", "whatever")) {
    try (PreparedStatement ps = con.prepareStatement("INSERT INTO jdbc (`name`) VALUES (?)")) {
        for (int i = 1; i <= 5; i++) {
            ps.setString(1, String.format(
                    "Line %d: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", 
                    i));
            ps.addBatch();
        }
        ps.executeBatch();
    }
}

ще изпрати отделни оператори INSERT, въпреки че съм създал пакет

INSERT INTO jdbc (`name`) VALUES ('Line 1: Lorem ipsum ...')
INSERT INTO jdbc (`name`) VALUES ('Line 2: Lorem ipsum ...')

Въпреки това, ако променя низа за връзка, за да включва rewriteBatchedStatements=true

String myConnectionString =
        "jdbc:mysql://localhost:3307/mydb?" +
        "useUnicode=true&characterEncoding=UTF-8" +
        "&rewriteBatchedStatements=true";

тогава JDBC ще изпрати един или повече многоредови оператори INSERT

INSERT INTO jdbc (`name`) VALUES ('Line 1: Lorem ipsum ...'),('Line 2: Lorem ipsum ...')

JDBC знае ли стойността, присвоена на max_allowed_packet и следователно прави пакета по-малък от дефинираната стойност за max_allowed_packet ... ?

да. Ако активирате общия дневник на MySQL и го проверите, ще видите, че MySQL Connector/J проверява куп променливи, когато се свързва, една от които е max_allowed_packet . Можете също да зададете малък max_allowed_packet стойност и проверете дали JDBC разделя партида на няколко многоредови оператора INSERT, ако един такъв израз за цялата партида би надвишил max_allowed_packet .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Динамично създаване на PHP обект въз основа на низ

  2. TIME_FORMAT() Примери – MySQL

  3. Как да получите размера на базата данни MySQL за вашата база данни?

  4. ТОП 5 Синтаксис за изтриване на MySQL със съвети за T-SQL разработчици

  5. MySQL изгледи