一旦获得Connection,我们将主要使用它来创建Statement对象。Statements表示单个SQL事务;它们用于执行查询并检索结果(如果有)。让我们看一些例子:
public void useConnection() throws SQLException{
Connection conn = getConnection();
//我们可以使用Connection创建语句
Statement state = conn.getStatement();
//Statements are most useful for static, "one-off" queries
String query = "SELECT * FROM mainTable";
boolean sucess = state.execute(query);
//execute方法正是这样做的。它执行提供的SQL语句,如果执行提供的结果(即SELECT),则返回true,否则返回false。
ResultSet results = state.getResultSet();
//ResultSet对象表示SQL语句的结果(如果有)。
//在这种情况下,ResultSet包含查询语句的返回值。
//下一个示例将更详细地检查ResultSet。
ResultSet newResults = state.executeQuery(query)
//executeQuery方法是一种“快捷方式”方法。它将execute和getResultSet方法合并为一个步骤。
//请注意,提供的SQL查询必须能够返回结果。通常,它是一个静态SELECT语句。
//Statement接口提供了许多类似的“快捷方式”方法,包括executeUpdate和executeBatch
//陈述虽然有用,但并不总是最佳选择。
String newQuery = "SELECT * FROM mainTable WHERE id=?";
PreparedStatement prepStatement = conn.prepareStatement(newQuery);
//PreparedStatement是变量语句的首选,尤其是将要多次执行的语句
for(int id:this.ids){
prepStatement.setInt(1,id);
//PreparedStatements允许您使用多种设置方法设置绑定变量。
//各种set方法中的任何一个的第一个参数是要设置的绑定变量的索引。请注意,它从1开始,而不是0。
ResultSet tempResults = prepStatement.executeQuery()
//就像声明一样,PreparedStatement也有几个快捷方法。
//与声明不同,PreparedStatement不会将查询字符串作为其任何执行方法的参数。
//执行的语句始终是传递给创建PreparedStatement的Connector.prepareStatement调用的语句。
}
}