Java-NULL结果集
我有一个从MySQL表中获取数据的函数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; } 当我尝试
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
这是因为关闭数据库连接也会关闭相关的结果集。我已经更新了答案,加入了一个大量借用的方法;基本上,您需要将结果集转换为哈希映射列表。