Statement及PreparedStatement执行多个sql
2016-07-08 11:16
344 查看
[align=left] 这两个对象的区别:[/align]
[align=left]1.Statement它更适合执行不同sql的批处理,它没有提供预处理功能,性能比较低。[/align]
[align=left]2.PreparedStatement它适合执行相同的批处理,它提供了预处理功能,属性比较高。 [/align]
[align=left] /**[/align]
[align=left] * @param args[/align]
[align=left] * @throws SQLException[/align]
[align=left] * @throws ClassNotFoundException[/align]
[align=left] */[/align]
[align=left] public static void main(String[] args) throws ClassNotFoundException,[/align]
[align=left] SQLException {[/align]
[align=left] // 定义sql 语句[/align]
[align=left] String sql1 = "create table person(id int,name varchar(20))";[/align]
[align=left] String sql2 = "insert into person values(1,'tom')";[/align]
[align=left] String sql3 = "insert into person values(2,'fox')";[/align]
[align=left] String sql4 = "insert into person values(3,'tony')";[/align]
[align=left] String sql5 = "update person set name='张三' where id=1";[/align]
[align=left] String sql6 = "delete from person where id=3";[/align]
[align=left] [/align]
[align=left] Connection conn = jdbcUtils.getConnection();[/align]
[align=left] Statement st = conn.createStatement();[/align]
[align=left] [/align]
[align=left] // 添加批处理sql[/align]
[align=left] st.addBatch(sql1);[/align]
[align=left] st.addBatch(sql2);[/align]
[align=left] st.addBatch(sql3);[/align]
[align=left] st.addBatch(sql4);[/align]
[align=left] st.addBatch(sql5);[/align]
[align=left] st.addBatch(sql6);[/align]
[align=left] [/align]
[align=left] // 执行批处理sql[/align]
[align=left] st.executeBatch();[/align]
[align=left] st.clearBatch();[/align]
[align=left] st.close();[/align]
[align=left] conn.close();[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]使用版本高一点的 jdbc的jar包时加入参数可开启缓存在url中加参数:[/align]
[align=left]?useServerPrepStmts=true&cachePrepStmts=true&rewriteBatchedStatements=true[/align]
[align=left] /**[/align]
[align=left] * @param args[/align]
[align=left] * @throws SQLException[/align]
[align=left] * @throws ClassNotFoundException[/align]
[align=left] */[/align]
[align=left] public static void main(String[] args) throws ClassNotFoundException,[/align]
[align=left] SQLException {[/align]
[align=left] String sqlString = "insert into person values(?,?)";[/align]
[align=left] Connection conn = jdbcUtils. getConnection();[/align]
[align=left] PreparedStatement pst = conn.prepareStatement(sqlString);[/align]
[align=left] long l = System. currentTimeMillis();[/align]
[align=left] for ( int i = 0; i < 10000; i++) {[/align]
[align=left] pst.setInt(1, i);[/align]
[align=left] pst.setString(2, "name" + i);[/align]
[align=left] pst.addBatch();[/align]
[align=left] if (i % 1000 == 0) {[/align]
[align=left] pst.executeBatch();[/align]
[align=left] pst.clearBatch(); // 清空缓存[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] pst.executeBatch();[/align]
[align=left] pst.close();[/align]
[align=left] conn.close();[/align]
[align=left] System. out.println(System. currentTimeMillis() - l);[/align]
[align=left] }[/align]
[align=left]1.Statement它更适合执行不同sql的批处理,它没有提供预处理功能,性能比较低。[/align]
[align=left]2.PreparedStatement它适合执行相同的批处理,它提供了预处理功能,属性比较高。 [/align]
[align=left] /**[/align]
[align=left] * @param args[/align]
[align=left] * @throws SQLException[/align]
[align=left] * @throws ClassNotFoundException[/align]
[align=left] */[/align]
[align=left] public static void main(String[] args) throws ClassNotFoundException,[/align]
[align=left] SQLException {[/align]
[align=left] // 定义sql 语句[/align]
[align=left] String sql1 = "create table person(id int,name varchar(20))";[/align]
[align=left] String sql2 = "insert into person values(1,'tom')";[/align]
[align=left] String sql3 = "insert into person values(2,'fox')";[/align]
[align=left] String sql4 = "insert into person values(3,'tony')";[/align]
[align=left] String sql5 = "update person set name='张三' where id=1";[/align]
[align=left] String sql6 = "delete from person where id=3";[/align]
[align=left] [/align]
[align=left] Connection conn = jdbcUtils.getConnection();[/align]
[align=left] Statement st = conn.createStatement();[/align]
[align=left] [/align]
[align=left] // 添加批处理sql[/align]
[align=left] st.addBatch(sql1);[/align]
[align=left] st.addBatch(sql2);[/align]
[align=left] st.addBatch(sql3);[/align]
[align=left] st.addBatch(sql4);[/align]
[align=left] st.addBatch(sql5);[/align]
[align=left] st.addBatch(sql6);[/align]
[align=left] [/align]
[align=left] // 执行批处理sql[/align]
[align=left] st.executeBatch();[/align]
[align=left] st.clearBatch();[/align]
[align=left] st.close();[/align]
[align=left] conn.close();[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]使用版本高一点的 jdbc的jar包时加入参数可开启缓存在url中加参数:[/align]
[align=left]?useServerPrepStmts=true&cachePrepStmts=true&rewriteBatchedStatements=true[/align]
[align=left] /**[/align]
[align=left] * @param args[/align]
[align=left] * @throws SQLException[/align]
[align=left] * @throws ClassNotFoundException[/align]
[align=left] */[/align]
[align=left] public static void main(String[] args) throws ClassNotFoundException,[/align]
[align=left] SQLException {[/align]
[align=left] String sqlString = "insert into person values(?,?)";[/align]
[align=left] Connection conn = jdbcUtils. getConnection();[/align]
[align=left] PreparedStatement pst = conn.prepareStatement(sqlString);[/align]
[align=left] long l = System. currentTimeMillis();[/align]
[align=left] for ( int i = 0; i < 10000; i++) {[/align]
[align=left] pst.setInt(1, i);[/align]
[align=left] pst.setString(2, "name" + i);[/align]
[align=left] pst.addBatch();[/align]
[align=left] if (i % 1000 == 0) {[/align]
[align=left] pst.executeBatch();[/align]
[align=left] pst.clearBatch(); // 清空缓存[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] pst.executeBatch();[/align]
[align=left] pst.close();[/align]
[align=left] conn.close();[/align]
[align=left] System. out.println(System. currentTimeMillis() - l);[/align]
[align=left] }[/align]
相关文章推荐
- mysql双机热备实现(mysql版本:5.1.7)
- Xtrabackup构建MySQL主从环境
- django的数据库模型中的域多次引用同一个外键(表)
- mybatis学习笔记(八)Sqlsession详解
- oracle查询某字段的重复数据
- Mysql字符集设置 2 图
- Activiti流程 关于自定义sql查询
- 报错:1130-host ... is not allowed to connect to this MySql server 开放mysql远程连接 不使用localhost
- Codeigniter数据库操作
- sql注入
- Mysql字符集设置
- mysql sql语句大全
- 利用 Sqoop 对关系型数据库 与 非关系型数据库,分布式等数据库之间进行数据迁移
- redis在windows下安装和ThinkPHP中使用
- oracle里实例和数据库之间的关系
- 大量 Redis 服务器存在 SSH 权限窃取风险
- 通过数据库评估存储设备IO性能-Oracle 11g IO校准功能介绍
- sqlmap自动的寻找注入点,
- sql server 计算两个经纬度点之间的距离
- MySQL5.7初始密码查看及重置