上一篇学习了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的更多相关文章

  1. Java向PostgreSQL发送prepared statement 与 libpq 向PostgreSQL发送prepared statement之比较:

    Java 代码,在数据库端,并没有当成 prepared statetment 被处理. C代码通过libpq 访问数据库端,被当成了 prepared statement 处理.也许是因Postgr ...

  2. 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 ...

  3. mysql 执行存储过程报错Prepared statement needs to be re-prepared

    今日思语:不喜欢再见 说再见,因为有时明知道下一次再见已是遥遥无期或是不再见 错误如下: ERROR 1615 (HY000) at line 406 in file: 'update-mysql.s ...

  4. MySQL之Prepared Statements

    1.概述 prepared statement在MySQL4.1中引进并且增加了一些新的命令: COM_STMT_PREPARE COM_STMT_EXECUTE COM_STMT_CLOSE COM ...

  5. Postgresql:prepared statement "S_1" already exists

    近期由于业务需要和一些json的存储查询需要,把新的应用切到pgsql上来,刚刚切好,是可以正常使用的,但是偶尔会来一下 java连接pgsql 偶尔出现 这个错.   org.postgresql. ...

  6. 对Prepared Statement 是否可以防止 SQL Injection 的实验

    代码: import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; im ...

  7. Java-Runoob-高级教程:Java MySQL 连接

    ylbtech-Java-Runoob-高级教程:Java MySQL 连接 1.返回顶部 1. Java MySQL 连接 本章节我们为大家介绍 Java 如何使用 使用 JDBC 连接 MySQL ...

  8. PDO 使用prepared statement 预处理LIMIT等非表字段参数

    由于一些驱动不支持原生的预处理语句,因此PDO可以完全模拟预处理.PDO的模拟预处理是默认打开的,即便MYSQL驱动本身支持预处理,在默认打开的状态下,PDO是不会用到MYSQL本身提供的预处理功能. ...

  9. Java 学习(22):Java MySQL 连接

    Java MySQL 连接 本章节我们为大家介绍 Java 如何使用 使用 JDBC 连接 MySQL 数据库. Java 连接 MySQL 需要驱动包,最新版下载地址为:http://dev.mys ...

随机推荐

  1. wpf中xaml的类型转换器与标记扩展

    原文:wpf中xaml的类型转换器与标记扩展 这篇来讲wpf控件属性的类型转换器 类型转换器 类型转换器在asp.net控件中已经有使用过了,由于wpf的界面是可以由xaml组成的,所以标签的便利也需 ...

  2. 使用Eclispe 查看api技巧

    使用eclispe都会知道当我们把鼠标的光标放到指定发方法上时程序会弹出一个提示,大家不要无论这个提示这个提示就是源码中的说明包含了函数參数使用方法 非常多时候我们碰到一个不会的方法的时候第一步都会选 ...

  3. toolbox、library 的组织

    不要重复制造轮子:重复利用已完成的函数: 1. 一个普通的 matlab toolbox bigData:规模较大的数据集: data:一般的数据集: demos:演示程序,直接可以运行: tools ...

  4. A Byte of Python(简明Python教程) for Python 3.0 下载

    A Byte of Python v1.92 (for Python 3.0) 官方下载地址,当前(20120730)  最新版本 1.92 基于Python3的 下载: http://files.s ...

  5. 跟我学ASP.NET MVC之九:SportsStrore产品管理

    摘要: 在这篇文章中,我将继续完成SportsStore应用程序,让站点管理者可以管理产品列表.我将添加创建.修改和删除产品功能. 本篇文章将分模块的方式,逐个介绍SportsStore站点管理功能的 ...

  6. TL9000 电信业质量体系管理标准

    1.背景介绍:1987年国际标准化组织创立了ISO9000标准.标准发布后,在世界范围内得到了迅速的推广和广泛的认可,成为全世界衡量质量管理水平与质量保证能力的公共标准.九十年代,美国三大汽车公司和航 ...

  7. matlab 类型转换(类型判断)

    char:Convert to character array,转换为字符数组:matlab 下没有 str 字符串类型转换: char(0-255) ⇒ ASCII 码的转换: im2double( ...

  8. WPF字体图标——FontAwesom

    原文:WPF字体图标--FontAwesom 版权声明:本文为[CSDN博主:松一160]原创文章,未经允许不得转载. https://blog.csdn.net/songyi160/article/ ...

  9. C#并口热敏小票打印机打印位图

    原文:C#并口热敏小票打印机打印位图 最近一直在研究并口小票打印机打印图片问题,这也是第一次和硬件打交道,不过还好,最终成功了.   这是DEMO的窗体:   下面是打印所需要调用的代码: class ...

  10. sql xml 查询指定节点值,以及节点属性值

    SELECT   top 10  [HFMBDATA].query('(/Items/Item[@ID=''tbBryj''])').value('(//TextValue)[1]','nvarcha ...