此三个接口的声明如下:

 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. linux安装后不显示网卡信息

    虚拟机安装CentOS 6.4之后,ifconfig只现实lo接口的信息,没有显示eth0网卡的信息,进入/etc/sysconfig/network-scripts/目录中,可以看到ifcfg-et ...

  2. Activity 与 Task

    [Activity 与 Task] A task is a collection of activities that users interact with when performing a ce ...

  3. 解题8(FindLongestNumberStr)

    题目描述 样例输出 输出123058789,函数返回值9 输出54761,函数返回值5 接口说明 函数原型: unsignedint Continumax(char** pOutputstr,  ch ...

  4. rancher 2 webhook 格式

    { "version":"4", "groupKey":<string>, "status":"& ...

  5. VIM常见命令

    1.删除所有数据 进入到第1行按下d,然后输入G回车,此时内容被全部清除 2.替换 :s/vivian/sky/ 替换当前行第一个 vivian 为 sky:s/vivian/sky/g 替换当前行所 ...

  6. UVM1

    1.UVM: p_sequencer 的使用 http://blog.csdn.net/tingtang13/article/details/46546395

  7. 关于set_output_delay与set_input_delay概念与用法

    一.  这两条约束语句都是针对板级延时而言的. 语句中必须的有是,时钟与port. 二.   set_input_delay 用于数据输入端口,调节数据输入与时钟输入到来的相位关系. 当FPGA外部送 ...

  8. oracle视图(转)

    视图的概念   视图是基于一张表或多张表或另外一个视图的逻辑表.视图不同于表,视图本身不包含任何数据.表是实际独立存在的实体,是用于存储数据的基本结构.而视图只是一种定义,对应一个查询语句.视图的数据 ...

  9. java虚拟机的原理

    所谓虚拟机,就是一台虚拟的机器.它是一款软件,用来执行一系列虚拟计算机指令,大体上虚拟机可以分为系统虚拟机和程序虚拟机,Visual Box .Vmare就属于系统虚拟机.他们完全是对物理计算机的仿真 ...

  10. Linux系统(Centos)下安装nodejs并配置环境

    总结Centos下安装nodejs并配置环境,记录成功安装的方法.推荐的安装方法是利用已编译的二进制文件安装,不推荐使用源码的形式安装,一是源码安装比较麻烦,二是需要自行下载编译浪费时间. 1.安装n ...