2014-06-28 23 views
-1

我是新來Java獲取價值獲取和使用方法設置單獨的類

我有使用Enum連接到不同的數據庫,下面的程序調用不同的數據庫連接。

我需要把憑據,用戶名和密碼本身放在一個類中,但我不確定,因爲它們都是使用get和set進行初始化的,唯一能讓我工作的方式就是將它們同時調用方法。

首先我有這個類來初始化連接字符串和數據元素。

class DatabaseUtility { 

    private String USERNAME; 
    private String PASSWORD; 
    private String HSQLDB; 
    private String MYSQL; 

    public DatabaseUtility() { 
     USERNAME = null; 
     PASSWORD = null; 
     HSQLDB = null; 
     MYSQL = null; 
    } 

    public String getUsername() { 
     return USERNAME; 
    } 

    public void setUsername(String username) { 
     USERNAME = username; 
    } 

    public String getPassword() { 
     return PASSWORD; 
    } 

    public void setPassword(String password) { 
     PASSWORD = password; 
    } 

    public String getHsdbConn() { 
     return HSQLDB; 
    } 

    public void setHsdb(String hsdbConnection) { 
     HSQLDB = hsdbConnection; 
    } 

    public String getMySqlConn() { 
     return MYSQL; 
    } 

    public void setMySqlConn(String mySqlConnection) { 
     MYSQL = mySqlConnection; 
    } 
} 

接着我有一個enum使用調用二者分貝類型:

public enum DBType { 

    HSQLDB, MYSQL 
} 

接着我有使用switch語句基於main method用戶偏好不同的數據庫連接到分配的方法。這是我的文章的焦點,我必須在這裏調用get和set方法,我寧願不用相同的方法設置憑據,但不知道如何區分兩者。

import java.sql.*; 

class DatabaseConnectivity { 

    DatabaseUtility dbUtil = new DatabaseUtility(); 

    public Connection getConnection(DBType dbType) throws SQLException { 

     dbUtil.setHsdb("jdbc:hsqldb:data/explorecalifornia"); 
     dbUtil.setMySqlConn("jdbc:mysql://jsa/explorecalifornia"); 
     dbUtil.setUsername("dbuser"); 
     dbUtil.setPassword("dbpassword"); 

     switch (dbType) { 
     case MYSQL: 
      return DriverManager.getConnection(dbUtil.getMySqlConn(), 
        dbUtil.getUsername(), dbUtil.getPassword()); 
     case HSQLDB: 
      return DriverManager.getConnection(dbUtil.getHsdbConn(), 
        dbUtil.getUsername(), dbUtil.getPassword()); 
     default: 
      return null; 
     } 
    } 
} 

最後,這裏是主類,注意堪稱try catch block的DBTYPE枚舉。

import java.sql.Connection; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 

public class MultiDatabaseConnectionMain { 

    public static void main(String[] args) throws SQLException { 

     DatabaseConnectivity databaseConnectivity = new DatabaseConnectivity(); 

     Connection connection = null; 
     Statement statement = null; 
     ResultSet resultset = null; 

     try { 

      connection = databaseConnectivity.getConnection(DBType.MYSQL); 

      System.out.println("Connected"); 
      System.out.println(); 

      statement = connection.createStatement(
        ResultSet.TYPE_SCROLL_INSENSITIVE, 
        ResultSet.CONCUR_READ_ONLY); 
      resultset = statement.executeQuery("SELECT * FROM states"); 

      resultset.last(); 
      System.out.println("Number of rows: " + resultset.getRow()); 

     } catch (SQLException e) { 

      System.err.println(e); 
     } finally { 
      if (resultset != null) { 
       resultset.close(); 
      } 

      if (statement != null) { 
       statement.close(); 
      } 

      if (connection != null) { 
       connection.close(); 
      } 
     } 
    } 

} 
+0

所以......有什麼問題嗎? – Mureinik

+2

您可能想要堅持常規的Java命名約定,例如,成員變量以小寫字母開頭。此外,像屬性這樣的東西可能希望生活在一個屬性文件,因爲有像這樣的東西的罐裝解決方案,但這是一個單獨的問題。 –

+0

我知道並理解,那些最初是常量但我改變類型的數據成員是因爲我不能使用常量而是一種設置方法,並且忘記更改名稱格式。 Eclipse還提供了一個警告。不管怎麼說,還是要謝謝你。 – Asynchronous

回答

1

我不是100%肯定,但我想你問的是,你必須調用dbUtil.set *和* dbUtil.get在相同的方法。

我建議你使用db屬性創建枚舉,因此無論傳遞給參數的dbType如何,都可以調用getters。你可以像下面那樣定義你的枚舉。

public enum DBType { 
    //ser properties you want for db. url, username are just dummy values 
    HSQLDB("url", "username", "password"), MYSQL("url", "username", "password"); 
    private String url; 
    private String username; 
    private String password; 
    private DBType(String url, String username, String password){ 
     this.url = url; 
     //set other properties 
    } 
    public String getUrl(){ 
     return this.url; 
    } 
    //getter for all the other values 

} 

和DatabaseConnectivity的getConnection方法會

public Connection getConnection(DBType dbType) throws SQLException { 

     return DriverManager.getConnection(dbType.getUrl(), 
        dbType.getUsername(), dbType.getPasword()); 

} 
1

可以提供DatabaseConnectivity類的構造函數的憑據,然後用它們在DatabaseUtility實例設定值。

class DatabaseConnectivity { 
    DatabaseUtility dbUtil; 
    public DatabaseConnectivity (String userName, String password) { 
     dbUtil = new DatabaseUtility(); 
     dbUtil.setUsername(userName) 
     dbUtil.setPassword(password); 
    } 
    ......