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 ...
随机推荐
- Sublime Text3中JSX支持Emmet快捷键
在复习React的过程中,发现Sublime有些快捷键不能用了,如Emmet的Tab快速生成HTML代码只能用Ctrl+E快捷键,而不能用Tab键了,在网上找了很多文章,发现都有问题,最终自己通过下面 ...
- C++重载加号运算符实现两个结构体的相加
#include<iostream> #include<string> using namespace std; struct S { int a, b; string str ...
- 编程算法 - 背包问题(三种动态规划) 代码(C)
背包问题(三种动态规划) 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目參考: http://blog.csdn.net/caroline_wen ...
- Java InputStream、String、File相互转化 --- good
String --> InputStreamByteArrayInputStream stream = new ByteArrayInputStream(str.getBytes()); Inp ...
- 十分钟了解 spring cloud
1 为什么需要服务发现 简单来说,服务化的核心就是将传统的一站式应用根据业务拆分成一个一个的服务,而微服务在这个基础上要更彻底地去耦合(不再共享DB.KV,去掉重量级ESB),并且强调DevOps和快 ...
- VS2017 安装过程
2017 安装过程 工欲善其事必先利其器 Visual Studio 2017 正式版官方下载地址:https://www.visualstudio.com/downloads/ 安装vs2017的时 ...
- webpack打包不引入vue、echarts等公共库
如果我们打包的时候不想将vue.echarts等公共库包含在内,需要配置两处地方, 以下以基于vue-cli生成的项目为基准: 1webpack配置: // webpack.base.conf.js ...
- delphi之IOCP学习(一)
困扰已久的网络通信(IOCP:完成端口),今天终于揭开她的神秘面纱了,之前百度N久还是未能理解IOCP,网络上好多博文都没有贴出源码,初学者很难正在理解IOCP并自己写出通信例子 ,经过努力,今天自己 ...
- MySQL 关键字和保留字
ACCESSIBLE (R) ACCOUNT[a] ACTION ADD (R) AFTER AGAINST AGGREGATE ALGORITHM ALL (R) ALTER (R) ALWAYS[ ...
- Android 4.0开发之GridLayOut布局实践
在上一篇教程中http://blog.csdn.net/dawanganban/article/details/9952379,我们初步学习了解了GridLayout的布局基本知识,通过学习知道,Gr ...