Statement、PreparedStatement和CallableStatement的区别
考点:考察求职者对Statement、PreparedStatement和CallableStatement的使用。
出现频率:★★★★
【面试题解析】
开发者需要牢记这三者之间的区别。
1.CallableStatementCallableStatement对象为所有的DBMS提供了一种以标准形式调用已储存过程的方法。调用存储过程有两种格式:一种为包含结果参数的格式,另一种为不包含结果参数的格式。如果使用结果参数,它必须被注册为一个OUT参数。参数通过编号被顺序地引用。第一个参数是1。例如下面调用示例代码:
{?= call [,, ...]} {call [,, ...]}
CallableStatement继承自PreparedStatement。
2.PreparedStatement一条SQL语句是预编译的,且存放在PreparedStatement对象中。该对象可用于有效地多次执行该SQL语句。注意:用于设置IN参数值的SET方法必须指定与定义输入参数的SQL Type兼容的类型。例如,如果IN参数有SQL Type Integer,则应使用setInt方法。如果需要任意的参数类型转换,则setObject方法应当与目标SQL Type一起使用。
3.StatementStatement对象用于执行一条静态的SQL语句,并获取它产生的结果。任何时候每条语句仅能打开一个ResultSet。因此,如果对一个ResultSet的读出与另一个ResultSet的读出交错,那么每个ResultSet一定由不同的语句产生。如果有ResultSet存在,所有的语句执行方法都默认关闭当前的ResultSet。
参考答案:
继承关系:Statement是PreparedStatement的父类,CallableStatement是PreparedStatement的子类。Statement用于执行一条普通的动态SQL语句,PreparedStatement用于执行预编译好的SQL语句,CallableStatement用于调用数据库的存储过程。