Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL और JDBC पुनर्लेखन के साथBatchedStatements=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. MySQL अपडेट केस मदद

  2. MySQL डेटाबेस में दृश्यों का उपयोग कैसे करें

  3. mysqli::query ():mysqli नहीं ला सका

  4. MySQL में INSTR () फ़ंक्शन कैसे काम करता है

  5. MySQL:डेटाबेस पर **सभी** विशेषाधिकार प्रदान करें