gpt4 book ai didi

java - 尝试将连接对象传递给另一个 java 类时出现 NullPointerException

转载 作者:行者123 更新时间:2023-11-29 07:43:21 25 4
gpt4 key购买 nike

我有一个 java 类,它使用属性文件建立数据库连接。为了向表中插入数据,我编写了另一个 java 类,它从第一个类获取连接对象。

这是连接类

package feedback;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

public class DbConnection {

private static String driver = "com.mysql.jdbc.Driver";
private static String url = "jdbc:mysql://localhost:3306/online_feedback";
public static Connection con;
static String properties[] = new String[2];


public static Connection connectDB() {
try {
Class.forName(driver);
con = DriverManager.getConnection(url, properties[0], properties[1]);
System.out.println("Conn obj :::" + con);
System.out.println(properties[0]);
System.out.println(properties[1]);
} catch (ClassNotFoundException ex) {
Logger.getLogger(DbConnection.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(DbConnection.class.getName()).log(Level.SEVERE, null, ex);
}

return con;

}

public void loadProp() {
Properties prop = new Properties();
InputStream input = this.getClass().getResourceAsStream("connection.properties");
try {
prop.load(input);
} catch (IOException ex) {
Logger.getLogger(DbConnection.class.getName()).log(Level.SEVERE, null, ex);
System.out.println("exception " + ex);
}

String username = prop.getProperty("username");
String password = prop.getProperty("password");

properties[0] = username;
properties[1] = password;

System.out.println(properties[0]);
System.out.println(properties[1]);

}

public static void main(String[] args) {

DbConnection d = new DbConnection();
d.loadProp();
Connection cont = d.connectDB();
System.out.println("okay " + cont);

}

}

这个类在调试时工作正常。它打印用户名、密码以及连接对象。

这是第二节课

package feedback;

import java.sql.Connection;

public class Test {


public static void main (String[] args){
Connection c = DbConnection.connectDB();
System.out.println("connected " + c);
}
}

问题是它打印 null 作为连接对象。

请帮我找出问题所在

提前致谢

最佳答案

你得到 null因为你的 Test电话 DbConnection.connectDB();在调用 loadProp() 之前.如果您从 main 中复制前两行,则可以解决此问题。进入您的代码。

但是,这不是一个好的解决方法,因为您有一个非静态方法 loadProp()修改 static String properties[]数组。

你最好制作 loadProp()静止的。为此,您必须更换 this.getClass()使用静态方式获取类 - 例如,通过使用 DbConnection.class .此外,您可以将该方法转换为静态初始化程序,并避免完全显式调用它:

static {
Properties prop = new Properties();
InputStream input = DbConnection.class.getResourceAsStream("connection.properties");
try {
prop.load(input);
} catch (IOException ex) {
Logger.getLogger(DbConnection.class.getName()).log(Level.SEVERE, null, ex);
System.out.println("exception " + ex);
}

String username = prop.getProperty("username");
String password = prop.getProperty("password");

properties[0] = username;
properties[1] = password;

System.out.println(properties[0]);
System.out.println(properties[1]);
}

现在您的新 main会正常工作。

关于java - 尝试将连接对象传递给另一个 java 类时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27968159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com