【问题标题】:JAVA: Database resultset keep returning zero rowsJAVA:数据库结果集不断返回零行
【发布时间】:2011-08-07 02:05:09
【问题描述】:

我通过使用存根验证驱动程序正在加载并且正在建立连接。我的查询数据库的方法执行没有错误,但返回一个 5 列和 0 行的空结果集(我通过调试验证)。测试数据库中有 5 列的 4 条记录,我的查询要求返回所有结果。我可能只是累了……对我缺少什么有任何见解吗?这是查询方法。数据库文件是访问.mdb

public ArrayList fillResults() { ArrayList savedData = new ArrayList(); 语句 stmt = null; ResultSet 结果 = 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;
}

【问题讨论】:

  • 请仔细检查您使用的数据库是否正确。遍历结果集的代码看起来如何?
  • while(results.next()) { for(short i = 0; i
  • 第一列的索引为 1,而不是 0
  • 我试过 getString(i) 和 getString(i + 1)。它不会改变结果集有 0 行的事实。

标签: java database


【解决方案1】:

您不应该返回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;
    }
}

【讨论】:

  • 我仍然得到相同的结果集,返回 5 列 0 行。只是为了检查,我修改了查询以仅返回 2 列;然后结果集返回 2 列 0 行。我迷路了
  • 如果您可以使用另一个客户端登录数据库并查看行,那么它表示您没有连接到您认为的数据库。检查您的连接 URL,并确保您可以看到其他客户端的行。检查您的假设 - 当它们与您认为应该得到的不匹配时,它表示您在用错误的假设自欺欺人。
  • 连接很好。我报废并重新开始您发布的内容并且它有效。对我来说不太有意义。出于好奇,我再次尝试在返回时返回结果集,但这仍然无效。我不明白。但我现在可以工作了,非列表
猜你喜欢
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多