1

我正在使用 BlueJ 执行一些任务是 Java。我不明白为什么我无法从我的 MS Access 数据库中获取任何记录。任何帮助将不胜感激

import java.sql.*;

public class Database
{
    private Statement s;

    /**
     * Constructor for objects of class database
     */
    public database()
    {
        try{
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        }catch(ClassNotFoundException exp){
            System.err.println(exp);
        }    
        try{
            Connection con = DriverManager.getConnection("jdbc:odbc:POS", "", "");
            this.s = con.createStatement();
        }catch(SQLException e){
            e.printStackTrace();
        }       
    }

    public void test(){
       try{
           this.s.executeQuery("SELECT * FROM product");
           ResultSet rset = s.getResultSet();
           System.out.println(rset.getString("title"));
       }catch(SQLException e){
           e.printStackTrace();
       }
    }
}

这是我在运行 test() 函数时得到的输出

java.sql.SQLException: [Microsoft][ODBC Driver Manager] sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6956) 处 sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7113) 处的游标状态无效) 在 sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3906) 在 sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:5697) 在 sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java: 353) 在 sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:410) 在 database.test(database.java:35) 在 _ SHELL9.run(_SHELL9.java:8) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java .lang.reflect.Method.invoke(Method.java:601) 在 bluej.runtime.ExecServer$3.run(ExecServer.java:725)

我已经设置了 ODBC 驱动程序并且我的数据库名称是正确的。它不受密码保护。

先感谢您

4

2 回答 2

2

您需要通过ResultSetwith next()移动光标

ResultSet rset = s.executeQuery("SELECT * FROM product");
if (rset.next()) {
   System.out.println(rset.getString("title"));
}
于 2012-11-17T19:34:25.457 回答
1

AResultSet是一个集合,所以你必须iterate超过它:

ResultSet rset = s.executeQuery("SELECT * FROM product");
while(rset.next()){
    System.out.println(rset.getString("title"));
}

PS不要忘记关闭ResultSetandStatement当你完成它们。

于 2012-11-17T19:34:28.480 回答