【问题标题】:GetMetaData()->the state of the cursor is not correctGetMetaData()->游标状态不正确
【发布时间】:2017-04-05 11:38:47
【问题描述】:

我一直在尝试将 Ucanacces 与 getMetaData() 一起使用,但我遇到了一些问题,当我尝试显示信息时出现此错误:

Error de SQLException:net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::4.0.1 estado del cursor wrongo: cursor indicado no está posicionado en una fila para sentencia UPDATE, DELETE, SET, o GET: ; Posición actual del resultado de la Consulta es antes del prime registro

英文的意思是

UCAExc:::4.0.1 游标状态不正确:cursor 指示未定位在行中 UPDATE、DELETE、SET 或 GET 陈述。:;查询结果的当前位置在 首次注册

(对不起,我自己翻译了)。

所以我认为错误可能是在我尝试打印数据时尝试访问数据:

        Connection connection=DriverManager.getConnection(url);
        Statement statement=connection.createStatement();
        String sql= "SELECT * FROM BARCO";
        ResultSet result=statement.executeQuery(sql);
        ResultSetMetaData rmeta=result.getMetaData();
        int numColums=rmeta.getColumnCount();
        for(int i=1;i<=numColums;++i){
            if (i>numColums){
                System.out.print(result.getString(rmeta.getColumnName(i))+"|");;
            }else {
                System.out.println(result.getString(rmeta.getColumnName(i)));
            }
        }
        while(result.next()){
            for(int i=1;i<=numColums;++i){
                if(i<numColums){
                    System.out.print(result.getString(rmeta.getColumnName(i))+"|");
                }else{
                    System.out.println(result.getString(rmeta.getColumnName(i)));
                }
            }

【问题讨论】:

    标签: java position cursor ucanaccess


    【解决方案1】:

    您的问题出在这部分代码中:

    for(int i=1;i<=numColums;++i){
            if (i>numColums){
                System.out.print(result.getString(rmeta.getColumnName(i))+"|");;
            }else {
                System.out.println(result.getString(rmeta.getColumnName(i)));
            }
        }
    

    当光标没有移动到实际行时,您正试图从ResultSet 读取,它的初始位置是-1。您可以通过调用next() 方法来遍历ResultSet(就像您在第二个for 循环 中所做的那样)。方法next() 将光标向前移动一行(如果有行)并返回true。当它到达ResultSet 的末尾时,它返回false。您可以使用其他方法(即relative(int rows) 等)定位光标。更多详细信息请参阅documentation

    如果要在第一行打印列名,则将上面的代码替换为:

    for(int i=1;i<=numColums;i++){
       System.out.print(rmeta.getColumnName(i)+"\t");
    }
    System.out.println();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      相关资源
      最近更新 更多