我有一个 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/