我将程序连接到数据库时遇到问题,当我在一个文件中执行所有操作然后它工作时,但是当我想让它面向对象时,它会调用NullPinterException。如果你可以帮助我,有代码:
Main.java:
public static void main(String[] args) {
try{
DbConnect.ConnectToDB();
}catch(Exception e){
System.out.println(e);
}
}
DatabaseConnect.java:
public class DatabaseConnect {
private static Connection connect;
public static String isClosed;
public void ConnectToDB(){
try{
Class.forName("com.mysql.jdbc.Driver");
connect = DriverManager.getConnection("jdbc:mysql://127.0.0.1/warsztattest", "root", "");
}catch(Exception e){
System.out.println(e);
}
}
public String CheckConn() throws SQLException{
if (connect.isClosed()){
isClosed = "Disconnected";
}else{
isClosed = "Connected";
}
return isClosed;
}
}
答案 0 :(得分:1)
您无法以静态方式调用非静态方法。如果您将ConnectToDB()
声明为静态方法,或者在主类中实例化DatabaseConnect
,则代码应该有效。
答案 1 :(得分:0)
我试图对您的代码进行微小的更改,因此这不是我在代码中使用的解决方案(例如:没有定义构造函数)。我没有测试过,但它应该可以工作。
Main.java:
public static void main(String[] args) {
try{
DatabaseConnect dbc = new DatabaseConnect();
dbc.ConnectToDB();
String status = dbc.isClosed() ? "Closed" : "Open";
System.out.println("Connection status: "+status);
}catch(Exception e){
System.out.println(e);
}
}
DatabaseConnect.java:
public class DatabaseConnect {
private Connection connect;
public void ConnectToDB(){
try{
Class.forName("com.mysql.jdbc.Driver");
connect = DriverManager.getConnection("jdbc:mysql://127.0.0.1/warsztattest", "root", "");
}catch(Exception e){
System.out.println(e);
}
}
public String CheckConn() throws SQLException{
return connect.isClosed();
}
}
答案 2 :(得分:0)
只需实例化DatabaseConnect对象,然后调用其方法
public static void main(String[] args) {
try{
//DbConnect.ConnectToDB();
DatabaseConnect dataConnect = new DatabaseConnect();
dataConnect.ConnectToDB();
dataConnect.CheckConn();
}catch(Exception e){
System.out.println(e);
}
}