`
zjx2388
  • 浏览: 1307631 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

JDBC的批处理操作三种方式 pstmt.addBatch();

阅读更多
JDBC的批处理操作三种方式
 
 
SQL批处理是JDBC性能优化的重要武器,经本人研究总结,批处理的用法有三种。
 
package lavasoft.jdbctest;

import lavasoft.common.DBToolkit;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;

/**
* JDBC的批量操作三种方式
*/

public class BatchExeSQLTest {

        public static void main(String[] args) {
                exeBatchStaticSQL();
        }

        /**
         * 批量执行预定义模式的SQL
         */

        public static void exeBatchParparedSQL() {
                Connection conn = null;
                try {
                        conn = DBToolkit.getConnection();
                        String sql = "insert into testdb.book (kind, name) values (?,?)";
                        PreparedStatement pstmt = conn.prepareStatement(sql);
                        pstmt.setString(1, "java");
                        pstmt.setString(2, "jjjj");
                        pstmt.addBatch();                     //添加一次预定义参数
                        pstmt.setString(1, "ccc");
                        pstmt.setString(2, "dddd");
                        pstmt.addBatch();                     //再添加一次预定义参数
                        //批量执行预定义SQL
                        pstmt.executeBatch();
                } catch (SQLException e) {
                        e.printStackTrace();
                } finally {
                        DBToolkit.closeConnection(conn);
                }
        }

        /**
         * 批量执行混合模式的SQL、有预定义的,还有静态的
         */

        public static void exeBatchMixedSQL() {
                Connection conn = null;
                try {
                        conn = DBToolkit.getConnection();
                        String sql = "insert into testdb.book (kind, name) values (?,?)";
                        PreparedStatement pstmt = conn.prepareStatement(sql);
                        pstmt.setString(1, "java");
                        pstmt.setString(2, "jjjj");
                        pstmt.addBatch();    //添加一次预定义参数
                        pstmt.setString(1, "ccc");
                        pstmt.setString(2, "dddd");
                        pstmt.addBatch();    //再添加一次预定义参数
                        //添加一次静态SQL
                        pstmt.addBatch("update testdb.book set kind = 'JAVA' where kind='java'");
                        //批量执行预定义SQL
                        pstmt.executeBatch();
                } catch (SQLException e) {
                        e.printStackTrace();
                } finally {
                        DBToolkit.closeConnection(conn);
                }
        }

        /**
         * 执行批量静态的SQL
         */

        public static void exeBatchStaticSQL() {
                Connection conn = null;
                try {
                        conn = DBToolkit.getConnection();
                        Statement stmt = conn.createStatement();
                        //连续添加多条静态SQL
                        stmt.addBatch("insert into testdb.book (kind, name) values ('java', 'java in aciton')");
                        stmt.addBatch("insert into testdb.book (kind, name) values ('c', 'c in aciton')");
                        stmt.addBatch("delete from testdb.book where kind ='C#'");
                        stmt.addBatch("update testdb.book set kind = 'JAVA' where kind='java'");
//                        stmt.addBatch("select count(*) from testdb.book");                //批量执行不支持Select语句
                        //执行批量执行
                        stmt.executeBatch();
                } catch (SQLException e) {
                        e.printStackTrace();
                } finally {
                        DBToolkit.closeConnection(conn);
                }
        }
}
 
注意:JDBC的批处理不能加入select语句,否则会抛异常:
java.sql.BatchUpdateException: Can not issue SELECT via executeUpdate().
  at com.mysql.jdbc.StatementImpl.executeBatch(StatementImpl.java:1007)
 

转载自:http://lavasoft.blog.51cto.com/62575/238651

分享到:
评论

相关推荐

    完美的myeclipse连接mysql代码和最新驱动包JDBC

    pstmt.setObject(1, id); pstmt.setObject(2, name); pstmt.setObject(3, classname); pstmt.setObject(4, sex); pstmt.setObject(5, age); pstmt.execute(); }catch(Exception e){ ...

    mysql+java课程设计学生管理系统

    pstmt.setString(1, book.getBookName()); pstmt.setString(2, book.getAuthor()); pstmt.setString(3, book.getSex()); pstmt.setFloat(4, book.getPrice()); pstmt.setInt(5, book.getBookTypeId()); pstmt....

    踩踩踩JDBC六大步骤

    1、JDBC编程六大步: ...1.class.forName(driver) 2.new oracle.jdbc.driver.OracleDriver(); 3.java -Djdbc.drivers=oracle.jdbc.driver.OracleDriver jdbc.drivers=System....pstmt.execute*(); 5)获得并处理结果集

    MVC模式的实现的增删改查

    ResultSet rs = pstmt.executeQuery(); Contact c = null; while(rs.next()){ // int id = rs.getInt("id"); String name=rs.getString("name"); String phone=rs.getString("phone"); ...

    jdbc-odbc的基本操作

    pstmt.setString(1, tel.substring(0, 7)); rs = pstmt.executeQuery(); if (rs.next()) { result=new String(rs.getBytes("PCity"),"gbk");//访问数据库中文乱码问题 //result = rs.getString(1); } else { ...

    jdbc连接数据库的方式2

    我们可以使用addBatch()和executeBatch()方法选择标准的JDBC批处理,或者通过利用PreparedStatement对象的setExecuteBatch()方法和标准的executeUpdate()方法选择速度更快的Oracle专有的方法。要使用Oracle专有的...

    bbs系统可留言

    pstmt.setObject(i+1, param[i]); } num = pstmt.executeUpdate(); } catch (SQLException ex) { throw new Exception("错误提示:请检查SQL语法是否有误"); //throw ex ; } finally{ close(connect,pstmt...

    oracle.10g.程序包数组参数oracle-character-set-852

    oracle.sql.ArrayDescriptor desc =... pstmt.setArray(1, array); pstmt.executeUpdate(); 将10g版本配套的3个文件集中到一起, orai18n.jar classes12.jar nls_charset12.jar 防止下载的文件版本不一样,仍抛出异常

    jdbc基础和参考

    pstmt.setType(index,value); index从1开始 3.提供预编译的功能,某种程度上可以避免sql注入的问题 4.提前做语法检查,在给?赋值的过程中要求数据类型一定要匹配,这样在某种程度上可以避免因为数据类型...

    JDBC访问数据库的步骤

    result=pstmt. executeUpdate(); result类型为整型,返回一个整数,小于零操作没成功 7.关闭不再使用的 如:rs.close(); stmt.close(); con.close(); JDBC编程步骤总结: 1. Load the Driver:Class.forName(); ...

    servlet+jsp+javaBean开发的网站书店(完整源码)

    pstmt_item.addBatch(); } pstmt_item.executeBatch(); dbUtil.getCon().commit(); } catch (SQLException e) { e.printStackTrace(); try { dbUtil.getCon().rollback(); } catch ...

    简单财务管理系统 java sql 数据库

    pstmt.close(); pstmt=null; } catch (SQLException e) { e.printStackTrace(); } } public static ResultSet getRs(Statement stmt,String sql){ ResultSet rs=null; try { rs=stmt.executeQuery(sql); ...

    java与mysql日期类型的问题

    java和mysql日期的问题。通过java向mysql中插入datetime类型的数据: String sql = "INSERT INTO wp_posts ( post_date )VALUES(?)"; PreparedStatement pstmt = connection.... pstmt.setTimestamp(1, time);

    北大青鸟第二单元项目

    pstmt.setObject(i+1, args[i]); } } rs = pstmt.executeQuery(); while(rs.next()){ User user = new User(); user.setUserno(rs.getInt("USERNO")); user.setUsername(rs.getString...

    仿QQ登录窗体,拉伸展开!

    import com.jdbc.DB; import com.window.Main; public class Login extends JFrame { private JPanel contentPane; private Point pressedPoint; /*private final class LoginActionListener implements ...

    java数据库封装类

    conn = DriverManager.getConnection("jdbc:mysql://localhost/shopping?user=root&password=root"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e....

    简单留言板

    ;charset=gb2312"%> <%@ page import = "java.sql.*"%> <title>JDBC+JSP 留言管理程序 使用JDBC连接ORACLE数据库 ...PreparedStatement pstmt = null; ResultSet rs = null; int flag = 0; %> <%

    如何用java代码写数据库数据

    如何在用java代码修改数据库数据: Java写数据库数据的前提: 首先要Java与数据库相连接。如有不懂得可以看我的之前的博文。 用Java代码修改数据 如一个方法(根据id 修改年龄大小):void xg...PreparedStatement pstmt

    光盘网站大作业

    List all = new ArrayList() ; String sql = "SELECT id,name,idguangpan,idgeshou FROM gequ WHERE ... PreparedStatement pstmt = null ; DataBaseConnection dbc = null ; dbc = new DataBaseConnection() ;

Global site tag (gtag.js) - Google Analytics