getConnection()中抛出空指针异常

时间:2010-11-22 08:12:03

标签: java sql mysql eclipse

我有以下情况:我有一个与数据库(MySQL)连接的java代码。当我从eclipse运行java代码并从数据库中获取数据时,一切正常。 但是当我从html代码运行java代码作为Applet时,它会抛出Null指针异常,并且在这种情况下我检测到问题发生在以下java代码中:

private  Connection getConnection() throws SQLException{
   try {
        Class.forName("com.mysql.jdbc.Driver");
        String name="jdbc:mysql://localhost:3306/sensors_data";
        String username="root";
        String psw="11111";

        conn = DriverManager.getConnection(name,username,psw);
   } catch(Exception e) {
        e.printStackTrace();
   }
   return conn;

}

对象“conn”为空。

3 个答案:

答案 0 :(得分:5)

好吧,如果DriverManager.getConnection()抛出异常,你就会打印出异常,但无论如何都会返回conn。您可能应该让异常传播给调用者 - 毕竟,调用者现在可以使用他们可以使用的连接。

(你也在捕捉任何异常,而不仅仅是SQLException,这是一个坏主意。)

我不希望能够从applet直接连接到数据库 - 我不记得applet网络连接的确切限制,但这可能是问题所在。数据库运行在哪里与Web服务器相比?如果它不在发布applet的同一主机上,我不希望它能够在没有特殊权限的情况下进行连接。 (我怀疑,尝试连接localhost特别不太可行。)

您应该能够在调试日志中看到DriverManager.getConnection抛出的异常 - 这应该是第一个调用端口,以及修复异常处理。

答案 1 :(得分:1)

将localhost替换为数据库所在的计算机名称,然后重试。

答案 2 :(得分:-1)

问题是你应该在try {}线程中返回conn。或者,您可以创建一个连接变量作为类字段,然后将conn值分配给try {}内部的连接,然后问题将有希望解决。

    public static Connection conn1 = null;

public static Connection getConnection(){
    try {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        Connection conn = DriverManager.getConnection 
                ("jdbc:mysql://localhost/?user=root&password=root");
        if(conn != null){
            System.out.println("Connect database successfully.");
            conn1 = conn;
        }
        else System.out.println("Connection failed...");
        return conn;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}