2015-04-18 78 views
1

我正在做我的軟件工程論文,並構建一個使用SQL DB的小應用程序,在這裏是MySQL。我也在使用應用程序控制器模式。所以我從db中檢索數據的代碼是;連接Java到MySQL

public static void main(String[] args) 

    { 
     try 
     { 
     String url = "jdbc:mysql://localhost:3306/tm470_returns_stock_management_system"; 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     Connection con = DriverManager.getConnection(url,"root","root"); 

     Statement st = con.createStatement(); 


     ResultSet res = st.executeQuery("SELECT * FROM test_table"); 
     while (res.next()) 
     { 
     int id = res.getInt("test_id"); 
     String msg = res.getString("test_info"); 
     System.out.println(id + "\t" + msg); 
     } 

     con.close(); 
     } 
     catch(Exception e) 
     { 
     System.out.println("DB connection unsuccesful"); 
     } 
} 

我現在想把這個從我的主類/字符串轉移到我的應用程序控制器類(它被稱爲Facility)中。

現在我的問題是,對於我的Facility Class中需要訪問數據庫的每種方法,我是否每次都必須執行完整的代碼?或者我可以在Facility類中創建一個方法,每個應用程序方法只要需要訪問數據庫就可以調用它。如果我能將所有這些都凝結成一種方法,你能告訴我怎麼去解決嗎?

溫柔與我的傢伙,我是一個學習者:)

+0

是的,你可以.. :)有關將如何像ConnectionUtil這樣的工具類,並使用靜態方法來訪問連接。 –

+0

絕妙的主意! – Khal

+0

添加了稱爲ConnectionUtil的單例類,只需要一個就可以調用getConnection().. –

回答

1

如何添加一個像ConnectionUtil這樣的工具類並使用靜態方法來訪問連接。

import java.sql.Connection; import java.sql.DriverManager;

public class ConnectionUtil{ 
static final String url = "jdbc:mysql://localhost:3306/"; 
static final String dbName = "test"; 
static final String driver = "com.mysql.jdbc.Driver"; 
static final String userName = "userparatest"; 
static final String password = "userparatest"; 
Connection con = null; 
    static Connection getConnection() throws Exception { 
if(con == null) 
{  Class.forName(driver).newInstance(); 
     con = DriverManager.getConnection(url + dbName, userName,password);  
    } 
return con; 
} 

} 

這可以進一步提高,但只是提供一個開始..

每當你想要的一份聲明中只是調用下面..

Statement st = ConnectionUtil.getConnection().createStatement(); 
+0

@Khal剛剛編輯以使字段(url,dbname,..)靜態final..Java表示非靜態字段無法訪問從靜態方法 –

+0

謝謝。爲了確定,我的應用程序控制器必須創建這個類的一個實例? – Khal

+0

不,這是我們正在避免的,因爲它不需要..你只需要一個連接,只要你想,只需調用_ConnectionUtil.getConnection()_ –

0

是的,你可以寫訪問數據庫的方法,你可以在所有的應用中重複使用。

在方法中保留以下內容並重用它。

String url = "jdbc:mysql://localhost:3306/tm470_returns_stock_management_system"; 
    Class.forName("com.mysql.jdbc.Driver").newInstance(); 
    Connection con = DriverManager.getConnection(url,"root","root"); 

    Statement st = con.createStatement(); 

    int productID = 6; 
    String skuCode = "ABC123"; 

    ResultSet res = st.executeQuery("SELECT * FROM test_table"); 
    while (res.next()) 
    { 
    int id = res.getInt("test_id"); 
    String msg = res.getString("test_info"); 
    System.out.println(id + "\t" + msg); 
    } 
0

我將它映射爲一個自己的類,它是由您的應用程序使用其他類。當你將它定義爲一個單例時,你只需要在你的完整應用程序中使用一個實例