数据库连接,加载数据循环错误

时间:2017-08-02 12:01:12

标签: javafx combobox derby

我目前有两个不同的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();
        }
    }

有没有人能以简单的方式解决这个问题?

1 个答案:

答案 0 :(得分:1)

我认为最好的方法是将CREATE-Statement放到Application-Start-Method:

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

或者只是捕获CREATE-Statement上的所有异常:

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