Java-NULL结果集

Java-NULL结果集,java,mysql,resultset,Java,Mysql,Resultset,我有一个从MySQL表中获取数据的函数 public ResultSet getAddressID(String city) throws SQLException{ String q = "SELECT PK_ADDRESS_ID FROM tbl_addresses WHERE city =" + "\""+ city+ "\";"; ResultSet rs = executeSearch(q); return rs; } 当我尝试

我有一个从MySQL表中获取数据的函数

public ResultSet getAddressID(String city) throws SQLException{
        String q = "SELECT PK_ADDRESS_ID FROM tbl_addresses WHERE city =" + "\""+ city+ "\";";
        ResultSet rs = executeSearch(q);
        return rs;
    }
当我尝试
System.out.println(n.getAddressID(“谢菲尔德”)
返回
null
。尽管我的表格中有数据,但为什么会发生这种情况(见图)


问题似乎出在executeSearch方法中;
finally
块将始终执行,因此通过在finally块中返回null,您基本上覆盖了在try块中返回的内容

这可能是另一种解决办法;请注意,我将在方法末尾返回,而不是在try-catch-finally块的任何部分中返回

/**
 * Converts a provided ResultSet into a generic List so that the
 * ResultSet can be closed while the data persists.
 * Source: http://stackoverflow.com/a/7507225/899126
 */
public List convertResultSetToList(ResultSet rs) throws SQLException
{
    ResultSetMetaData md = rs.getMetaData();
    int columns = md.getColumnCount();
    List list = new ArrayList(50);

    while (rs.next())
    {
        HashMap row = new HashMap(columns);
        for(int i = 1; i <= columns; ++i)
        {
            row.put(md.getColumnName(i), rs.getObject(i));
        }
        list.add(row);
    }

    return list;
}

public List executeSearch(String q)
{
    List toReturn;
    openConnection();
    try {
        Statement statement = connection.createStatement();
        toReturn = this.convertResultSetToList(statement.executeQuery(q));
    }
    catch (Exception e) {
        JOptionPane.showMessageDialog(null, e.getMessage());
        toReturn = new ArrayList();
    }
    finally {
        closeConnection();
    }

    return toReturn;
}
/**
*将提供的结果集转换为常规列表,以便
*结果集可以在数据持续存在时关闭。
*资料来源:http://stackoverflow.com/a/7507225/899126
*/
公共列表转换器ResultSetToList(ResultSet rs)引发SQLException
{
ResultSetMetaData md=rs.getMetaData();
int columns=md.getColumnCount();
列表=新的ArrayList(50);
while(rs.next())
{
HashMap行=新的HashMap(列);

对于(int i=1;i而言,问题似乎出在executeSearch方法中;
finally
块将始终执行,因此通过在finally块中返回null,您实际上覆盖了在try块中返回的内容

这可能是另一种解决方案;请注意,我将在方法末尾返回,而不是在try-catch-finally块的任何部分中返回

/**
 * Converts a provided ResultSet into a generic List so that the
 * ResultSet can be closed while the data persists.
 * Source: http://stackoverflow.com/a/7507225/899126
 */
public List convertResultSetToList(ResultSet rs) throws SQLException
{
    ResultSetMetaData md = rs.getMetaData();
    int columns = md.getColumnCount();
    List list = new ArrayList(50);

    while (rs.next())
    {
        HashMap row = new HashMap(columns);
        for(int i = 1; i <= columns; ++i)
        {
            row.put(md.getColumnName(i), rs.getObject(i));
        }
        list.add(row);
    }

    return list;
}

public List executeSearch(String q)
{
    List toReturn;
    openConnection();
    try {
        Statement statement = connection.createStatement();
        toReturn = this.convertResultSetToList(statement.executeQuery(q));
    }
    catch (Exception e) {
        JOptionPane.showMessageDialog(null, e.getMessage());
        toReturn = new ArrayList();
    }
    finally {
        closeConnection();
    }

    return toReturn;
}
/**
*将提供的结果集转换为常规列表,以便
*结果集可以在数据持续存在时关闭。
*资料来源:http://stackoverflow.com/a/7507225/899126
*/
公共列表转换器ResultSetToList(ResultSet rs)引发SQLException
{
ResultSetMetaData md=rs.getMetaData();
int columns=md.getColumnCount();
列表=新的ArrayList(50);
while(rs.next())
{
HashMap行=新的HashMap(列);

对于(int i=1;我请添加
executeSearch
方法。更新了
executeSearch
方法。无论发生什么,都不要执行
finally
块?不确定,使用Java,但从finally块返回似乎是错误的。请添加
executeSearch
方法。更新了
executeSearch
方法。不要
finally
块会被执行吗?不确定,用Java,但从finally块返回似乎是错误的。我尝试获取
ResultSet
的第一个元素并将其打印出来。下面是代码
if(rs.next()){I=rs.getInt(1);};
。不知怎的,我在线程“main”中得到了这个错误
异常java.sql.SQLException:ResultSet关闭后不允许操作
您的版本可以正常工作,但它只返回一行
com.mysql.jdbc。JDBC42ResultSet@21b8d17c
这是因为关闭数据库连接也会关闭相关的结果集。我已经更新了答案,加入了一个大量借用的方法;基本上,您需要将结果集转换为哈希映射列表。我尝试获取
ResultSet
的第一个元素并将其打印出来。下面是代码
if(rs.next()){I=rs.getInt(1);};
。不知怎的,我在线程“main”中得到了这个错误
异常java.sql.SQLException:ResultSet关闭后不允许操作
您的版本可以正常工作,但它只返回一行
com.mysql.jdbc。JDBC42ResultSet@21b8d17c
这是因为关闭数据库连接也会关闭相关的结果集。我已经更新了答案,加入了一个大量借用的方法;基本上,您需要将结果集转换为哈希映射列表。