有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我是新来的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用于调用这两种db类型:

public enum DBType {

    HSQLDB, MYSQL
}

接下来我有一个方法,它使用switch语句根据main method中的用户偏好分配不同的db连接

*这是我帖子的重点,我必须在这里同时调用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 enum

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

}

共 (1) 个答案

  1. # 1 楼答案

    我不是100%确定,但我认为您要问的是必须调用dbUtil。set*和dbUtil。用同样的方法

    我建议您使用db属性创建enum,这样无论传递给参数的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());
    
    }