1. SQL 声明接口:Statement
在 java.sql 包中定义的 Statement 类代表要在数据库连接上执行的 SQL 语句,并且提供执行方法。Connection 接口提供了生成 Statement 对象的方法。在一般情况下,我们通过 connection.createStatement()
方法就可以得到 Statement 的实例。
有三种 Statement 对象,它们都作为在给定连接上执行 SQL 语句的包容器: Statement 、
PreparedStatement (它从 Statement 继承而来)和 CallableStatement (它从 PreparedStatement 继承而来)。
该接口提供了可以被执行的基本的 SQL 语句,作为提高性能的一项措施, PreparedStatement 对象提
供了可以与查询信息一起预编译的一种语句类型。CallableStatement 对象用来封装数据库中存储过程的
执行。
Statement 提供了许多方法,最常用的方法如下。
execute() 运行语句,返回是否有结果集。
executeQuery() 运行查询语句,返回 ReaultSet 对象。
executeUpdate() 运行更新操作,返回更新的行数。
addBatch() 增加批处理语句。
executeBatch() 执行批处理语句。
clearBatch() 清除批处理语句。
Statement 对象用于执行不带参数的简单 SQL 语句,它的典型使用如下所示。
…
Connection conn = DatabaseConnection.getConnection(); //获得数据库连接对象
Statement stmt = conn.createStatement(); //创建 SQL 语句对象
ResultSet rst = stmt.executeQuery(“select * from sometable”); //执行查询,获得查询结果集
…
PreparedStatement 对象用于执行带或不带 IN 参数的预编译 SQL 语句,它的典型使用如下所示。
…
Connection conn = DatabaseConnection.getConnection(); //获得数据库连接对象
//创建预编译语句对象
PrepareStatement pstmt = conn.prepareStatement(“insert into user_info values(?,?,?,?,?,?,?)”;
pstmt.setString(1.”hellking”); //设置预编译 SQL 语句中的第一个参数
pstmt.setInt(2,20); //设置预编译 SQL 语句中的第二个参数
pstmt.setBoolean(3,true); //设置预编译 SQL 语句中的第三个参数
...
pstmt.executeUpdate(); //执行 SQL 语句
...
CallableStatement 对象用于执行对数据库已存储过程的调用,它的典型使用如下所示。
…
Connection conn = DatabaseConnection.getConnection(); //获得数据库连接对象
String strSQL = “{call demo_account(?,?,?,?,?,?,?)}”;
java.sql.CallableStatement.sqlStmt = conn.prepareCall(strSQL);
sqlStmt.setString(1,”userid_3”); //设置调用存储过程 SQL 语句的第一个参数
sqlStmt.setString(2,”userid_1”); //设置调用存储过程 SQL 语句的第二个参数
...
int I = sqlStmt.executeUpdate(); //执行存储过程
2. 查询结果接口:ResultSet
在 Statement 对象执行 SQL 语句时,有时会返回 ResultSet 结果集。 ResultSet 往往包含的是查询的结果集。此接口抽象了运行 select 语句的结果,提供了逐行访问结果的方法,通过它访问结果的不同字段。
结果集通常是一张表,其中有查询所返回的列标题及相应的值。
通过 ResultSet.next()方法把当前的指针向下移动一位。最初它位于第一行之前,因此第一次调用 next
将把指针置于第一行上,使它成为当前行。随着每次调用 next()导致指针向下移动,按照从上至下的次
序获取 ResultSet 行。通常情况下,可使用如下的代码遍历 ResultSet 对象内的每一行数据:
...
try{
Connection conn = DatabaseConnection.getConnection();
Statement stmt = conn.createStatement();
ResultSet rst = stmt.executeQuery(“select * from User_Info”);
while(rs.next()){
//显示结果集
...
}
}
读取 ResultSet 对象中每一行数据的方法是调用它的 getXXX()方法,XXX 表示 Java 的数据类型。
在使用该方法读取数据时,应该为它指定要读取的列。指定读取的列有两种方法:一种方法是使用列的
序号,另一种方法是使用列名。例如,结果集的第 2 列的列名为“StuName”,则下面的两行代码是等
价的。
…
String name = rs.getString(2);
String name = rs.getString(“StuName”);
…
如果 XXX 所代表的数据类型与结果集中对应列的数据类型不匹配,将会发生类型转换。例如,结
果集中“StuID”列的数据类型为 int,那么调用 getString(“StuID”)读取 StuID 一列的信息时,将会把
结果集中的 int 类型转化为 String 类型。