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();
我一直在尝试将 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();