Java返回字符串对象

时间:2012-03-07 12:24:01

标签: java database

我有一个数据库函数,它检索数据然后填充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) {
        }
    }
}

2 个答案:

答案 0 :(得分:3)

我认为这种方法不是一个好主意,原因如下:

  1. 一种方法应该做好一件事。你有UI,连接获取和查询这一方法的所有混合。我会开始分手了。持久层不应该知道或关心你使用的是Swing。
  2. 关闭finally块中各个try / catch块中的资源。如果抛出异常,你仍然希望其他人关闭。
  3. 一个空的挡块是一个可怕的想法。打印或记录堆栈跟踪。
  4. 在此方法之外创建Connection并将其传入。
  5. ResultSetStatement不应该是该类的成员变量。使它们成为方法的本地化。
  6. 只需更改方法即可返回您想要的内容,而不是void。我不会使用Object [][];我更喜欢地图列表或封装行的其他类型。使用列名作为Map中的键。

答案 1 :(得分:0)

这是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);
   }