【发布时间】:2010-08-09 06:25:10
【问题描述】:
我们在 Netbeans IDE 中创建了一个使用 JavaDB 数据库的 Java 应用程序。我们希望程序在每次启动时检查数据库的表是否已经创建,否则创建它们。 我们如何做到这一点? 谢谢
【问题讨论】:
-
garlicman 的回答是正确的,只是我补充一点,表格的搜索必须是大写的,因为尽管您已经以小写形式创建了表格,但元数据是大写的
我们在 Netbeans IDE 中创建了一个使用 JavaDB 数据库的 Java 应用程序。我们希望程序在每次启动时检查数据库的表是否已经创建,否则创建它们。 我们如何做到这一点? 谢谢
【问题讨论】:
我用:
DatabaseMetaData metas;
ResultSet tables;
Statement stat;
m_connexion = DriverManager.getConnection("jdbc:derby:mybase;create=true");
metas = m_connexion.getMetaData();
stat = m_connexion.createStatement();
tables = metas.getTables(m_connexion.getCatalog(), null, "MYTABLE", null);
if (!tables.next())
stat.execute(
"CREATE TABLE APP.MYTABLE (" // etc.
... 这对我有用。
【讨论】:
Istao 对桌子是否存在的测试在 Derby 中对我不起作用。即使以前创建了该表,也从未找到该表。缺少的是您必须将 TABLE_SCHEM 指定为“APP”,然后将表类型设置为包含“TABLE”。可能在以前的版本中使用 null 有效,但是使用 Derby 10.12 并没有找到以前创建的将这些参数设置为 null 的表。
Connection conn = DriverManager.getConnection(DB_PROTO + DB_NAME + ";create=true");
DatabaseMetaData metas = conn.getMetaData();
ResultSet tables = metas.getTables(conn.getCatalog(), "APP", TABLE_NODES, new String[] {"TABLE"});
if (!tables.next()) {
Statement stat = conn.createStatement();
stat.execute("create table " + ...
希望这对其他人有所帮助。
【讨论】: