2009-12-21 25 views
0

我試圖用java數據獲取工作,所以這有什麼,我想出了:
告訴我,你怎麼看待這個
(這是從C#一樣的SqlConnection一點點)的Java模擬C#的SqlConnection和數據訪問層(我嘗試)

import java.sql.*; 
public class SqlConnection { 

    Connection connection; 

    public Connection GetConnection() {return connection;} 

    public void Connect(String cs, String user, String pass) 
    { 
     try { 
       Class.forName("net.sourceforge.jtds.jdbc.Driver");  
       connection = DriverManager.getConnection(cs, user, pass); 
       System.out.println("connected"); 

       } catch (Exception e) {   
       e.printStackTrace(); 
      } 
    } 

    public void Disconnect() 
    { 
     if(connection != null){ 
      try { 
       connection.close(); 
      } catch (SQLException e){ 
       e.printStackTrace(); 
      } 
      connection = null; 
     } 
    } 
} 

我想我會使用這樣的

public class MyDAL { 
public Foo[] GetFoos() 
{ 
SqlConnection conn = new SqlConnection(); 
PreparedStatement comm = null; 
ResultSet rs = null; 
     try { 
      conn.Connect(cs, user, pass);   
      comm = conn.GetConnection() 
      .prepareStatement("SELECT * FROM foos"); 
      rs = comm.executeQuery();   
      while (rs.next()) {      
        String s = rs.getString("name"); 
        ... 
        }   
      } catch (Exception e) {   
      e.printStackTrace(); 
      } 
      finally 
      { 
           DBUtil.Close(rs); 
           DBUtil.Close(comm); 
        conn.Disconnect(); 
      } 
} 
+0

目前尚不清楚你的問題是什麼。這是否是一個好方法?這是非常主觀的,但至少在每次需要連接時都不需要調用'Class.forName'(一次就足夠了),並且它似乎吃掉了使用它的異常。代碼是否正確?不,它甚至不會編譯。你能清理一些東西並澄清你所問的嗎? – 2009-12-21 11:03:03

+0

我可以在哪裏放置Class.forName,因此每次都不需要調用eat(我將創建此SqlConnection的許多實例) – Omu 2009-12-21 11:22:29

回答

1

如果你想學習Java JDBC,這是好的。我不會使用大寫的方法名稱(通常是C#,而不是java),並使用記錄器(大多數是log4j,但選擇最喜歡的風格)而不是stdout和stderr。

捕捉異常是非常糟糕的做法;最好先抓住所有特定的例外,這樣你才能做出明智的錯誤信息。如果你真的認爲你可以讓你的軟件正常工作,那麼你可以隨時捕獲異常。

在這種特殊情況下,我會捕獲Connect中的特定異常並拋出我的主構建CannotConnectException(originalException)。這種異常並不罕見,但也不是正常的流程,典型的是檢查異常。

如果你想做一些可擴展的事情,至少應該使用Apache DBCP,一個數據庫連接池代替。

如果您想了解大多數與Java數據庫相關的應用程序中使用的東西,請參閱Hibernate或EJB3(也由Hibernate完成)。你真的不再在野外看到太多的原始JDBC應用程序。

+0

我的應用程序需要僅執行4個將從數據庫中返回的存儲過程有3列數據的行,但它需要快速執行 – Omu 2009-12-21 11:38:22

+0

速度有多快?我認爲速度更依賴於你的SQL服務器而不是調用它的java代碼。存儲過程的效率和它使用的表的索引通常更重要。你顯示的代碼並不慢,但休眠或其他任何東西都不是。 – extraneon 2009-12-21 14:06:58

+0

嗯,是的,但爲什麼我應該打擾設置休眠或其他任何事情,如果我需要的是執行4個程序,每個返回1或3個字符串 – Omu 2009-12-21 14:43:56