使用单独的类从Get和Set方法获取值

时间:2014-06-28 18:29:02

标签: java

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

}

2 个答案:

答案 0 :(得分:1)

您可以在类DatabaseConnectivity的构造函数中提供凭据,然后使用它们在DatabaseUtility的实例中设置值。

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

答案 1 :(得分:1)

我不是百分百肯定,但我认为你要问的是你必须用同样的方法调用dbUtil.set *和dbUtil.get *。

我建议您使用db属性创建枚举,因此无论dbType传递给参数,您都可以在其上调用getter。您可以按如下方式定义枚举。

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());

}