2010-08-09 158 views
6

我们创建了一个java应用程序,它在Netbeans IDE中使用JavaDB数据库。如果数据库的表已经被创建,我们希望程序检查每次启动,否则创建它们。 我们该怎么做? 感谢名单JavaDB - 检查数据库是否存在

+0

[如何检查数据库是否存在于Hsqldb/Derby中?](http://stackoverflow.com/questions/3801773/how-to-check-if-a-database-exists-in-hsqldb -derby) – Raedwald 2013-09-02 16:15:34

+0

蒜人的答案是正确的,只有我补充说,表的搜索必须是大写,因为尽管你已经创建了小写的表,元数据是大写 – 2017-07-10 19:35:25

回答

6

我用:

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. 

...这是为我工作。

0

Istao对表格存在的测试对德比来说并不适用。即使它是以前创建的,该表从未被发现。缺少的是你必须将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 " + ... 

希望这可以帮助别人。