我有以下情况:我有一个与数据库(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”为空。
答案 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;
}