JDBC:查询数据库

JDBC:查询数据库

查询数据库意味着搜索其数据。这样做是在向数据库发送SQL语句。为此,您首先需要一个开放的数据库连接。打开连接后,您需要创建一个Statement对象,如下所示:

Statement statement = connection.createStatement();

一旦创建了语句,就可以使用它来执行SQL查询,如下所示:

String sql = "select * from test";

ResultSet result = statement.executeQuery(sql);

当您执行SQL查询时,您将返回一个ResultSetResultSet包含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:更新数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值