JDBC3.0 的excute()

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();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值