Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql MS Access[Microsoft][ODBC驱动程序管理器]无效的光标状态_Sql_Ms Access - Fatal编程技术网

Sql MS Access[Microsoft][ODBC驱动程序管理器]无效的光标状态

Sql MS Access[Microsoft][ODBC驱动程序管理器]无效的光标状态,sql,ms-access,Sql,Ms Access,我在这个代码片段中遇到了错误: private String[][] connectToDB(String query) throws ClassNotFoundException{ String[][] results = null; try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String db = "jdbc:odbc:Dri

我在这个代码片段中遇到了错误:

   private String[][] connectToDB(String query) throws ClassNotFoundException{
        String[][] results = null;
        try {

                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                String db = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=E:/EACA_AgroVentures1.accdb";
                conn = DriverManager.getConnection(db);
                stmt = conn.prepareStatement(query);

                ResultSet rs = stmt.executeQuery();
                ResultSetMetaData rsm = rs.getMetaData();
                rs.beforeFirst();
                int columns = rsm.getColumnCount();
                int rows = getRowCount(rs);
                //int rows = rs.getFetchSize();

                int rowCount = 0;
                results = new String[rows][columns];
                //System.out.println(rows+" "+columns);
                while((rs!=null) && (rs.next())){                    
                     for(int i = 1; i < columns; i++){
                        results[rowCount][i-1] = rs.getString(i); // --> ERROR SHOWS HERE
                        //System.out.println(rowCount+","+i+" = "+rs.getString(i));
                     }
                     rowCount++;
                }
                rs.getStatement().close();
                conn.close();

        } catch (SQLException ex) {
            Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
        }

        return results;
    }
我尝试将第一个代码与另一个方法中给出的其他查询一起使用:

private void loadDealers(){
        try {
            String query = "SELECT * FROM Dealers";            
            Object[][] result = connectToDBWithRows(

query);
// some more code..
它运行得非常好。这是怎么回事?我如何解决这个问题

更新:connectToDBWithRows和connectToDB的唯一区别是管理
resultSet

// Snippet from connectToDBWithRows()
while((rs!=null) && (rs.next())){

                    for(int i = 0; i < columns; i++){
                        if (i == 0){
                           // Do nothing
                        }else{
                           results[rowCount][i] = rs.getString(i);
                           //System.out.println(rowCount+","+i+" = "+rs.getString(i)); 
                        }
                    }
                    rowCount++;
                }

我注意到,有时Access在引用sql语句中的列时需要指定表名。请尝试以下操作:

private void loadMR(){
      try {
            String query = "SELECT dealerCode, SUM(kg) AS totalKG, SUM(price) AS totalPrice, returnDate, BID FROM meatReturns GROUP BY BID, dealerCode, returnDate;";            
                Object[][] result = connectToDB(query);

// some more code below..
private void loadMR(){
      try {
            String query = "SELECT meatReturns.dealerCode, SUM(meatReturns.kg) AS totalKG, SUM(meatReturns.price) AS totalPrice, meatReturns.returnDate, meatReturns.BID FROM meatReturns GROUP BY meatReturns.BID, meatReturns.dealerCode, meatReturns.returnDate";
                Object[][] result = connectToDBWithRows(query);

我尝试了此解决方案,但问题仍然存在:(我把代码改成了
connectToDBWithRows
而不是
connectToDB
。这样行吗?哦
connectToDBWithRows
connectToDB
几乎一样,我会更新我的帖子。这是我做的一个方法。它使用
resultSet
返回行数,我会更新我的帖子。
private void loadMR(){
      try {
            String query = "SELECT meatReturns.dealerCode, SUM(meatReturns.kg) AS totalKG, SUM(meatReturns.price) AS totalPrice, meatReturns.returnDate, meatReturns.BID FROM meatReturns GROUP BY meatReturns.BID, meatReturns.dealerCode, meatReturns.returnDate";
                Object[][] result = connectToDBWithRows(query);