【问题标题】:Setting multiple user/password for Connection Class为连接类设置多个用户/密码
【发布时间】:2017-03-08 20:02:51
【问题描述】:

大家好,我有一个包含多个配置文件(“Admin”、“Delegate”)的应用程序,并且在我的数据库中,我有相同的用户进行操作。我想使用 ComboBox 设置数据库用户,其中用户根据用户配置文件通过我的所有数据库调用登录并使用该数据。

我的连接数据在 Connection 类 SQL 中被硬编码,例如:

public class SQL {

private PreparedStatement PStatement;
private Connection connection;
private String user;
private String pass;


public String getUser() {
    return user;
}

public void setUser(String user) {
    this.user = user;
}

public String getPass() {
    return pass;
}

public void setPass(String pass) {
    this.pass = pass;
}

public Connection dbConection() {

    String loggedUser = "root" ;
    String loggedUserPass = "";

    try {
        Class.forName(cf.DB_DRIVER);
        connection = DriverManager.getConnection(cf.SERVER_URL + cf.SERVER_DB, loggedUser, loggedUserPass);

        if (connection == null) {
            throw new SQLException("Connection no established");
        }            
        return connection;

    } catch (ClassNotFoundException | SQLException e) {

        JOptionPane.showMessageDialog(null, e.getMessage(), cf.WINDOW_TITLE, JOptionPane.ERROR_MESSAGE);            
    } 
    return connection;
}

每次我使用我的 DAO 时,我都必须调用 SQL 类:

public int insert(Users user) throws SQLException {
    SQL sql = new SQL();
    query = sql.createPStatement(cf.INSERT_USER_DATA);
    query.setInt(1, user.getUserId());
    query.setInt(2, user.getUserCencos());
    query.setInt(3, user.getUserProfile());
    query.setString(4, user.getUserPassword());
    query.setString(5, user.getUserName());
    query.setString(6, user.getUserPosition());
    query.setString(7, user.getUserOffice());
    try {
        result = query.executeUpdate();
    } catch (SQLException | NumberFormatException e) {
        throw e;
    } finally {
        SQLUtils.closeQuietly(sql.dbConection());
        SQLUtils.closeQuietly(query);
    }
    return result;
}

但每次我实例化时,它都会采用硬编码值。

如何设置连接数据userpassword 覆盖 SQL 类中的“已烧毁”连接字符串?

感谢您对这位新手程序员的帮助。

【问题讨论】:

  • 删除String loggedUser = "root" ;String loggedUserPass = "";,用userpass代替

标签: java sql swing connection


【解决方案1】:

我有一个带有公共静态变量的类 cf

public class cf {    

public static String DB_USER;
public static String DB_PASSWORD;  
public static String INV_DEL="delegado";
public static String INV_DELXXX="123";
public static String A_="root";
public static String A_XXX="";
getter and setter...

public static void setLogin(String profile){

    switch(profile){            
        case "Admin":
            cf.setDB_USER(cf.A_);  
            cf.setDB_PASSWORD(cf.A_XXX);  
        break;    

        case "Delegado":
            cf.setDB_USER(cf.INV_DEL);  
            cf.setDB_PASSWORD(cf.INV_DELXXX);  
        break;         
    }

}

所以在我的 SQL 类中,我使用静态变量而不是实例变量。

public Connection dbConection() {

try {
        Class.forName(cf.DB_DRIVER);
        connection = DriverManager.getConnection(cf.SERVER_URL +    cf.SERVER_DB, cf.getDB_USER(), cf.getDB_PASSWORD());
  more SQL stuff...
}

所以当用户使用按钮登录时,在comboBox中,所以我设置了静态变量,

private void loginButtonActionPerformed(java.awt.event.ActionEvent evt) {        

profile = profileComBoBox.getSelectedItem().toString();        
    setLogin(profile);
do login stuff...       
}

不是那么优雅,但有时​​可以开始。

【讨论】:

    猜你喜欢
    • 2018-05-08
    • 1970-01-01
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 2015-04-08
    • 2018-02-07
    相关资源
    最近更新 更多