JDBC:查询数据库
查询数据库意味着搜索其数据。这样做是在向数据库发送SQL语句。为此,您首先需要一个开放的数据库连接。打开连接后,您需要创建一个Statement
对象,如下所示:
Statement statement = connection.createStatement();
一旦创建了语句,就可以使用它来执行SQL查询,如下所示:
String sql = "select * from test";
ResultSet result = statement.executeQuery(sql);
当您执行SQL查询时,您将返回一个ResultSet
。ResultSet
包含SQL查询的结果。结果以带有数据列的行形式返回。迭代ResultSet
的行如下:
while (result.next()) {
String aac002 = result.getString("aac002");
String aac003 = result.getString("aac003");
}
如果ResultSet
中还有行,那么方法会移动到ResultSet
中的下一行。如果有更多的行,则返回true
。如果没有更多的行,它将返回false
。
在读取任何数据之前,您需要至少调用next()
一次。在第一个next()
调用之前,ResultSet
位于第一行之前。
您可以通过调用一些getXXX()
方法来获取当前行的列数据,其中XXX
是基元数据类型。例如:
result.getString ("sex");
result.getLong ("name");
result.getInt ("age");
result.getDouble ("address");
result.getBigDecimal("columnName");
...
要获取的值的列名作为参数传递给这些getXXX()
方法调用中的任何一个。
您也可以传递列的索引,如下所示:
result.getString (1);
result.getLong (2);
result.getInt (3);
result.getDouble (4);
result.getBigDecimal(5);
...
要做到这一点,您需要知道ResultSet
中给定列的索引。您可以通过调用ResultSet.findColumn()
方法来获取给定列的索引,如下所示:
int columnIndex = result.findColumn("columnName");
如果迭代大量的行,则按列的索引引用列可能比按列的名称引用列更快。
迭代完ResultSet
后,您需要关闭ResultSet
和创建它的Statement
对象(如果您已经完成了)。您可以通过调用它们的close()
方法来实现,如下所示:
result.close();
statement.close();
当然,您应该在finally
块中调用这些mehtod
,以确保即使在ResultSet
迭代期间发生异常,也能调用它们。
完整示例
下面是一个完整的查询代码示例:
Statement statement = connection.createStatement();
String sql = "select * from test";
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 test";
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();
}
下一篇:JDBC:更新数据库