2011-04-16 24 views
0

我通过使用驱动程序正在加载并正在建立连接的存根进行验证。我的方法查询数据库正在执行没有错误,但返回一个5列和0行(我通过调试验证)的空结果集。测试数据库中有4条记录,包含5列,我的查询要求返回所有结果。我可能会感到疲倦......对我缺少什么有所了解?这里是查询方法。数据库文件是访问.mdbJAVA:数据库结果集保持返回零行

public ArrayList fillResults() { ArrayList savedData = new ArrayList(); Statement stmt = null; ResultSet results = null;

try 
    { 
     stmt = conn.createStatement(); 
     results = stmt.executeQuery(SELECT_ALL); 
     while(results.next()) 
     { 
      for(short i = 0; i < 5; i++) 
      { 
       savedData.add(results.getString(i)); 
      } 
     } 

    } 
    catch(SQLException ex) 
    { 
     JOptionPane.showMessageDialog(null, ex.getMessage() + ": error during retrieval."); 
    } 
    finally 
    {   
     try 
     { 
      results.close(); 
      stmt.close(); 
     } catch (SQLException e){} 
    } 

    return savedData; 
} 
+0

请仔细检查您使用的是正确的数据库。代码是如何遍历结果集的? – 2011-04-16 22:10:16

+0

而(results.next()) \t \t \t { \t \t \t \t为(短I = 0; I <5;我++) \t \t \t \t { \t \t \t \t \t savedData.add(结果。的getString(I)); \t \t \t \t} \t \t \t} – Sinaesthetic 2011-04-16 22:41:12

+0

第一列具有索引1,而不是0 – 2011-04-16 22:51:04

回答

0

您不应该退回ResultSet。并且持久化类不应该包含Swing JOptionPane

试试这样说:

package persistence; 

import java.sql.Connection; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.util.ArrayList; 
import java.util.List; 

public class JdbcDemo 
{ 
    private static final String SELECT_SAVED_DATA = "select * from saveData"; 

    private Connection connection; 

    public JdbcDemo(Connection connection) 
    { 
     this.connection = connection; 
    } 

    public List<String> getSavedData() throws SQLException 
    { 
     List<String> savedData = new ArrayList<String>(); 

     Statement stmt = null; 
     ResultSet rs = null; 
     try 
     { 
      stmt = this.connection.createStatement(); 
      rs = stmt.executeQuery(SELECT_SAVED_DATA); 
      while (rs.next()) 
      { 
       savedData.add(rs.getString(1)); // modify this as needed 
      } 
     } 
     finally 
     { 
      DatabaseUtils.close(rs); 
      DatabaseUtils.close(stmt); 
     } 

     return savedData; 
    } 
} 
+0

即时通讯仍然得到相同的结果集,返回5列0行。只是为了检查,我修改了查询返回只有2列;然后结果集返回2列0行。 im lost – Sinaesthetic 2011-04-16 22:42:22

+0

如果您可以使用其他客户端登录数据库并查看行,那么它表示您没有连接到您认为自己的数据库。检查您的连接URL,并确保您可以查看另一个客户端的行。检查你的假设 - 当它们与你认为应该得到的不符时,它表示你用错误的假设欺骗自己。 – duffymo 2011-04-17 03:03:39

+0

连接很好。我报废了,并开始了你发布的内容,并发挥了作用。对我来说并不合理。只是出于好奇,我再次尝试将结果集发送回来,但仍然没有奏效。我没有明白。但我现在正在工作,非上班 – Sinaesthetic 2011-04-17 19:45:36