【发布时间】:2018-01-09 15:33:39
【问题描述】:
我目前有两个不同的 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();
}
}
有人对解决这个问题的简单方法有意见吗?
【问题讨论】:
-
所以你多次执行
initialize()?为什么不将 create 语句移到其他地方,这样就不会执行两次? -
问题是我最初需要填充数据,如果没有创建表,则尝试从中选择数据并抛出错误
-
我的意思是,您可以将代码移动到一个部分,该部分将在启动时仅执行一次,因此在进一步的代码中您可以假设正在创建表
-
真正的问题是为什么
initialize()被多次调用。那不应该发生。您能否发布更多代码:阅读(并发布)堆栈跟踪以查看相关内容。 -
不能只加载一次吗?保留对根节点和控制器的引用,只重新显示相同的节点而不是重新加载它。