此三个接口的声明如下:

 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的区别的更多相关文章

  1. prepareStatament和Statement和callableStatement的区别

    关系与区别 Statement.PreparedStatement和CallableStatement都是接口(interface) Statement 1.Statement接口提供了执行语句和获取 ...

  2. Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?

    Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别? Java 中访问数据库的步骤 1)注册驱动: 2)建立连接: 3)创建Statement: 4)执 ...

  3. Statement和PreparedStatement之间的区别

    Statement和PreparedStatement之间的区别: 1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程2.使用 Statement ...

  4. java基础 JDBC & Statement & PreparedStatement

    参考文章: http://blog.csdn.net/wang379275614/article/details/23393335 概念 JDBC-数据库连接,是由一些类和接口构成的API,是J2SE ...

  5. statement preparestatement CallableStatement

    大家都知道Statement.PrepareStatement 和CallableStatement 对象,其实它们是interface,为什么JDBC2.0中要提供这三个对象呢?对于Statemen ...

  6. Statement, PreparedStatement和CallableStatement的区别

    Statement用于执行不带参数的简单SQL语句,并返回它所生成的结果,每次执行SQL豫剧时,数据库都要编译该SQL语句. Satatement stmt = conn.getStatement() ...

  7. jdbc中的Statement对象和Preparedstatement对象的区别,以及通过jdbc操作调用存储过程

    一. java.sql.*   和  javax.sql.*的包的类结构 |- Driver接口: 表示java驱动程序接口.所有的具体的数据库厂商要来实现此接口. |- connect(url, p ...

  8. jdbc中Statement和PreparedStatement有什么区别?哪个性能更好?

    Statement和PreparedStatement的功能主要是对sql语句的执行 区别 (1)Statement每执行一条sql语句就需要生成一条执行计划,执行100条就需要100条执行计划Pre ...

  9. 今天第一天开通博客,随笔总结一下resultType(属性)和resultMap,collection和association,Statement和PreparedStatement各自的区别

    1.resultType(属性)和resultMap(标签引用)的区别? resultType不支持自定义返回结果,会将查询到的结果通过到type中java对象的同名的属性,对象中的属性名必须和数据库 ...

随机推荐

  1. SQL Server子查询填充DataSet时报500内部错误的解决办法

    运行环境为Visual Studio 2010,数据库为SQL Server 2008. 执行下面SQL语句 SELECT SubsiteId, SubsiteTitle, count(Collect ...

  2. vue.js 三种方式安装(转)

    https://blog.csdn.net/m0_37479246/article/details/78836686

  3. .resources文件转为可视化.resx文件

    ResGen.exe启动闪退.--方法不对 参考:http://www.opdown.com/soft/101205.html 在cmd中启动ResGen.exe. 打开cmd:输入 C:\Windo ...

  4. vue / js使用video获取视频时长

    项目中遇到上传视频功能,需要有预览和获取视频时长功能,因之前使用upload(有需要的话可以参考下我之前的文章),这里就不赘述,直接用来上传视频,不过在上传之前和上传成功后的钩子里,获取不到时长: 没 ...

  5. WAS 添加数据源

    一.创建安全性别名认证 1.资源-全局安全性-JAVA认证和授权服务-J2C认证数据 2.新建 3.输入别名,这里后面加IP末尾.输入用户名.密码. 4.点击确定.保存. 二.创建数据源连接配置 1. ...

  6. CentOS 查找某个软件安装路径

    1.通过rpm查看 查看软件是否安装.首先我们需要查看软件是否已经安装,或者说查看安装的软件包名称.如查找是否安装mysql 2.接着根据 rpm -ql 列出软件包安装的文件 3.综合上述以上的问题 ...

  7. 测试--错误java.lang.Exception: No tests found matching [{ExactMatcher:fDisplayName=select], {ExactMatcher:fDisplayName=select(com.rjj.demo.DemoApplicationTests)]...

    异常这个错误java.lang.Exception: No tests found matching [{ExactMatcher:fDisplayName=select], {ExactMatche ...

  8. 电商项目中学到的git命令

    1.在拉下来的文件夹被删除后的操作 创建了文件后 git init 增加了 .git文件 ls -al 查看后有.git文件夹 git remote add origin (ssh) 连接到git仓库 ...

  9. Git之生成SSH公钥

    一 生成公钥 ssh-keygen -t rsa -C "michelangelo@qq.com" -t :密钥类型. -C :  注释.通常用作密钥的名字. 依次按三次回车:默认 ...

  10. stm32 开发中startup.s文件中常见的命令功能

    由于C的普及以及编译器的发展,越来越多的软件工程师在编程时很少有机会接触到汇编语言.在ARM的开发中,我们不可避免的会遇到启动文件的编写,在KEIL环境中一般采用了startup.s的文件作为启动代码 ...