JDBC:查询数据库
查询数据库意味着搜索其数据。这样做是将SQL语句发送到数据库。为此,我们首先需要一个开放的数据库连接。打开连接后,需要创建一个" Statement"对象,如下所示:
Statement statement = connection.createStatement();
创建Statement之后,就可以使用它执行SQL查询,如下所示:
String sql = "select * from people"; ResultSet result = statement.executeQuery(sql);
当执行SQL查询时,我们将返回一个" ResultSet"。 ResultSet包含SQL查询的结果。结果将返回包含数据列的行。我们可以像这样对ResultSet的行进行迭代:
while(result.next()) {
String name = result.getString("name");
long age = result.getLong ("age");
}
如果有更多行,则ResultSet.next()方法将移至ResultSet中的下一行。如果有更多行,则返回true。如果没有更多行,它将返回false。
我们需要至少调用一次" next()",然后才能读取任何数据。在第一个" next()"调用之前," ResultSet"位于第一行之前。
我们可以通过调用某些getXXX()方法(其中XXX是原始数据类型)来获取当前行的列数据。例如:
result.getString ("columnName");
result.getLong ("columnName");
result.getInt ("columnName");
result.getDouble ("columnName");
result.getBigDecimal("columnName");
etc.
获取值的列名作为参数传递给任何" getXXX()"方法调用中的任何一个。
我们也可以改为传递该列的索引,如下所示:
result.getString (1);
result.getLong (2);
result.getInt (3);
result.getDouble (4);
result.getBigDecimal(5);
etc.
为此,我们需要知道给定列在" ResultSet"中具有什么索引。我们可以通过调用ResultSet.findColumn()方法来获取给定列的索引,如下所示:
int columnIndex = result.findColumn("columnName");
如果要迭代大量的行,则按其索引引用列可能比按其名称引用要快。
完成" ResultSet"的迭代后,我们需要同时关闭" ResultSet"和创建它的" Statement"对象(如果完成的话)。我们可以通过调用它们的close()方法来实现,如下所示:
result.close(); statement.close();
当然,我们应该在" finally"块中调用这些方法,以确保即使在" ResultSet"迭代期间发生异常时也可以调用它们。
完整的例子
这是完整的查询代码示例:
Statement statement = connection.createStatement();
String sql = "select * from people";
ResultSet result = statement.executeQuery(sql);
while(result.next()) {
String name = result.getString("name");
long age = result.getLong("age");
System.out.println(name);
System.out.println(age);
}
result.close();
statement.close();
这里的例子再次出现,添加了" try-finally"块。注意,我省略了catch块以简化示例。
Statement statement = null;
try{
statement = connection.createStatement();
ResultSet result = null;
try{
String sql = "select * from people";
ResultSet result = statement.executeQuery(sql);
while(result.next()) {
String name = result.getString("name");
long age = result.getLong("age");
System.out.println(name);
System.out.println(age);
}
} finally {
if(result != null) result.close();
}
} finally {
if(statement != null) statement.close();
}

