文档

Java™教程
隐藏目录
使用JDBC处理SQL语句
路径: JDBC数据库访问
课程: JDBC基础

使用JDBC处理SQL语句

通常,使用JDBC处理任何SQL语句,您需要按照以下步骤进行:

  1. 建立连接。
  2. 创建语句。
  3. 执行查询。
  4. 处理ResultSet对象。
  5. 关闭连接。

本页使用教程示例中的方法CoffeesTable.viewTable来演示这些步骤。该方法输出表COFFEES的内容。稍后在本教程中将对该方法进行更详细的讨论:

  public static void viewTable(Connection con) throws SQLException {
    String query = "select COF_NAME, SUP_ID, PRICE, SALES, TOTAL from COFFEES";
    try (Statement stmt = con.createStatement()) {
      ResultSet rs = stmt.executeQuery(query);
      while (rs.next()) {
        String coffeeName = rs.getString("COF_NAME");
        int supplierID = rs.getInt("SUP_ID");
        float price = rs.getFloat("PRICE");
        int sales = rs.getInt("SALES");
        int total = rs.getInt("TOTAL");
        System.out.println(coffeeName + ", " + supplierID + ", " + price +
                           ", " + sales + ", " + total);
      }
    } catch (SQLException e) {
      JDBCTutorialUtilities.printSQLException(e);
    }
  }

建立连接

首先,与您要使用的数据源建立连接。数据源可以是数据库管理系统(DBMS)、传统文件系统或其他带有相应JDBC驱动程序的数据源。此连接由Connection对象表示。有关更多信息,请参见建立连接

创建语句

Statement是表示SQL语句的接口。您可以执行Statement对象,它们会生成ResultSet对象,这是表示数据库结果集的数据表。要创建Statement对象,您需要一个Connection对象。

例如,CoffeesTable.viewTable使用以下代码创建Statement对象:

stmt = con.createStatement();

有三种不同类型的语句:

执行查询

要执行查询,请从Statement调用一个execute方法,如下所示:

例如,CoffeesTable.viewTable使用以下代码执行了一个Statement对象:

ResultSet rs = stmt.executeQuery(query);

有关更多信息,请参阅从结果集中检索和修改值

处理ResultSet对象

您可以通过光标访问ResultSet对象中的数据。请注意,这个光标不是数据库光标。这个光标是一个指向ResultSet对象中一行数据的指针。初始时,光标位于第一行之前。您可以调用ResultSet对象中定义的各种方法来移动光标。

例如,CoffeesTable.viewTable重复调用ResultSet.next方法将光标向前移动一行。每次调用next方法时,该方法输出光标当前所在行的数据:

      ResultSet rs = stmt.executeQuery(query);
      while (rs.next()) {
        String coffeeName = rs.getString("COF_NAME");
        int supplierID = rs.getInt("SUP_ID");
        float price = rs.getFloat("PRICE");
        int sales = rs.getInt("SALES");
        int total = rs.getInt("TOTAL");
        System.out.println(coffeeName + ", " + supplierID + ", " + price +
                           ", " + sales + ", " + total);
      }
      // ...

有关更多信息,请参阅从结果集中检索和修改值

关闭连接

当您使用完ConnectionStatementResultSet对象后,请调用其close方法立即释放其正在使用的资源。

或者,可以使用try-with-resources语句自动关闭ConnectionStatementResultSet对象,无论是否抛出SQLException。(当JDBC在与数据源交互期间遇到错误时,会抛出SQLException。有关更多信息,请参阅处理SQL异常。)自动资源语句由一个try语句和一个或多个声明的资源组成。例如,CoffeesTable.viewTable方法会自动关闭其Statement对象,如下所示:

  public static void viewTable(Connection con) throws SQLException {
    String query = "select COF_NAME, SUP_ID, PRICE, SALES, TOTAL from COFFEES";
    try (Statement stmt = con.createStatement()) {
      ResultSet rs = stmt.executeQuery(query);
      while (rs.next()) {
        String coffeeName = rs.getString("COF_NAME");
        int supplierID = rs.getInt("SUP_ID");
        float price = rs.getFloat("PRICE");
        int sales = rs.getInt("SALES");
        int total = rs.getInt("TOTAL");
        System.out.println(coffeeName + ", " + supplierID + ", " + price +
                           ", " + sales + ", " + total);
      }
    } catch (SQLException e) {
      JDBCTutorialUtilities.printSQLException(e);
    }
  }

下面的语句是一个try-with-resources语句,它声明了一个资源stmt,当try块终止时,该资源将自动关闭:

    try (Statement stmt = con.createStatement()) {
      // ...
    }

更多信息请参见Essential Classes教程中的The try-with-resources Statement


上一页:开始
下一页:建立连接