代码之家  ›  专栏  ›  技术社区  ›  Tri Nguyen

Java-空结果集

  •  1
  • Tri Nguyen  · 技术社区  · 8 年前

    我有一个从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("Sheffield")); 它返回 null .为什么会发生这种情况,即使我的表中有数据(见图)。

    enter image description here

    public ResultSet executeSearch(String q){
        openConnection();
        try{
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery(q);
            closeConnection();
            return resultSet;
        }
        catch (Exception e){
            JOptionPane.showMessageDialog(null, e.getMessage());
        }
        finally {
            closeConnection();
            return null;
        }
    }
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   Chris Forrence Shreya Gupta    8 年前

    问题似乎在您的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;
    }