zoukankan      html  css  js  c++  java
  • JDBC批量运行executeBatch

    JDBC运行SQL语句,有两个处理的接口,一个PreparedStatement,Statement,一般操作JDBC比較用得多的还是PreparedStatement

    只是在运行批量,PreparedStatement有点不够Statement

    ps = conn.prepareStatement(sql);

    for(int i = 0;i<10;i++){

       ps.setString(1,"1");

    //PreparedStatement批处理方式一

       ps.addBatch();

    }

    //PreparedStatement批处理方式二

    ps.addBatch("静态SQL");

    ps.executeBatch();

    这个是正常运行的

    但是把PreparedStatement放到里面就没效了,下面:

    for(int i = 0;i<10;i++){

       ps = conn.prepareStatement(sql);

       ps.setString(1,"1");

       ps.addBatch();

    }

    ps.executeBatch();

    Statement适合循环赋值到sql,代码下面:

    Statement st = conn.createStatement();

    for(int i = 0;i<10;i++){

       st.addBatch("静态sql..........");

    }

    st.executeBatch();

    这个是正常运行全部的语句

    总结:造成这种原因是

    Statement st = conn.createStatement();这里能够不放SQL语句

    ps = conn.prepareStatement(sql);这个一定要放初始SQL语句

    JDBC的批处理不能增加select语句,否则会抛异常:

    java.sql.BatchUpdateException: Can not issue SELECT via executeUpdate().
      at com.mysql.jdbc.StatementImpl.executeBatch(StatementImpl.java:1007)

  • 相关阅读:
    Spring Boot 使用Redis
    openTSDB(转)
    httpClient 超时时间设置(转)
    HTTPClient 超时链接设置
    入坑python 自己写的小工具,纪念一下
    Linux下SVN创建新的项目
    java对象数组的概述和使用
    解决fastDFS客户端连接超时问题
    显示目录结构
    centos7开启80和8080端口
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4238583.html
Copyright © 2011-2022 走看看