Statement与PreparedStatement的区别
Statement与PreparedStatement的区别
PreparedStatement预编译SQL语句,性能好。
PreparedStatement无序拼接SQL语句,编程更简单.
PreparedStatement可以防止SQL注入,安全性好。
Statement由方法createStatement()创建,该对象用于发送简单的静态的SQL语句。
PreparedStatement由方法preparedStatement()创建,该对象用于发送带有一个
或多个输入参数的SQL语句。该方法继承了Statement的所有方法。并进行了扩展。
SQL语句使用“?”作为数据占位符,使用setXxx()方法设置数据。
setXxx()方法的第一个参数谁要设置参数的序数位置,第二个参数时设置给该参数的值。
//Statement的用法
int id=111;
String sql="selsect * from user where id="+id;
Statement st=connection.CreateStatement();
ResultSet rs=st.executeQuery(sql);
//PreparedStatement的用法
//PreparedStatement可替换变量(在SQL语句中可以包含?)
String sql="select * from user where id=?";
PreparedStatement ps=connection.preparedStatement(sql);//sql在这里进行预编译
int id =111;
ps.setInt(1,id);//为sql传入参数
ResultSet rs=ps.executeQuery();//这里不需要sql,因为上面预编译过
stmt.executeUpdate(updateString);
Code Fragment 2:
PreparedStatement updateSales = con.prepareStatement("UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ? ");
updateSales.setInt(1, 75);
updateSales.setString(2, "Colombian");
updateSales.executeUpdate();
片断2和片断1的区别在于,后者使用了PreparedStatement对象,而前者是普通的Statement对象。PreparedStatement对象不仅包含了SQL语句,而且大多数情况下这个语句已经被预编译过,因而当其执行时,只需DBMS运行SQL语句,而不必先编译。当你需要执行Statement对象多次的时候,PreparedStatement对象将会大大降低运行时间,当然也加快了访问数据库的速度。
这种转换也给你带来很大的便利,不必重复SQL语句的句法,而只需更改其中变量的值,便可重新执行SQL语句。选择PreparedStatement对象与否,在于相同句法的SQL语句是否执行了多次,而且两次之间的差别仅仅是变量的不同。如果仅仅执行了一次的话,它应该和普通的对象毫无差异,体现不出它预编译的优越性。
最新文章
- 10月wish me luck
- 安装时遇到:正在尝试其它镜像。 http://mirrors.btte.net/centos/7.2.1511/extras/x86_64/repodata/repomd.xml: [Errno 14] curl#6 - ";Could not resolve host: mirrors.btte.net; 未知的错误";
- 关于IOS应用程序视图
- 幻灯片插件FlexSlider -- Amaze UI幻灯片参数
- 【转】HTTP长连接与短连接
- Getting Started with Java
- POJ 1961 Period(KMP)
- 目标识别:Bag-of-words表示图像
- php 7 正式发版
- 【有意思的BUG】浏览器的Title和Icon
- 嵌入式linux------ffmpeg移植 编码H264(am335x编码H264)
- 【Python 07】汇率兑换1.0-2(基本元素)
- 一些简单的ajax的特点,方法、属性。以及ajax的创建 请求
- Prism 学习:从本地目录加载 Module
- Unity3D Shader 高斯模糊
- haproxy实现会话保持
- netty---------write flush两个方法到底做了什么?
- 并发编程之 Semaphore 源码分析
- C#读取Mysql blob字段 (转帖)
- js 日期去掉 -
热门文章
- ArcPy开发教程1-面向ArcGIS的Python语言基础
- texmaker报错:could not start command 解决
- ide调试
- C# WinForm窗体及其控件的自适应
- TCP/UDP 常用端口列表
- springboot整合mybatis遇到的那些坑
- mysql学习笔记--数据库单表查询
- 【网络编程】服务端产生大量的close_wait状态的进程分析
- 426. Convert Binary Search Tree to Sorted Doubly Linked List把bst变成双向链表
- [leetcode]243. Shortest Word Distance最短单词距离