欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JDBC中Statement、PreparedStatement、CallableStatement的区别

程序员文章站 2022-06-02 16:59:37
...

1、Statement

作用:执行不含参数的静态SQL语句。

用法:使用JDBC的Connection实例调用createStatement()方法创建一个Statement实例。通过Statement实例的execute()、executeQuerry()或executeUpdate()方法来执行SQL语句。

例:查询Student表中的所有记录

Statement stmt = con.createStatement();  //创建Statement对象,其中con为Connection对象

ResultSet rs = statement.executeQuerry("SELECT * FROM Student");
//使用executeQuerry()执行查询语句,其中返回ResulSet型查询结果

2、PreparedStatement

是Statement的子接口

作用:执行含有参数的动态SQL语句。其中含参数的动态的SQL语句是指在程序运行时能动态地为SQL语句赋参数值。

用法:使用JDBC的Connection实例调用prepareStatement()方法创建一个PrepareStatement实例。与Statement相同的是,PrepareStatement接口同样含有executeQuerry()和executeUpdate()方法。但在调用执行函数前,需要首先对SQL语句赋予参数值。

例:查询Student表中的“小明”同学

String sql = "SELECT * FROM Student WHERE Sname = ?";
//执行查询的sql语句,这里?是参数的位置

PreparedStatement ps = con.prepareStatement(sql);
//创建名为ps的PreparedStatement实例,其中con为Connection实例

ps.setString(1,"小明");
//此处是给sql语句中的参数赋值,1代表第一个参数,由于"小明"是String型,故用setString();

Resultset rs = ps.executeQuerry();
//执行sql语句,并返回Resultset型结果

3、CallableStatement

是PreparedStatement的子接口

作用:用于调用数据库的存储过程。(什么是存储过程?)

用法:使用JDBC的Connection实例调用prepareCall()方法创建一个CallableStatement实例,其中参数为调用存储过程的sql语句。之后的执行语句与上面相同。

注:CallableStatement继承了PreparedStatement的方法(用于处理IN参数),其自身新增了用于处理OUT参数和INOUT参数的输出部分。(什么是IN、OUT、INOUT参数?)

例:这里假设存储过程为2中的查询语句,名为st_SearchName()

CallableStatement cs = con.prepareCall("{call st_SearchName(?)}");
//创建callableStatement实例,其中con是Connection实例

cs.setString(1,"小明");
//为IN参数赋值

ResultSet rs = cs.executeQuery();
//执行sql语句