代码之家  ›  专栏  ›  技术社区  ›  Nicole Foster

如何从主方法中获取要通过getConnection方法访问的值?

  •  -1
  • Nicole Foster  · 技术社区  · 7 年前

    我试图获取主方法将生成的值,并在getConnection方法中使用它们。然而,当我尝试访问getConnection方法时,返回了null值。

    我想使用ConnectionManager类连接到数据库。

    代码如下。

    public class ConnectionManager {
    
        public static String database;    
        public static String dbuser;
        public static String dbpassword;
    
        public static void main(String args[])  {
    
            Properties prop = new Properties();
            InputStream input = null;
    
            try {
                input = new FileInputStream("config.properties");
    
                // load a properties file
                prop.load(input);
    
                database = prop.getProperty("database");
                dbuser = prop.getProperty("dbuser");
                dbpassword = prop.getProperty("dbpassword");
    
                System.out.println(database);
            } catch (IOException ex) {
                ex.printStackTrace();
            } finally {
                if (input != null) {
                    try {
                        input.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    
    
        public static String url = "jdbc:mysql://localhost:3306/" + database;    
        private static String driverName = "com.mysql.jdbc.Driver";   
        private static String username = dbuser;   
        private static String password = dbpassword;
        private static Connection con;
    
        public static Connection getConnection() {
    
            try {
                Class.forName(driverName);
                try {
                    con = DriverManager.getConnection(url, username, password);
                } catch (SQLException ex) {
                    // log an exception. For example:
                    System.out.println("Failed to create the database connection."); 
                    System.out.println(url + " " + username + " " + password);
                }
            } catch (ClassNotFoundException ex) {
                System.out.println("Your driver has not been found."); 
            }
            return con;
        }
    }
    
    3 回复  |  直到 7 年前
        1
  •  0
  •   0ddlyoko NimChimpsky    7 年前

    您只需使用参数调用getConnection()方法。

    public static Connection getConnection(String url, String username, String password) {
        /* Your code here */
    }
    

    然后,调用此方法。

    Connection connection = getConnection(url, username, password);
    
        2
  •  0
  •   Bohemian    7 年前

    一旦 ,当它们仍然为空时。

    要“修复”您的问题,请让连接中的代码使用ConnectionManager中的字段:

    con = DriverManager.getConnection(url, ConnectionManager.dbuser, ConnectionManager.dbpassword);
    
        3
  •  0
  •   Alex Saunin    7 年前

    您在中获得了null参数值 DriverManager.getConnection(url, username, password) 调用原因是您已将它们声明为静态字段。

    因此,您将它们初始化为 nulls 在从中读取特定值之前 config.properties

    private static String username = dbuser;      //username==null; dbuser==null;
    private static String password = dbpassword;  //password==null; dbpassword==null
    private static Connection con;                //con==null;
    

    方法主要执行:

    database = (prop.getProperty("database"));
    dbuser = (prop.getProperty("dbuser"));          //dbuser="smth"; username==null
    dbpassword = (prop.getProperty("dbpassword"));  //dbpassword ="smth"; password==null
    

    con = DriverManager.getConnection(url, username, password); //username==null; //password==null; 
    

    P、 S:如前所述,最好使用带有如下参数的函数:

    public static Connection getConnection(String url, String username, String password) {
        /* Your code here */
    }