日期:2014-05-16  浏览次数:20709 次

用prepared statements还是 statement语句好
我准备在java 环境下大量使用 prepared statements (linux java mysql 环境)
1而当前的环境是autocommit=1, 是否有必要我把 mysql 的my.cnf 配置修改 为 autocommit=0??
在java 环境下大量使用 prepared statements 是否mysql 需要做特别的配置?
2 我的当前应用复杂,全部是update delete insert 更新语句
请问到底 用prepared statements还是 statement语句好

(分别如

preparedstatement ps = connection.preparestatement(sql);
ps.setint(1,id);
ps.setstring(2,name);
resultset rs = ps.executequery(); 

Connection conn=initConnect();
Statement statement = conn.createStatement();

这是很多人的观点 statement prestatement有什么区别

  后者的效率比前者高,在使用PreparedStatement对象执行SQL命令时,命令被数据库进行编译和解析,然后被放到命令缓冲区.然后,每当执行同一个PreparedStatement对象时,它就会被再解析一次,但不会被再次编译.在缓冲区中可以发现预编译的命令,并且可以重新使用.

  如果要你写insert update delete 最好用preparedStatement,在有大量用户的企业级应用软件中,经常会重复执行相同的SQL命令,使用PreparedStatement对象带来的编译次数的减少能够提高数据库的总体性能
)

我当前应用是很复杂的. 2台机器每隔几分分别用socket 推送数据(发数据包)到web 服务器(java 的tomcat容器)
java程序链接mysql服务器,参照这些数据包对mysql的对应表进行数据更新 (insert新数据; delete from a where id in (数据包里的id), update in (数据包里的id))。事实上已经确实用
PreparedStatement,但总是有人反映statement用起来实际比PreparedStatement快 ,为什么


------解决方案--------------------
1、INNODB支持事务,根据表的引擎决定;
2、PreparedStatement主要作用是上述你所说的预编译与提高了安全性(SQL语句正确性、
按照JDBC规范的想法,实际上preparedstatement的出现主要的目的是为了提高SQL语句的的性能,
而防止SQL注入和类型转换实际上并不是规范原本的目标)
而不是提高速度
------解决方案--------------------
感觉还是PreparedStatement好点,可以用来批量更新,用事务管理下就可以了 没必要该配置文件