我准备在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而当前的环境是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快 ,为什么
解决方案 »
- 关于MySQL同步备份的问题
- 死锁show engine innodb status\G; 后结果
- 这个SQL语句什么意思。。。
- mysql数据库监控规定的表中每五分钟内没有新数据产生则报警提示,最好把这个提示信息放到一个txt的文件里
- 请教:如何判断某个表中有没有某个字段,没有就添加
- 求mysql语句!已知当前时间戳,求表中所有在本星期的数据
- PostgreSQL并发控制详解(2)
- mysql 把两个查询结果放一起输入,如何写,用left join行吗
- mysql 查询总数限制上限(count(*))
- MySQL 语句问题
- postgresql如何操作二维数组
- 问一下mysql复合索引如何建立?
如果是INNODB的,则根据你是否需要事务而定。
请问到底 用prepared statements还是 statement语句好
statement语句好
如果是INNODB的,则根据你是否需要事务而定。
------------全部 innodb 。 用事务很少。但用到。自己的探索:Using Server-Side Prepared Statements
• “useServerPrepStmts=true”---------------看官方手册 提示要在 my.cnf 这个加这个好
• Less parsing - “native” on-wire format
• Binding and Execution have compact on-wire format
• Sketchy on early versions of MySQL-5.0
• Type conversions can be more costly
• Less memory pressure官方还提到
Caching Prepared Statements
• “cachePrepStmts=true”
• “prepStmtCacheSize=..” and “prepStmtCacheSqlLimit=...”
• Saves parsing cost (even more in version 5.1.8)
• Reduces memory footprint for non-server-side statements
• Reduces latency for server-side statements
prepareStatement() phase新问题
1 是否我应该把这2个参数 都加入到my.cnf里?
2 如何看当前的系统的这2个参数状态 ?
mysql> show VARIABLES like '%cachePrepStmts%';
Empty set
mysql> show VARIABLES like '%userServerPrepStmts%';
Empty set
查看代码 ,发现开发人员用的是
jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb" +
"?cachePrepStmts=true", "user", "pass");
f都加了cachePrepStmts=true的 ------都是在java里加的
2、PreparedStatement主要作用是上述你所说的预编译与提高了安全性(SQL语句正确性、
按照JDBC规范的想法,实际上preparedstatement的出现主要的目的是为了提高SQL语句的的性能,
而防止SQL注入和类型转换实际上并不是规范原本的目标)
而不是提高速度
cachePrepStmts=true
useServerPrepStmts=true
(很头疼 )
Comparing files mysql.gif and TEST.GIF
FC: no differences encounteredTest case is attached.-Xmx1024M -XX:+UseParallelGC -Dcom.mysql.jdbc.java6.javac=C:\jvms\jdk1.6.0\bin\javac.exe
-Dcom.mysql.jdbc.java6.rtjar=C:\jvms\jdk1.6.0\jre\lib\rt.jar
-Dcom.mysql.jdbc.testsuite.url.default=jdbc:mysql://opensol:xx/test?user=xx&password=xx&autoReconnect=false&connectTimeout=5000&socketTimeout=30000&useInformationSchema=true&useServerPrepStmts=true&useAffectedRows=false