2016-11-16 102 views
2

我有一個函數從MySQL表爪哇 - 空的ResultSet

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; 
    } 
} 
+0

請添加'executeSearch'方法。 – Berger

+0

更新了'executeSearch'方法。 –

+1

不管「finally」塊是否被執行?不確定,用Java,但從finally塊返回似乎是錯誤的。 –

回答

0

的問題似乎是在你的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; 
} 
+0

我嘗試獲取ResultSet的第一個元素並將其打印出來。這裏是代碼 'if(rs.next()){0} {0} {0}} {0} ;「。不知何故,我得到這個錯誤'在線程中的異常「主要」java.sql.SQLException:在ResultSet關閉後不允許的操作「 –

+0

您的版本工程順便說一句。但它只是返回一行'com.mysql.jdbc.JDBC42ResultSet @ 21b8d17c' –

+0

這是因爲關閉數據庫連接也會關閉相關的ResultSets。我已經更新了我的答案,以包含從http://stackoverflow.com/a/7507225/899126大量借用的方法;從本質上講,你可以將ResultSet轉換爲HashMap的列表。 –