Statement和PreparedStatement的异同
1.首先两个都是java向数据库执行sql语句的对象!
java代码连接数据库,并且执行sql语句的步骤如下:
//1.注册数据库的驱动程序
Class.forName(driverClass);
/2/获得数据库的连接
conn=DriverManager.getConnection(url,username,password);
//3创建sql执行对象
Statement stmt=conn.createStatement();
//执行sql语句返回执行结果集rs
ResultSet rs=stmt.executeQuery(sql);
Statement 对象用于将 SQL 语句发送到数据库中。实际上有三种 Statement 对象,它们都作为在给定连接上执行 SQL语句的包容器:Statement、PreparedStatement(它从 Statement 继承而来)和CallableStatement(它从 PreparedStatement 继承而来)。它们都专用于发送特定类型的 SQL 语句:Statement 对象用于执行不带参数的简单 SQL 语句;PreparedStatement 对象用于执行带或不带参数的预编译 SQL 语句;CallableStatement 对象用于执行对数据库已存储过程的调用。
综上所述,总结如下:Statement每次执行sql语句,数据库都要执行sql语句的编译,最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement.但存在sql注入风险。PreparedStatement是预编译执行的。在执行可变参数的一条SQL时,PreparedStatement要比Statement的效率高,因为DBMS预编译一条SQL当然会比多次编译一条SQL的效率高。安全性更好,有效防止SQL注入的问题。对于多次重复执行的语句,使用Prepared
Statement效率会更高一点。执行SQL语句是可以带参数的,并支持批量执行SQL。由于采用了Cache机制,则预编译的语句,就会放在Cache中,下次执行相同的SQL语句时,则可以直接从Cache中取出来。
示例:PreparedStatement
public void save(Stu s) {
//定义要执行的sql
String sql="insert into person(id,name,age) values(?,?,?)";
DBUtil util=new DBUtil();
//得到连接
Connection conn=util.getConnection();
try {
//创建sql执行对象
PreparedStatement psmt=conn.prepareStatement(sql);
psmt.setInt(1, s.getId() );
psmt.setString(2, s.getName() );
psmt.setInt(3, s.getAge());
psmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
util.close(conn);
}
}
示例:Statement
public List list() {
//定义要执行的sql
String sql="select id,name,age from person";
DBUtil util=new DBUtil();
//得到连接
Connection conn=util.getConnection();
try {
//创建sql执行对象
java.sql.Statement stmt=conn.createStatement();
//拿到查询的结果集rs
ResultSet rs=stmt.executeQuery(sql);
//定义一个数组,把结果放进去
List list=new ArrayList();
while(rs.next()) {
int id=rs.getInt(1);
String name=rs.getString(2);
int age=rs.getInt(3);
Stu s=new Stu();
s.setId(id);
s.setName(name);
s.setAge(age);
list.add(s);
}
return list;
} catch (SQLException e) {
e.printStackTrace();
}finally {
util.close(conn);
}
return null;
}
Statement和PreparedStatement的异同的更多相关文章
- 说说Statement、PreparedStatement和CallableStatement的异同(转)
1.Statement.PreparedStatement和CallableStatement都是接口(interface). 2.Statement继承自Wrapper.PreparedStatem ...
- JDBC中的Statement和PreparedStatement的区别
JDBC中的Statement和PreparedStatement的区别
- Statement和PreparedStatement的区别; 什么是SQL注入,怎么防止SQL注入?
问题一:Statement和PreparedStatement的区别 先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接 ...
- 理解 Statement 和 PreparedStatement
java,servlet中的PreparedStatement 接口继承了Statement,并与之在两方面有所不同:有人主张,在JDBC应用中,如果你已经是稍有水平开发者,你就应该始终以Prepar ...
- statement和preparedstatement用法区别
1. PreparedStatement接口继承Statement, PreparedStatement 实例包含已编译的 SQL 语句,所以其执行速度要快于 Statement 对象. 2.作为 ...
- Statement,PreparedStatement和CallableStatement的联系和区别
联系: CallableStatement继承自PreparedSatement,PreparedStatement继承自Statement. 区别: 1:Statement 每次执行sql语句,数据 ...
- Statement和PreparedStatement的特点 MySQL数据库分页 存取大对象 批处理 获取数据库主键值
1 Statement和PreparedStatement的特点 a)对于创建和删除表或数据库,我们可以使用executeUpdate(),该方法返回0,表示未影向表中任何记录 b)对于创建和 ...
- Statement和PreparedStatement的区别; 什么是SQL注入,怎么防止SQL注入? (转)
问题一:Statement和PreparedStatement的区别 先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接 ...
- JDBC中的Statement和PreparedStatement的差别
以Oracle为例吧 Statement为一条Sql语句生成运行计划, 假设要运行两条sql语句 select colume from table where colume=1; select col ...
随机推荐
- chrome强制刷新,非ctrl+f5
开发时,经常有ctrl+f5无法做到真正的强制刷新,以下可以帮到你 Ctrl+Shift+Del 清除Google浏览器缓存的快捷键 Ctrl+Shift+R 重新加载当前网页而不使用缓存内容
- sql server 索引阐述系列一索引概述
一. 索引概述 关于介绍索引,有一种“文章太守,挥毫万字,一饮千钟”的豪迈感觉,因为索引需要讲的知识点太多.在每个关系型数据库里都会作为重点介绍,因为索引关系着数据库的整体性能, 它在数据库性能优化里 ...
- 举例分析 Makefile 中的 filter 与 filter-out 函数
$(filter pattern-,text) Returns all whitespace-separated words in text that do match any of the patt ...
- 前端学习(一) —— HTML
1.js跳转 window.location.href='url'; 2.div显示与隐藏 hide() show() 3.判断是否为一个字符串是否为整形 function isInt(str){ v ...
- [转]Database Transactions in Laravel
本文转自:https://fideloper.com/laravel-database-transactions Laravel's documentation on Database Transac ...
- [转]php hash_pbkdf2 和 node.js crypto.pbkdf2
http://php.net/manual/en/function.hash-pbkdf2.php https://nodejs.org/api/crypto.html#crypto_crypto_p ...
- CentOS 7.6安装桌面
# yum -y groups install "GNOME Desktop" # startx
- [日常] HTTP的缓存
web缓存: 1.可以自动保存常见文档副本的HTTP设备,当web请求抵达缓存时,如果存在缓存副本,就直接从本地存储设备返回,而不是去源服务器获取 2.缓存命中和未命中 3.HTTP再验证,检测服务器 ...
- mongodb与java整合
mongodb与java整合需要用到mongodb驱动,如果是maven环境,则添加如下倚赖: <dependency> <groupId>org.mongodb</gr ...
- 我为什么推荐Prettier来统一代码风格
译者按: 关于代码风格,不同的人有不同的偏好,其实并没有什么绝对的对错.但是,有2条原则应该是对的: 少数服从多数:用工具统一风格. 原文: Why robots should format our ...