JDBC Statement,PreparedStatement和CallableStatement的使用

Statement系列接口用于将用户创建的sql语句提交到数据库执行,除了执行存储过程外,一些接口方法还接收参数。

如何选择使用哪种类型Statement?


  • Statement对于固定的sql语句很有用,Statement不能接收参数。

  • PreparedStatement适用于需要多次进行调用的sql语句和多个参数的情况,PreparedStatement可以接收参数。使用PreparedStatement好处多多。比如:防SQL攻击、提高代码的可读性、可维护性、提高效率!

  • CallableStatement用于访问数据库的存储过程,CallableStatement也可以接收参数。存储过程的优点:执行效率很快(因为在数据库服务端执行的)。缺点:移植性差(不同数据库的存储过程是不可移植的)。

Statement的使用

1.创建Statement对象

Statement stmt=conn.creatStatement();

2.Statement常用方法

  • boolean execute(String sql) 返回boolean类型,在执行sql语句后,如果ResultSet检索到,则返回true,否则返回false。
  • int executeUpdate(String sql) 返回int类型,方法用于执行sql语句,将返回sql语句影响的行数。
  • ResultSet executeQuery(String sql) 执行sql语句,将返回结果集。用ResultSet实例化 result去接收返回集。

3.关闭

stmt.close(); 关闭并释放资源。

PreparedStatement的使用

1.使用PreparedStatement插入数据实例

 ...//连接数据库
String sql="insert into userInfo(username.password,gender,age) value(?,?,?,?)";
 //可以传入参数
PreparedStatement ps=conn.prepareStatement(String sql);
//调用setXXX系列方法给问号赋值,下标从1开始,代表第一个问号
ps.setString(1,"name");
ps.setInt(2,123456);
ps.setString(3,"男");
ps.setInt(4,25);
//执行插入
ps.executeUpdate();
ps.close();
conn.close();

2.常用方法:
根据一般的使用习惯

  • boolean execute();在进行数据库或表的创建删除操作时使用。(不传入参数)
  • ResultSet executeQuery(); 数据查询时使用。(不传入参数)
  • int executeUpdate(); 数据的插入删除、修改时使用。(不传入参数)

比如要查询信息得到结果集可以这样写: ResultSet rs=ps.executeQuery(); (这里不传入参数)

2.关闭

ps.close(); 关闭并释放资源。

CallableStatement的使用

1.创建一个CallableStatement

1.1 存储过程存在的三种参数:IN OUT INOUT

  • IN 创建SQL语句时其参数值是未知的。 使用setXXX()方法将值绑定到IN参数。
  • OUT 由SQL语句返回的参数值。可以使用getXXX()方法从OUT参数中检索值。
  • INOUT 提供输入和输出值的参数。使用setXXX()方法绑定变量并使用getXXX()方法检索值。

1.2 如果存储过程只是IN

String sql="{call getEmpName (?, ?)}";
//conn.prepareCall() 与conn.preparedStatement()功能一样
CallableStatement cstmt=conn.prepareCall(sql);
cstmt.setString(1,"aaa");
cstmt.setInt(2,123);
//发送参数,所有调用存储过程的sql语句都是使用executeQuery方法执行。
ResultSet rs=cstmt.executeQuery();

1.3 如果存储过程是INOUT

 //第一个?是输入参数,第二个?是输出参数
 String sql = "CALL pro_test2(?,?)";
 CallableStatement cstmt=conn.preparecall(sql);
 //设置输入参数
 cstmt=setInt(1,5);
 //设置输出参数,用registerOutParameter绑定
 cstmt.registerOutParameter(2,java.sql.Types.VARCHAR);
 //执行
 cstmt.executeQuery();
 //根据?位置取得数据getXXX()方法只用于存储过程
 String rs=cstmt.getString(2);

1.4 关闭CallableStatement

cstmt.close();

你可能感兴趣的:(JDBC Statement,PreparedStatement和CallableStatement的使用)