2017-08-02 75 views
0

我目前有兩個不同的fxml頁面。一個是主屏幕,另一個是處理連接。主屏幕當前正在創建數據庫和初始化時需要的表格。另一頁用於添加和刪除數據庫中的值。現在的問題是,我目前正在主頁上運行一個函數,以在初始化時使用數據庫數據填充選擇框,但是當它運行時,它會嘗試再次創建表並由於表已創建而引發錯誤。有沒有簡單的方法來解決這個問題?數據庫連接,加載數據循環錯誤

下面是主要頁面初始化函數:

public void initialize() { 
     try { 

      Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance(); 
      //below gets the connection specified earlier 
      conn = DriverManager.getConnection(dbURL); 
      System.out.println("DB Connection Created!"); 

      String createString = "CREATE TABLE Connections (DETAILS VARCHAR(255) NOT NULL, NAME VARCHAR(255) UNIQUE)"; 
      stmt = conn.createStatement(); 
      stmt.execute(createString); 
      System.out.println("Connections table created!"); 


      //below is for populating the usernames 
      String sql2 = "Select NICKNAME FROM Users ORDER BY NICKNAME ASC"; 
      stmt = conn.createStatement(); 

      ResultSet rs2 = stmt.executeQuery(sql2); 

      usernameList.clear(); 
      while(rs2.next()) { 
       String name = rs2.getString("NICKNAME"); 
       usernameList.add(name); 
       System.out.println("User initialize: " + name); 
      } 
      System.out.println("Objects: " + usernameList); 
      sourceUsername.setItems(FXCollections.observableArrayList(usernameList)); 
      cbosUsername.setItems(FXCollections.observableArrayList(usernameList)); 
      tiUsername.setItems(FXCollections.observableArrayList(usernameList)); 
     } 
     catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 

有沒有人有一個簡單的方法的任何輸入來解決這個問題?

+0

所以你執行'初始化()'多次?你爲什麼不把create語句移到其他地方,所以你不要執行兩次? – JohnnyAW

+0

問題是我最初需要填充數據,如果沒有創建表,然後嘗試從中選擇數據並拋出錯誤 – dgelinas21

+0

我的意思是,您可以將代碼移動到一個部分,只會被執行一旦啓動,所以在進一步的代碼中,你可以假設,該表正在創建 – JohnnyAW

回答

1

我認爲最好的辦法是把CREATE-聲明,以應用程序啓動方法:

public class MyApp extends Application { 
    public void start(Stage stage) { 
     //perform create statement 
    } 
} 

或只是趕上你的CREATE-聲明所有異常:

try{ 
    String createString = "CREATE TABLE Connections (DETAILS VARCHAR(255) NOT NULL, NAME VARCHAR(255) UNIQUE)"; 
    stmt = conn.createStatement(); 
    stmt.execute(createString); 
} catch (Exception e){ 
} 
+0

想到這樣做,但它是一個嵌入式德比數據庫,並且不支持「IF NOT EXISTS」SQL創建語句 – dgelinas21

+0

如何執行「SELECT * FROM Connections」並捕獲異常?如果您得到正確的例外,您可以致電CREATE-Statement – JohnnyAW

+0

@ dgelinas21檢查我的更新回答 – JohnnyAW