JDBC:查询数据库

时间:2020-01-09 10:36:47  来源:igfitidea点击:

查询数据库意味着搜索其数据。这样做是将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();
}