`
xo_tobacoo
  • 浏览: 385683 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

JDBC3.0 的excute()

SQL 
阅读更多

1、 SQL queries 返回 result sets; SQL updates 返回被更新的数据数目. 有时候我们可能不知道执行的SQL将使查询还是更新或者混合两种混合类型!这时候excute出场了。

Statement提供了下面的方法用来处理返回类型的多样化问题。

boolean execute(String sql);
ResultSet getResultSet();
int getUpdateCount();
boolean getMoreResults();
boolean getMoreResults(int current);

2、Excute()方法可以返回的是多个result组成的results集合,result可以是ResultSet ,整数或者两者混合(result相当于一个数组里面存有ResultSet 和整数)。注意到excute()方法的返回式布尔型,如果执行成功返回的是True,如果是失败是False。

第二个方法getResultSet();测试当前的result,如果是集合,那么返回一个ResultSet,如果是Null那么说明当前的结果集是一个整数 ,可以使用第三个方法getUpdateCount();获得更新的数目。

第三和第四个方法用来移动到下一个result.如果下一个result是ResultSet那么返回true,如果null或者证书那么返回的是false.

第四个方法有三个参数,分别意义如下:

  • CLOSE_CURRENT_RESULT: 只要返回下一个result,那么关闭当前的result

  • KEEP_CURRENT_RESULT: 当取下一个result时不关闭当前的result

  • CLOSE_ALL_RESULTS: 关闭前面所有的result当开始下一个时.当(!getMoreResults() && (getUpdateCount() == -1))时已经移动到了集合的最后一个.

  • ...
    Connection myConnection = DriverManager.getConnection(url,
                              "javauser", "hotjava");
    Statement myStatement = myConnection.createStatement();
    ResultSet rs;
    if (myStatement.execute(sqlStatement))
    {
             // we have a ResultSet
             rs = myStatement.getResultSet();
             while (rs.next())
             {
                     // process the rows
             }
    }
    else
    {
             // we have an update count
             System.out.println(myStatement.getUpdateCount());
    }
    myStatement.close();
    myConnection.close();
    ...
    ...

     

  • 处理多种返回类型 

  • ...
    ...
    Connection myConnection = DriverManager.getConnection(url,
        "javauser", "hotjava");
    Statement myStatement = myConnection.createStatement();
    boolean resultSetIsAvailable;
    boolean moreResultsAvailable;
    int i = 0;
    int res=0;
    resultSetIsAvailable = myStatement.execute(sqlText);
    ResultSet rs = null;
    for (moreResultsAvailable = true; moreResultsAvailable; )
    {
             if (resultSetIsAvailable)
             {
                     if ((rs = myStatement.getResultSet()) != null) {
                              // we have a resultset
                              ResultSetMetaData rsmd = rs.getMetaData();
                              int numCols = rsmd.getColumnCount();
                              // display column headers
                              for (i = 1; i <= numCols; i++)
                              {
                                      if (i > 1) System.out.print(", ");
                                      System.out.print(
                                      rsmd.getColumnLabel(i));
                              }
                              System.out.println("");
                              // step through the rows
                              while (rs.next())
                              {
                                      // process the columns
                                      for (i = 1; i <= numCols; i++)
                                      {
                                               if (i > 1)
                                               System.out.print(", ");
                                               System.out.print(rs.getString(i));
                                      }
                                      System.out.println("");
                              }
                     }
             }
             else
             {
                     if ((res = curStmt.getUpdateCount()) != -1)
                     {
                              // we have an updatecount
                              System.out.println(res + " row(s) affected.");
                     }
                     // else no more results
                     else
                     {
                              moreResultsAvailable = false;
                     }
             }
             if (moreResultsAvailable)
             {
                     resultSetIsAvailable = 
                        myStatement.getMoreResults(Statement.CLOSE_ALL_RESULTS);
             }
    }
    if (rs != null) rs.close();
    myStatement.close();
    ...
    ...

     

    3、另外两个常用的方法:
  • Statement的Cancel 方法:

    void cancel();

     

    ...
    java.sql.Statement myStatement =
    myConnection.createStatement();
    ResultSet rs = myStatement.executeQuery("SELECT name, title, salary FROM
    employees");
    int i = 0;
    while (rs.next()) {
             // increment the counter
             i++;
             // print the columns of the row that was retrieved
             String empName = rs.getString("name");
             String empTitle = rs.getString("title");
             long empSalary = rs.getLong("salary");
             System.out.println("Employee " + empName + " is " + empTitle + " 
                              and earns $" + empSalary);
             // cancel all results if 100 rows of data were already
             // retrieved
             if (i >= 100) myStatement.cancel();
    }
    ...
    ...

     

    ResultSet的Close 方法:ResultSet不需要使用了

    void close();
    2
    0
    分享到:
    评论

    相关推荐

    Global site tag (gtag.js) - Google Analytics