java-mysql(2) Prepared statement
上一篇学习了java如何链接配置mysql,这篇学习下java如何处理sql预处理语句(PreparedStatement),首先是一个sql预处理的例子:
package core; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet; public class MethodReferencesTest { public static void main(String[] args) throws CloneNotSupportedException {
// TODO Auto-generated method stub
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
String sqlurl = "jdbc:mysql://172.20.23.75:3306/testdb";
String sqluser = "root";
String sqlpassword = "123456";
long starttime=System.currentTimeMillis();
try {
connection = DriverManager.getConnection(sqlurl, sqluser,
sqlpassword);
PreparedStatement prestatement = connection.prepareStatement("INSERT INTO Testing(Id) VALUES(?)");
prestatement.setInt(1, 1001);
prestatement.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (resultSet != null) {
resultSet.close();
}
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
System.out.println(System.currentTimeMillis()-starttime); } }
首先说一下prepared statement的好处。
1.因为parepared statement 相当与编译好的sql语句模板,所以当你需要运行大量结构相同但只是参数不同的sql语句时候,数据库只需要分析编译一次sql语句即可,其他的都只是参数的替换。这样可以大大提高系统运行效率。 2.因为prepared statement的一开始用占位符来替换sql语句里面的具体参数,这样就坐到了sql语句的参数化,可以避免sql inject的情况出现。
当创建好prepared statement之后,我们就可以设置参数.
prestatement.setInt(1, 1001);
然后执行sql语句
prestatement.executeUpdate();
ps:这里面用executeupdate是因为我们不需要获取返回的结果,所以executeUpdate可以用到我们Create,delete,insert,update的时候。
那么prepared statement到底可以提高多少运行时间呢?可以用两个例子来比较一下:
1.老老实实用executequery
connection = DriverManager.getConnection(sqlurl, sqluser,
sqlpassword);
statement = connection.createStatement(); for (int i = 1; i <= 1000; i++) {
String query = "INSERT INTO Testing(Id) VALUES(" + 2 * i + ")";
statement.executeUpdate(query);
}
//耗时 5511MS
2.用prepared statement
connection = DriverManager.getConnection(sqlurl, sqluser,
sqlpassword); PreparedStatement prestatement = connection.prepareStatement("INSERT INTO Testing(Id) VALUES(?)"); for(int i=1;i<1000;i++)
{
prestatement.setInt(1,i*2);
prestatement.executeUpdate();
}
//耗时:4123ms
所以说prepared statement还是能提升不少运行效率的。
java-mysql(2) Prepared statement的更多相关文章
- Java向PostgreSQL发送prepared statement 与 libpq 向PostgreSQL发送prepared statement之比较:
Java 代码,在数据库端,并没有当成 prepared statetment 被处理. C代码通过libpq 访问数据库端,被当成了 prepared statement 处理.也许是因Postgr ...
- java.sql.SQLException: Prepared or callable statement has more than 2000 parameter markers及解决方案
1. 问题 最近在项目中修bug的时候,碰到这样一个错误: Caused by: java.sql.SQLException:Prepared or callable statement has mo ...
- mysql 执行存储过程报错Prepared statement needs to be re-prepared
今日思语:不喜欢再见 说再见,因为有时明知道下一次再见已是遥遥无期或是不再见 错误如下: ERROR 1615 (HY000) at line 406 in file: 'update-mysql.s ...
- MySQL之Prepared Statements
1.概述 prepared statement在MySQL4.1中引进并且增加了一些新的命令: COM_STMT_PREPARE COM_STMT_EXECUTE COM_STMT_CLOSE COM ...
- Postgresql:prepared statement "S_1" already exists
近期由于业务需要和一些json的存储查询需要,把新的应用切到pgsql上来,刚刚切好,是可以正常使用的,但是偶尔会来一下 java连接pgsql 偶尔出现 这个错. org.postgresql. ...
- 对Prepared Statement 是否可以防止 SQL Injection 的实验
代码: import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; im ...
- Java-Runoob-高级教程:Java MySQL 连接
ylbtech-Java-Runoob-高级教程:Java MySQL 连接 1.返回顶部 1. Java MySQL 连接 本章节我们为大家介绍 Java 如何使用 使用 JDBC 连接 MySQL ...
- PDO 使用prepared statement 预处理LIMIT等非表字段参数
由于一些驱动不支持原生的预处理语句,因此PDO可以完全模拟预处理.PDO的模拟预处理是默认打开的,即便MYSQL驱动本身支持预处理,在默认打开的状态下,PDO是不会用到MYSQL本身提供的预处理功能. ...
- Java 学习(22):Java MySQL 连接
Java MySQL 连接 本章节我们为大家介绍 Java 如何使用 使用 JDBC 连接 MySQL 数据库. Java 连接 MySQL 需要驱动包,最新版下载地址为:http://dev.mys ...
随机推荐
- git merge与rebase
参考这篇文章 Git 之 merge 与 rebase 的区别 文章2 另外,使 rebase出现冲突后,先修改冲突,然后git add 某文件(我使用add .经常有问题),然后git reba ...
- Eclipse 学习总结
一. Eclipse 中一个普通 JavaWeb 项目的目录结构 如果项目工程中没有web.xml文件,可以手动动态添加. 右击项目 -> java EE Tools -> ...
- JScript实现将指定目录下的vc工程加到解决方案
作者:朱金灿 来源:http://blog.csdn.net/clever101 main(); function main() { try { var WSShell = WScript.Creat ...
- npm与cnpm混用导致的问题
npm和cnpm混用之后,再用npm升级模块导致如下错误: 解决办法: 删除node_modules文件下的文件后,重新执行npm install
- QWidget之Alien与Native小记(果然是DirectUI的方式,QWidget居然提供了nativeParentWidget函数,而且可以动态设置native父窗口)good
在QWidget 之paint部分杂记提到了从Qt4.4开始,Alien Widget被引入.那么...这是什么东西呢,我们在使用中又可能会感受到什么东西? 用例子来说话似乎比用源码来说话来得容易,所 ...
- Win7 32bit下一个hadoop2.5.1源代码编译平台的搭建各种错误遇到
从小白在安装hadoop困难和错误时遇到说起,同时,我们也希望能得到上帝的指示. 首先hadoop更新速度非常快,最新的是hadoop2.5.1,因此就介绍下在安装2.5.1时遇到的各种困难. 假设直 ...
- 陈硕 - Linux 多线程服务端编程 - muduo 网络库作者
http://chenshuo.com/book/ Muduo网络库源码分析(一) EventLoop事件循环(Poller和Channel)http://blog.csdn.net/nk_test/ ...
- 设计模式(四)The Factory Pattern 出厂模式
一.简单工厂 定义:定义一个创建对象的接口,可是由其子类决定要实例化的对象是哪一个,工厂方法让类的实例化推迟到子类. 通俗的来讲就是由工厂方法确定一个框架.详细的实现由其子类来完毕. 与简单工厂相比, ...
- 2-2 Consul注册注销流程
铺垫,创建健康检查方法,Consul服务器隔一段时间请求一下webapi里的一个方法,如果这个方法没有问题,则证明这个webapi还在正常工作,这个webapi提供的服务就存在.如果方法没有返回,或者 ...
- Linux性能测试 KSysguard工具
KDE System Guard (KSysguard)是KDE的任务管理和性能监控工具.它采用client/server架构,可以监控本机也可以监控远端主机. KDE System Guard默认的 ...