簡體   English   中英

Java返回字符串對象

[英]Java return string object

我有一個數據庫函數,該函數檢索數據,然后填充一個jtable。 我需要更改此函數,以便它從Object[][]的數據庫中返回數據。 如何才能做到這一點? (我不確定如何在每次行迭代中存儲數據-以下代碼中的while循環部分)。

public void data() {
    // clear table then load information 
    DefaultTableModel model=(DefaultTableModel)table.getModel();  
         model.getDataVector().removeAllElements();
  table.repaint(); 
  ResultSet rs=null;
  Statement st=null;

    try { 
        Class.forName("java.sql.Driver"); 
        _con = DriverManager.getConnection(_url,_user,_pwd);
        st = _con.createStatement(); 
        String query = "SELECT * FROM table";

        rs = st.executeQuery(query); 

        while (rs.next()) { 
            String d1 = rs.getString("record1"); 
            String d2 = rs.getString("record2");
            model.addRow(new Object[]{d1,d2}); 
        }        
    } catch (Exception e) { 
    } finally {
        try {
            if (rs != null) {
                rs.close();
            }
            if (st != null) {
                st.close();
            }
            if (_con != null) {
                _con.close();
            }
        } catch (SQLException ex) {
        }
    }
}

我認為此方法不是一個好主意,原因有幾個:

  1. 一種方法應該做的很好。 您已經用這種方法將UI,連接獲取和查詢混合在一起。 我將開始分解它們。 持久層不應該知道或關心您正在使用Swing。
  2. 在finally塊的單獨try / catch塊中關閉這些資源。 如果有人拋出異常,您仍然希望其他人關閉。
  3. 空的捕獲塊是一個可怕的想法。 打印或記錄堆棧跟蹤。
  4. 在此方法之外創建Connection並將其傳入。
  5. ResultSetStatement不應是該類的成員變量。 使它們在方法本地。

只需更改方法以返回所需內容即可,而不是void 我不會使用Object [][] 我更喜歡地圖列表或封裝行的其他類型。 使用列名稱作為Map中的鍵。

這是OP要求的一些代碼,是的,OP應該注意duffymo的建議-我完全同意。

  Object[] result = null;

  try{ 

   Class.forName("java.sql.Driver"); 
   _con = DriverManager.getConnection(_url,_user,_pwd);
   st=_con.createStatement(); 

   String query="SELECT COUNT(*) cnt FROM table";
   rs=st.executeQuery(query); 
   Integer size = null;
   if (rs.next()){
       size = rs.getInteger("cnt");
   }

   if (size != null){
     Object[] result = new Object[size];
     query="SELECT * FROM table";    
     rs=st.executeQuery(query); 
     int i = 0;
     while(rs.next())
     { 
         String d1=rs.getString("record1"); 
         String d2=rs.getString("record2");
         result[i++] = new Object[]{d1,d2}; 
     }        
   }
   } 
   catch(Exception e)  
   { 
      //TODO handle exceptions, e.g. rethrow 
      //throw new RuntimeException(e);
   }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM