2010-11-22 194 views
2

我有以下情况:我有一个与数据库(MySQL)连接的java代码。当我从eclipse运行java代码并从数据库获取数据时,一切正常。 但是,当我运行从HTML代码Applet的Java代码,它抛出空指针异常,我发现在这种情况下,这个问题会出现以下Java代码:空指针异常抛出getConnection()

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; 

}

对象“康恩“ 一片空白。

+0

你在eclipse中为你工作的同一台机器上运行applet吗? – 2010-11-22 08:13:15

+0

小程序是否已签名? – 2010-11-22 08:16:01

+1

我希望这不是你真正的密码 – darioo 2010-11-22 08:19:46

回答

1

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

5

那么,如果DriverManager.getConnection()引发异常,您打印出异常,但随后返回conn。你应该让异常传播给调用者 - 毕竟,它不像调用者现在有一个他们可以使用的连接。

(你也赶上任何例外,而不是仅仅SQLException,这是一个坏主意。)

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

你应该能够看到DriverManager.getConnection当然,在你的调试日志抛出的异常 - 这应该是通话的第一口,以及修复异常处理。

-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; 
} 
+1

对不起..但是这没有任何意义:) NP是在OP的情况下,因为他只是打印堆栈跟踪,而不是抛出异常,从而让代码继续运行。 – BalusC 2012-11-16 23:37:01