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

标签 java

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

相关文章:

java - 如何在继续之前确保 UI 更新

java - 如何在java中列出远程计算机上目录的所有文件?

java - Rackspace 云文件(使用 jclouds)——如何获取容器位置

java - 如何测试文本片段是否经过引用打印编码

java - 使用二分查找递归返回元素在排序数组中的插入位置

java - Postgresql 与 java : query produced no result after insert

java - 为什么必须存在 no args 才能使代码正常工作?

java - 自动完成文本问题在列表中获取重复值?

java - 在没有安装 JDK 且进程作为服务运行的情况下,如何在 Windows 上从 Java 5 获取 JVM 堆转储

java - 在生产系统中使用 Hibernate 和 flyway