尽管TYPE_SCROLL_SENSITIVE,JAVA ODBC滚动错误

时间:2013-09-10 22:40:13

标签: java sql jdbc odbc

我有一个涉及ODBC数据库查询的JAVA项目,我需要在结果集中移动光标。我已将ResultSet的类型声明为TYPE_SCROLL_SENSITIVE,但是当我执行脚本时,我得到一个异常,指出ResultSet类型为TYPE_FORWARD_ONLY。我在下面粘贴了我的(简化)项目代码,并希望得到任何帮助。

import java.util.InputMismatchException;  //Necessary package for basic Java utilities
import java.sql.*;                        //Necessary packages for SQL routines

public class test {

  public static void main(java.lang.String[] args) throws Exception {

    // declare variables & create database connection
    System.out.println("Open ODBC Connection....");
    Connection dataConnection = DriverManager.getConnection("jdbc:odbc:DSN");
    Statement  stmt           = dataConnection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);      
    int        i              = 0;
    int        N              = 0;

    //loading JDBC-ODBC Bridge driver into memory
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

    // create SQL query string
    String sql = "SELECT ObjRef, IDX, DateListDateAsString FROM ARRAY_BAC_CAL_DateList WHERE DEV_ID=10000 AND INSTANCE=1";

    // run the query
    ResultSet rs = stmt.executeQuery(sql);

    // determine number of date entries
    rs.last();
    N = rs.getInt("IDX");

    // close connection
    rs.close();
    dataConnection.close();
    System.out.println ("Connection closed\n");    


  }
}

我收到的错误是:

  

“线程中的异常”main“java.sql.SQLException:结果集类型是   TYPE_FORWARD_ONLY at   sun.jdbc.odbc.JdbcOdbcResultSet.last(JdbcOdbcResultSet.java:2290)at   test.main(test.java:26)

第26行是我尝试移动结果集光标的地方。

再次,任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

变化:

ResultSet.TYPE_SCROLL_SENSITIVE

为:

ResultSet.TYPE_SCROLL_INSENSITIVE

答案 1 :(得分:0)

您必须使用ResultSet.getWarnings()检查结果类型是否已从驱动程序降级:迭代所有SQLWarning以检查 JDBC-ODBC Bridge驱动程序是否已更改某些设置

答案 2 :(得分:0)

考虑到您的上述评论,我建议您采用以下两种方式之一:

  • SQL(简短方法):修改您的选择查询并按desc排序,在java代码中获取第一条记录,就是这样!

    或者

  • Java(很长的路):

    1. 使用Fire查询获取表中的结果数并获取java变量中的计数值或者您可以从ResultSetMetaData获取行数。
    2. 其次,就像现在你有行计数一样,逐行遍历ResultSet并在计数位置获取行(你想要的行)。