我一直在尝试使用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)));
}
}
答案 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();