GetMetaData()->游标的状态不正确

GetMetaData()->the state of the cursor is not correct

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

Error de SQLException:net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::4.0.1 estado del cursor incorrecto: 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 primer registro

英文意思是

UCAExc:::4.0.1 the state of the cursor is not correct: cursor indicated is not positioned in a row UPDATE, DELETE, SET, or GET statement.:; Current position of the result of the query is before the first registration

(抱歉翻译了我自己)。

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

        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)));
                }
            }

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

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() 将光标向前移动一行(如果有行)和 returns true。当它到达 ResultSet 的末尾时,它 returns false。您可以使用其他方法(即 relative(int rows) 等)定位光标。有关详细信息,请参阅 documentation.

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

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