[英]Null Pointer Exception throws in getConnection()
我有以下情况:我有一个与数据库(MySQL)连接的Java代码。 当我从Eclipse运行Java代码并从数据库中获取数据时,一切正常。 但是,当我从Applet的html代码运行Java代码时,它将引发Null Pointer Exception,并且在以下情况下,我检测到以下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”为空。
好吧,如果DriverManager.getConnection()
引发异常,则说明您正在打印异常,但无论如何都会返回conn
。 您可能应该让异常传播给调用者-毕竟,这与调用者现在可以使用的连接不同。
(您还捕获了所有异常,而不仅仅是SQLException
,这是一个坏主意。)
我不希望能够从applet直接连接到数据库-我不记得对applet网络连接的确切限制,但这很可能就是问题所在。 与Web服务器相比,数据库在哪里运行? 如果它不在发布该applet的同一主机上,那么我将不希望它在没有特殊权限的情况下完全能够建立连接。 (我怀疑尝试连接到localhost
特别不可能。)
您当然应该能够在调试日志中看到DriverManager.getConnection
引发的异常-它应该是调用的第一个端口,并且可以修复异常处理。
将localhost替换为数据库所在的计算机名称,然后重试。
问题是您应该在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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.