java jdbc中的Statement、PreparedStatement和CallableStatement(附实例)

377 阅读2分钟

在JDBC中,语句被用来执行数据库中的sql查询。

我们可以使用这个语句发送简单的SQL,complex SQLPL/SQL queries

有三种类型的语句:

  • 语句
  • 预备语句
  • 可调用语句

要创建任何语句对象,需要连接对象。

下面是创建连接对象的java代码

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");  
Connection con= DriverManager.getConnection("jdbc:odbc:orc", "scott", "tiger");  

JDBC中的语句

这是一个简单的语句,用于执行SQL查询,如insert,updatedelete 操作。

我们可以用它来执行静态查询,不接受的输入值可以通过固定的字符串传递给这个语句。

对于每个查询,编译和执行都是在数据库层面上进行的。

try {  
Statement stmt = con.createStatement();  
ResultSet rs = stmt.executeQuery("select \* from employee where employee_id=11");  
......  
} catch (SQLException e) {  
} finally {  
stmt.close();  
}  

每当这个查询从jdbc应用程序传递到数据库以获得结果时,在数据库级别,查询首先被编译,然后执行查询并返回结果。如果我们想用不同的employee_id ,执行多个相同的查询,就会发生多次编译和执行。

为了避免多次编译,我们必须使用PreparedStatement

jdbc中的PreparedStatement

该语句用于多次执行多个SQL查询,如insert,updatedelete 操作。

为此,我们将为同一个查询传递多个不同的输入值。

如果有不同输入值的多个查询,查询将在第一次被编译(解析并创建一个计划),并通过在数据库级别使用相同的计划对不同的值多次执行。与Statement相比,这提高了性能。

我们可以将其用于动态查询,接受动态输入值。同样的查询将数值作为占位符(?,?,?)。

PreparedStatement pstmt = null;  
try {  
String SQL = "Update Employees SET name= ? WHERE employee\_id = ?";  
pstmt = con.prepareStatement(SQL);  
...  
} catch (SQLException e) {  
} finally {  
stmt.close();  
}  

jdbc中的CallableStatement

这个CallableStatement ,用于执行数据库中的存储程序。

存储过程是存储在数据库中的一组SQL语句,以单一名称存储,从而提高性能。

CallableStatement cstmt = null;  
try {  
String SQL = "{call procedureName (?, ?)}";  
cstmt = conn.prepareCall (SQL);  
. . .  
}  
catch (SQLException e) {  
   . . .  
}  
finally {  
. . .  
}  

SQL语句有一个带有占位符的程序名称。
这里的占位符是IN,OUT,INOUT 参数类型。
IN :参数是指输入参数,我们可以使用setXXX方法来设置。OUTINOUT 参数应该通过一个更多的方法来使用,registerOutParameters ,它是将java数据类型映射到数据库列数据类型。