在JDBC中,语句被用来执行数据库中的sql查询。
我们可以使用这个语句发送简单的SQL,complex SQL 和PL/SQL queries 。
有三种类型的语句:
- 语句
- 预备语句
- 可调用语句
要创建任何语句对象,需要连接对象。
下面是创建连接对象的java代码
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con= DriverManager.getConnection("jdbc:odbc:orc", "scott", "tiger");
JDBC中的语句
这是一个简单的语句,用于执行SQL查询,如insert,update 和delete 操作。
我们可以用它来执行静态查询,不接受的输入值可以通过固定的字符串传递给这个语句。
对于每个查询,编译和执行都是在数据库层面上进行的。
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,update 和delete 操作。
为此,我们将为同一个查询传递多个不同的输入值。
如果有不同输入值的多个查询,查询将在第一次被编译(解析并创建一个计划),并通过在数据库级别使用相同的计划对不同的值多次执行。与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方法来设置。OUT 或INOUT 参数应该通过一个更多的方法来使用,registerOutParameters ,它是将java数据类型映射到数据库列数据类型。