Statement、PreparedStatement、CallableStatement的区别
此三个接口的声明如下:
public interface Statement extends Wrapper, AutoCloseable
public interface PreparedStatement extends Statement
public interface CallableStatement extends PreparedStatement
Statement用于执行不带参数的简单SQL语句,每次执行SQL语句时,数据库都要编译该SQL语句,以下是一个最简单的SQL语句
Statement stmt = conn.getStatement();
stmt.executeUpdate("insert into tableName(col, col) values('val', 'val')");
PreparedStatement表示预编译的SQL语句对象,用于执行带参数的预编译SQL语句。
import java.sql.*;
public class Test{
public static void main(String[] args) throws Exception{
String user = "userName"; // 登录数据库的用户名
String password = "password"; // 登录数据库的密码
String url = "jdbc:mysql://localhost:3306/Test?useSSL=false"; // jdbc:mysql:数据库IP地址/数据库名称
String driver = "com.mysql.jdbc.cj.Driver"; // 数据库驱动
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try{
Class.forName(driver); // 加载数据库驱动
conn = DriverManager.getConnection(url, user, password); // 获得数据库连接
stmt = conn.preparedStatement("select * from Employee where id = ?"); // 预编译SQL语句
stmt.setInt(1, 1); // 设置参数
rs = stmt.executeQuery(); // 执行SQL语句
while(rs.next()){
System.out.println(rs.getInt(1) + " " + rs.getString(2) + " " + rs.getInt(3)); // 获得结果集数据
}
}catch(SQLException e){
e.printStackTrace();
}finally{
try{
if (rs != null){
rs.close();
}
if (stmt != null){
stmt.close();
}
if (conn != null){
conn.close();
}
} catch (SQLException e1) {
System.out.println(e1.getMessage());
}
}
}
}
CallableStatement提供了用来调用数据库中存储过程的接口,如果有输出参数要注册,则说明是输出参数。
虽然Statement对象与PreparedStatement对象能够实现相同的功能,但相比之下,PreparedStatement具有以下优点:
1)效率更高。在使用PreparedStatement对象执行SQL命令时,命令会被数据库编译与解析,并放到命令缓冲区。然后,每当执行同一个PreparedStatement对象时,由于在缓冲区中可以发现预编译的命令,虽然它会被再解析一次,但不会被再次编译,是可以重复使用的,能够有效提升系统性能。故如果要执行插入、更新、删除等操作时最好使用PreparedStatement。
2)代码可读性和可维护性更好。
3)安全性更高,可有效预防SQL注入攻击。
Statement、PreparedStatement、CallableStatement的区别的更多相关文章
- prepareStatament和Statement和callableStatement的区别
关系与区别 Statement.PreparedStatement和CallableStatement都是接口(interface) Statement 1.Statement接口提供了执行语句和获取 ...
- Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别? Java 中访问数据库的步骤 1)注册驱动: 2)建立连接: 3)创建Statement: 4)执 ...
- Statement和PreparedStatement之间的区别
Statement和PreparedStatement之间的区别: 1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程2.使用 Statement ...
- java基础 JDBC & Statement & PreparedStatement
参考文章: http://blog.csdn.net/wang379275614/article/details/23393335 概念 JDBC-数据库连接,是由一些类和接口构成的API,是J2SE ...
- statement preparestatement CallableStatement
大家都知道Statement.PrepareStatement 和CallableStatement 对象,其实它们是interface,为什么JDBC2.0中要提供这三个对象呢?对于Statemen ...
- Statement, PreparedStatement和CallableStatement的区别
Statement用于执行不带参数的简单SQL语句,并返回它所生成的结果,每次执行SQL豫剧时,数据库都要编译该SQL语句. Satatement stmt = conn.getStatement() ...
- jdbc中的Statement对象和Preparedstatement对象的区别,以及通过jdbc操作调用存储过程
一. java.sql.* 和 javax.sql.*的包的类结构 |- Driver接口: 表示java驱动程序接口.所有的具体的数据库厂商要来实现此接口. |- connect(url, p ...
- jdbc中Statement和PreparedStatement有什么区别?哪个性能更好?
Statement和PreparedStatement的功能主要是对sql语句的执行 区别 (1)Statement每执行一条sql语句就需要生成一条执行计划,执行100条就需要100条执行计划Pre ...
- 今天第一天开通博客,随笔总结一下resultType(属性)和resultMap,collection和association,Statement和PreparedStatement各自的区别
1.resultType(属性)和resultMap(标签引用)的区别? resultType不支持自定义返回结果,会将查询到的结果通过到type中java对象的同名的属性,对象中的属性名必须和数据库 ...
随机推荐
- 昆虫之膜翅目(Hymenoptera)
1.简介 膜翅目昆虫(sawflies, wasps, ants, and bees,叶蜂.黄蜂目.蚂蚁目和蜜蜂目)是四大种类繁多的昆虫目之一,包括15.3万多种已知昆虫,可能还有多达100万种尚未发现 ...
- CentOS6编译安装php5.3
一.CentOS6编译安装php5.3 1.安装扩展 yum install -y openssl-devel traceroute libtool unzip gcc gcc-c++ autocon ...
- 判断元素16种方法expected_conditions
前言 标签(空格分隔): 判断元素 经常有小伙伴问,如何判断一个元素是否存在,如何判断alert弹窗出来了,如何判断动态的元素等等一系列的判断,在selenium的expected_condition ...
- 18. 4Sum (通用算法 nSum)
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = tar ...
- 我的图片爬虫demo
本来是根据scrapy教程写了一个下载图片的简易爬虫,但是搞了一天,死活下载不了图片. 然后换了一个网站,用原生的库写了一个图片爬虫. import urllib.requestimport osde ...
- [剑指Offer]40-最小的k个数
题目链接 https://www.nowcoder.com/practice/6a296eb82cf844ca8539b57c23e6e9bf?tpId=13&tqId=11182&t ...
- 使用mybatis-generator-core工具自动生成mybatis实体
我们可以使用mybatis-generator-core这个工具将数据库对象转换成mybatis对象,具体步骤如下. 1.mybatis-generator-core下载 下载地址:http://do ...
- swift - self的弱引用
1. weak var weakSelf = self 2. DispatchQueue.main.asyncAfter(deadline: DispatchTime.now()) {[weak se ...
- Tomcat配置远程调试端口(windows、Linux)
当我们需要定位生产环境问题,而日志又不清晰的情况下,我们可以借助Tomcat提供的远程调试,设置如下: // Linxu系统: apach/bin/startup.sh开始处中增加如下内容: decl ...
- Python数据分析--Pandas知识点(二)
本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) 下面将是在知识点一的基础上继续总结. 13. 简单计算 新建一个数据表 ...