2010-08-09 251 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 " + ... 

希望這可以幫助別人。