1、相对比较安全,可以防止sql注入
2、有预编译功能,相同操作批量数据效率较高
PreparedStatement 是预编译 ,使用Statement时 sql 中要进行很多的单引号拼接字符串,首先是容易出错也比较麻烦,还有就是存在sql 注入问题这是从安全方面说的。 PreparedStatement 传参数时候用 了占位符 “?”很好的解决了以上Statement的问题。我所体会到得的就是这些。
PreparedStatement是在执行前先输入sql语句,Statement正好相反,是在执行的时候传入sql语句的。
这样的区别在于,PreparedStatement可以在传入sql后,执行语句前,给参数赋值,避免了因普通的拼接sql字符串语句所带来的安全问题,而且准备sql和执行sql是在两个语句里面完成的,也提高了语句执行的效率。
Statement,就没有以前所说的功能了,我一般很少用
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可能会被关闭,需要再次开启
事例代码如下:
- staticLoggerlog=Logger.getLogger(UpdateLog.class);
- staticfinalintCOMMIT=500;
- Connectionconnect=null;
- PreparedStatementpstmt=null;
- Stringstrsql=null;
- **
- *办公用品结款
- *@paramsupid
- *@paramrows
- *@paramjg_je
- *@params_je
- *@paramcpid
- */
- publicvoidULogOffice(intsupid,introws,doublejg_je,doubles_je,List<CPInfoData>cpid){
- introwsTmp=0;
- try{
- connect=DBConn.getConnection();
- connect.setAutoCommit(false);
- strsql="INSERTINTOt_bi_supplier_logVALUES(?,sysdate,?,?,?,0,'首次','办公厨房','SYSTEM','ONE')";
- insertInfo(supid,rows,jg_je,s_je);
- strsql="UPDATEsyn_provid_psjh_mxSETlb1='40'"+
- "WHEREjhdate=?ANDsup_id=?ANDlb=?ANDrkdh=?ANDjkdateisnull";
- if(cpid.size()!=0){
- for(CPInfoDatacpInfoData:cpid){
- 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){
- pstmt.executeBatch();
- connect.commit();
- if(null==connect){
- connect=DBConn.getConnection();
- connect.setAutoCommit(false);
- }
- }
- rowsTmp++;
- }
- pstmt.executeBatch();
- connect.commit();
- }
- connect.setAutoCommit(true);
- log.info("ULogOffice办公用品["+supid+"]数据库更新完毕");
- }catch(Exceptione){
- try{
- connect.rollback();
- log.info("ULogOffice办公用品["+supid+"]数据库更新异常-回滚["+e.getMessage()+"]");
- }catch(SQLExceptione1){
- e1.printStackTrace();
- }
- e.printStackTrace();
- }finally{
- closePstmt(pstmt);
- closeConnection(connect);
- }
- }
分享到:
相关推荐
jdbc中preparedStatement比Statement的好处
Java面试题34.jdbc中preparedStatement比Statement的好处.mp4
主要介绍了详解Java的JDBC中Statement与PreparedStatement对象,PreparedStatement一般来说比使用Statement效率更高,需要的朋友可以参考下
文章目录1、PreparedStatement接口与Statement接口相比,有哪些优势?2、连接数据库分为那几步?3、在使用JDBC操作数据库时如何实现批量添加数据?4、简述JDBC中的常用的类和接口5、JDBC事务的特性及常用方法6、简述...
2、 JDBC 中的 PreparedStatement 相比 Statement 的好处? 3、 Java 中实现多态的机制是什么? 4、 说出 ArrayList,Vector, LinkedList 的存储性能和特性 5、 Collection 和 Collections 的区别。 6、HashMap 和 ...
3.1.PreparedStatement和Statement的对比(面试题) 3.2.PreparedStatement和Statement的关系 3.3.小结 4.使用PreparedStatement完成登录 6.PreparedStatement实现新增 7.PreparedStatement实现更新 ...
JDBC JDBC(Java Database Connectivity)可以为多种关系型数据库提供统一的访问操作接口。 JDBC API:提供各种访问操作接口。 Driver:数据库的驱动程序一般由第三方提供: Oracle ojdbc-x.jar MySQL mysql-connector-...
Java中JDBC程序,PreparedStatement与Statement性能比较。
jdbc连接各数据库及事务处理
3、在动态SQL或有时间限制的命令中使用Statement对象 在执行SQL命令时,我们有二种选择:可以使用PreparedStatement对象,也可以使用Statement对象。无论多少次地使用同一个SQL命令,PreparedStatement都只对它...
java.sql.PreparedStatement 继承Statement接口,表示预编译的SQL语句的对象,SQL语句被预编译并且存储在PreparedStatement对象中。然后可以使用此对象高效地多次执行该语句。 java.sql.CallableStatement 用来...
1、JDBC(Java Database Connection):java连接数据库统一接口API,底层主要通过直接的JDBC驱动和 JDBC-ODBC桥驱动实现与数据库的连接。 1>.JDBC驱动程序类型: <1>.JDBC-ODBC桥加ODBC驱动程序:需要ODBC驱动,适合...
PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程,下面这篇文章主要给大家介绍了关于利用JDBC的PrepareStatement打印真实SQL的方法,需要的朋友可以参考借鉴,下面来一起看看吧。
Java之JDBC连接数据库实现增删改查(2018 使用Dao层实现 完美封装解决硬编码问题 使用预编译对象PreparedStatement) 配置文件 db.properties(保存数据库账号和密码等) 工具类 JDBCUtil.java(抽取公共部分,解决硬...
1 将数据库的JDBC驱动加载到classpath中,在基于JAVAEE的WEB应用实际开发过程中,通常要把目标数据库产品的JDBC驱动复制到WEB-INF/lib下. 2 加载JDBC驱动,并将其注册到DriverManager中。 3 建立数据库连接,取得...
Java-JDBC【之】JDBC概述、获取连接、SQL注入问题与解决、查询...3.SQL注入问题与解决(Statement 、PreparedStatement) 3.1.模拟SQL注入 3.2.PreparedStatement解决 3.3.Statement 与 PreparedStatement 4.完整源码
20、JDBC中的PreparedStatement相比Statement的好处 71 21、写一个用jdbc连接实例。 71 22、ArrayList和Vector的区别? 73 23、List、Set和Map的区别? 74 24、Collection 和 Collections的区别。 74 25、Set里的...
1.4 JDBC 3.0中的类和接口 1.4.1 java.sql包中的类和接口及其使用 1.4.2 javax.sql包中所含内容及其使用 1.5 JDBC驱动程序简介 1.5.1 JDBC-ODBC 桥和ODBC驱动程序 1.5.2 本地API部分Java驱动程序 1.5.3 JDBC...
JDBC主要接口、类: Connection:封装连接 DriverManager:管理驱动 Statement:封装SQL语句 PreparedStatement:封装SQL语句 ResultSet:封装结果集