jdbc中Statement和PreparedStatement有什么区别?哪个性能更好?
Statement和PreparedStatement的功能主要是对sql语句的执行
区别
(1)Statement每执行一条sql语句就需要生成一条执行计划,执行100条就需要100条执行计划PreparedStatement在执行相同
功能的sql语句,但仅仅是参数不同时,则只需要编译一次,更适合批量处理
(2)PreparedStatement中的SQL语句是可以带参数的,避免了用字符串连接拼接SQL语句的麻烦和不安全
例如sql语句
select * from user where id=1
select * from user where id=2
如果用Statement语句执行则需要生成两个执行计划而PreparedStatement则只需要编译一次,执行时仅仅是换个参数而已所以当
在执行大量的功能重复的语句时,效率会成百倍的提升。
两者的使用:
首先连接数据库 这都是相同的
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "root";
String sql = "select * from goods where goodsid = 123";
DriverManager.registerDriver(new com.mysql.jdbc.Driver());//注册数据库驱动
Connection conn = DriverManager.getConnection(url, user, password);//连接数据库
Statement在执行sql语句时不能再sql语句中设置参数
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);
while(rs.next()){
int id = rs.getInt("goodsid");
String name = rs.getString("goodsname");
int price = rs.getInt("costprice");
String manufacturer = rs.getString("manufacturer");
System.out.println(id+" "+name+" "+price+" "+manufacturer);
}
rs.close();
conn.close();
st.close();
PreparedStatement执行sql语句
PreparedStatement pst = conn.prepareStatement(sql1);
pst.setInt(1,789);//第一个参数指的是sql语句中第几个参数(问号),第二个参数为?处要填的值
pst.setString(2, "大米");
pst.setInt(3, 220);
pst.setInt(4, 500);
pst.setString(5,"大米公司");
pst.executeUpdate();
conn.close();
pst.close();
参考:http://blog.csdn.net/jiangwei0910410003/article/details/26143977
jdbc中Statement和PreparedStatement有什么区别?哪个性能更好?的更多相关文章
- Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别? Java 中访问数据库的步骤 1)注册驱动: 2)建立连接: 3)创建Statement: 4)执 ...
- Statement和PreparedStatement之间的区别
Statement和PreparedStatement之间的区别: 1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程2.使用 Statement ...
- 请教JDBC中的thin和OCI的区别\
请教JDBC中的thin和OCI的区别 https://zhidao.baidu.com/question/2267123737573204748.html
- Statement、 PreparedStatement 、CallableStatement 区别和联系
Statement. PreparedStatement .CallableStatement 区别和联系 1. Statement.PreparedStatement和CallableStateme ...
- JDBC与Statement和PreparedStatement的区别
一.先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.具体步骤: 1.首先导入 ...
- 今天第一天开通博客,随笔总结一下resultType(属性)和resultMap,collection和association,Statement和PreparedStatement各自的区别
1.resultType(属性)和resultMap(标签引用)的区别? resultType不支持自定义返回结果,会将查询到的结果通过到type中java对象的同名的属性,对象中的属性名必须和数据库 ...
- JDBC之Statement、PreparedStatement和CallableStatement
JDBC提供了Statement.PreparedStatement和CallableStatement三种方式来执行查询语句,其中Statement用于通用查询,PreparedStatement用 ...
- mysql中in和exists二者的区别和性能影响
mysql查询语句in和exists二者的区别和性能影响 还记得一次面试中被人问到in 和 exists的区别,当然只是草草做答,现在来做下分析. mysql中的in语句是把外表和内表作hash 连接 ...
- JDBC中Statement接口提供的execute、executeQuery和executeUpdate之间的区别
Statement 接口提供了三种执行 SQL 语句的方法:executeQuery.executeUpdate 和 execute.使用哪一个方法由 SQL 语句所产生的内容决定. 方法execut ...
随机推荐
- LeetCode Split Array into Consecutive Subsequences
原题链接在这里:https://leetcode.com/problems/split-array-into-consecutive-subsequences/description/ 题目: You ...
- ArcGIS破解配置及oracle文件配置
1.破解配置 2.oracle文件配置
- 洛谷 4721 【模板】分治 FFT——分治FFT / 多项式求逆
题目:https://www.luogu.org/problemnew/show/P4721 分治FFT:https://www.cnblogs.com/bztMinamoto/p/9749557.h ...
- (转)java中查找List的快捷小方法
相信java开发的程序员,经常会遍历list里的数据,来查找想要的数据.之后选出来在做处理,我这有个小方法在大量数据的情况下能更快捷,当然这方法只对菜鸟有点用,对老鸟来说也许有更好的方法,请指点 遍历 ...
- 64位linux下rpm安装mysql的5.5.55版本
昨天同事开了个阿里云环境,让我帮他安装mysql数据库,本想着很简单的一件事,结果还是折腾了一番.坑很多,一路趟过,一个接一个,只能硬着头皮冲. 首先是下载压缩包,因为采用了rpm安装方式,所以下载的 ...
- flask之flask-restful
0.需要的库flask_restful from flask import Flask from flask_cors import CORS 1.参数的获取self.parser.add_argum ...
- switch控件的使用
java中: public class MainActivity extends Activity implements OnCheckedChangeListener{ private Switch ...
- python开发模块基础:re正则
一,re模块的用法 #findall #直接返回一个列表 #正常的正则表达式 #但是只会把分组里的显示出来#search #返回一个对象 .group()#match #返回一个对象 .group() ...
- Java面试(二)
1 同步方法 VS 同步代码块: java中,每一个对象都有一把锁,线程用synchronized获取对象上的锁. 非静态同步方法:锁是类的对象的锁. 静态同步方法:锁的是类本身. 同步方法块:锁是可 ...
- Linux操作系统下的多线程编程详细解析----条件变量
条件变量通过允许线程阻塞和等待另一个线程发送信号的方法,弥补了互斥锁(Mutex)的不足. 1.初始化条件变量pthread_cond_init #include <pthread.h> ...