2017-08-02 79 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