java - 提高 SQL 从 JDBC (SQL Server) 插入 XML 列的速度

标签 java xml performance sql-server-2008 jdbc

我目前正在编写一个 Java 程序,该程序循环访问包含大约 4000 个 XML 文件的文件夹。

使用 for 循环,它从每个文件中提取 XML,将其分配给字符串“xmlContent”,并使用PreparedStatement 方法 setString(2,xmlContent) 将字符串插入到存储在我的 SQL Server 中的表中。

列“2”是 XML 类型的名为“Data”的列。

该过程有效,但速度很慢。它每 7 秒向表中插入大约 50 行。

有人对如何加快此过程有任何想法吗?

代码:

{ ...declaration, connection etc etc
        PreparedStatement ps = con.prepareStatement("INSERT INTO Table(ID,Data) VALUES(?,?)");

        for (File current : folder.listFiles()){
           if (current.isFile()){
              xmlContent = fileRead(current.getAbsoluteFile());
              ps.setString(1, current.getAbsoluteFile());
              ps.setString(2, xmlContent);
              ps.addBatch();

              if (++count % batchSize == 0){
                    ps.executeBatch();
              }

           }
        }
        ps.executeBatch();   // performs insertion of leftover rows
        ps.close();
}
<小时/>
private static String fileRead(File file){

         StringBuilder xmlContent = new StringBuilder();

         FileReader fr = new FileReader(file);
         BufferedReader br = new BufferedReader(fr);
         String strLine = "";
         br.readLine();      //removes encoding line, don't need it and causes problems
         while ( (strLine = br.readLine() ) != null){
             xmlContent.append(strLine);
         }
         fr.close();

         return xmlContent.toString();
     }

最佳答案

仅通过一点阅读和快速测试 - 看起来您可以通过关闭连接上的自动提交来获得不错的加速。我看到的所有批量查询教程也都推荐它。如http://www.tutorialspoint.com/jdbc/jdbc-batch-processing.htm

将其关闭 - 然后在您想要的位置(在每个批处理结束时、在整个函数结束时等)删除显式提交。

 conn.setAutoCommit(false);
 PreparedStatement ps = // ... rest of your code

 // inside your for loop

     if (++count % batchSize == 0) 
     {
           try {
             ps.executeBatch();
             conn.commit();
           }
           catch (SQLException e)
           {
              // .. whatever you want to do
              conn.rollback();
           }
     }

关于java - 提高 SQL 从 JDBC (SQL Server) 插入 XML 列的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11351451/

相关文章:

java - 在 AEM 中以编程方式验证 LDAP 用户

java - 允许模拟位置#Android

java - 如何单独自定义TabLayout选项卡?

android - 无法使用 Retrofit 2 和简单 XML 转换器获取 SOAP 信封正文

c# - 是否应该避免使用 LINQ,因为它很慢?

java - 创建一个发生在与 AtomicBoolean 的关系之前

java - 为什么我不能使用 DefaultTableModel?我错过了一些明显的东西吗? ( java )

c# - XML 元素和命名空间

带有偏差的MySQL随机记录

performance - Scala 函数式编程比传统编码慢吗?