JDBC中的PreparedStatement相比Statement的好处有哪些?
来源:互联网 发布:access窗口输入数据 编辑:程序博客网 时间:2024/04/29 05:52
1、相对比较安全,可以防止sql注入2、有预编译功能,相同操作批量数据效率较高
JDBC PreparedStatement 批量更新数据注意的问题
- 博客分类:
- Java相关
JDBClog4j工作
PreparedStatement 批量更新数据可以提升程序执行效率,缩短程序运行时间,但是在实际工作中运用时,发现要注意以下几个问题:系统环境:
JDK1.6.0_21
Oracle10g
Eclipse3.6.1
用到的jar包:
ojdbc6.jar
commons.logging-1.1.1.jar
commons-dbcp-1.4.jar
commons-pool-1.5.5.jar
commons-collections-3.2.1.jar
log4j-1.2.6.jar
spring2.5.6.jar
(1)虽然是批量提交,但当数据量大时应该将提交设置为每500次已提交(更具具体情况而定),这么干的好处可以节约内存资源,至少不会因为内存不够用而报内存溢出的异常,在有就是可以加快数据库的执行效率。
(2)connect.commit()后connect可能会被关闭,需要再次开启
事例代码如下:
- static Logger log = Logger.getLogger(UpdateLog.class);
- static final int COMMIT = 500; //每500条记录一提交
- Connection connect = null;
- PreparedStatement pstmt = null;
- String strsql = null;
- **
- * 办公用品结款
- * @param supid
- * @param rows
- * @param jg_je
- * @param s_je
- * @param cpid
- */
- public void ULogOffice(int supid,int rows,double jg_je,double s_je,List<CPInfoData> cpid){
- int rowsTmp = 0;
- try {
- connect = DBConn.getConnection(); //打开一个池连接
- connect.setAutoCommit(false);
- //第一步:更新t_supplier_log 表
- strsql = "INSERT INTO t_bi_supplier_log VALUES(?,sysdate,?,?,?,0,'首次','办公厨房','SYSTEM','ONE')";
- insertInfo(supid, rows, jg_je, s_je);
- //第二步:更新syn_provid_psjh_mx 表中 lb1 为 40
- strsql = "UPDATE syn_provid_psjh_mx SET lb1='40' " +
- "WHERE jhdate=? AND sup_id=? AND lb=? AND rkdh=? AND jkdate is null";
- if(cpid.size()!=0){
- for (CPInfoData cpInfoData : cpid) {
- //门店 用sup_id、jhdate、lb、id确定唯一一条记录
- pstmt = connect.prepareStatement(strsql.toString());
- pstmt.setDate(1, Date.valueOf(cpInfoData.getJhdate().substring(0,10)));
- pstmt.setInt(2, supid);
- pstmt.setString(3, cpInfoData.getLb());
- pstmt.setString(4, cpInfoData.getDh().trim());
- pstmt.addBatch();
- if(rowsTmp%COMMIT==0){//每500条记录一提交
- pstmt.executeBatch();
- connect.commit();
- if (null==connect) { //如果连接关闭了 就在创建一个 为什么要这样 原因是 conn.commit()后可能conn被关闭
- connect = DBConn.getConnection();
- connect.setAutoCommit(false);
- }
- }
- rowsTmp++;
- }
- pstmt.executeBatch();
- connect.commit();
- }
- connect.setAutoCommit(true);
- log.info("ULogOffice 办公用品 [" + supid +"] 数据库更新完毕" );
- }catch (Exception e) {
- try {
- connect.rollback();
- log.info("ULogOffice 办公用品 [" + supid +"] 数据库更新异常-回滚[" + e.getMessage() + "]");
- } catch (SQLException e1) {
- e1.printStackTrace();
- }
- e.printStackTrace();
- }finally{
- closePstmt(pstmt);
- closeConnection(connect);
- }
- }
- JDBC中的PreparedStatement相比Statement的好处有哪些?
- JDBC中的PreparedStatement相比Statement的好处有哪些?
- JDBC中的PreparedStatement相比Statement的好处有哪些?
- JDBC中使用preparedStatement相比statement的优势
- JDBC使用 PreparedStatement 比使用 Statement 的好处
- JDBC中的Statement和PreparedStatement的区别
- JDBC中的Statement和PreparedStatement的区别
- JDBC中的Statement和PreparedStatement的区别
- JDBC中的Statement和PreparedStatement的区别
- JDBC中的Statement和PreparedStatement的区别
- JDBC中的Statement和PreparedStatement的区别
- JDBC中的Statement和PreparedStatement的区别
- JDBC中的Statement和PreparedStatement的区别
- JDBC中的Statement和PreparedStatement的区别
- JDBC中的Statement和PreparedStatement的区别
- JDBC中的Statement和PreparedStatement的区别
- PreparedStatement相较Statement的好处
- HTML5与Flash相比有哪些好处?
- 成功沟通的六要素
- 详细介绍Java的内存管理与内存泄露
- 如何建设网站并与数据库相连(以access为例)
- C#生成唯一的字符串或者数字
- Spring 中JCA CCI分析
- JDBC中的PreparedStatement相比Statement的好处有哪些?
- 项目的边缘工作
- 浅析C++中的this指针
- Linux下解压压缩及打包命令大全
- 系统托盘图标显示菜单(TrackPopupMenu)无法自动消失解决方法
- 中国软件人的悲哀
- AP主要账户及会计分录
- linux chmod命令参数及用法详解--文件文件夹权限设定命令
- 临时表的创建和作用