2014-07-06 66 views
-1

我有連接我的程序到數據庫的問題,當我在一個文件中做所有事情然後它工作,但是當我想讓它面向對象然後它調用NullPinterException。有代碼,如果你能幫助我:JAVA面向對象的數據庫連接

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

}

+1

您與非靜態方法混合靜態屬性。 DbConnect聲明在哪裏? –

回答

1

不能調用以靜態方式非靜態方法。如果您將ConnectToDB()聲明爲靜態方法,或者在主類中實例化了DatabaseConnect,則您的代碼應該可以工作。

編輯:我認爲你應該將方法聲明爲靜態方法,因爲每次要使用數據庫連接時都要實例化類是沒有道理的,特別是因爲每個對象都具有相同的屬性。會浪費資源。

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(); 
    } 
} 
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); 
    } 
}