GetMetaData() - >光标状态不正确

时间:2017-04-05 11:38:47

标签: java position cursor ucanaccess

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

  

错误de SQLException:net.ucanaccess.jdbc.UcanaccessSQLException:UCAExc ::: 4.0.1 estado del cursor incorrecto:cursor indicadonoestápositicadoen una fila para sentencia UPDATE,DELETE,SET,o GET :; Posiciónrealdel resultado de la consulta es antes del primer registro

英文意思是

  

UCAExc ::: 4.0.1游标的状态不正确:游标   指示的位置不是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)));
                }
            }

1 个答案:

答案 0 :(得分:3)

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

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。您可以通过调用ResultSet方法迭代next()(正如您在第二个 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();