2010-08-09 9 views
6

Stworzyliśmy aplikację java, która korzysta z bazy danych JavaDB w IDE Netbeans. Chcemy, aby program sprawdzał przy każdym uruchomieniu, czy tabele bazy danych zostały już utworzone, i w przeciwnym razie je utworzy. Jak to robimy? thanxJavaDB - Sprawdzanie, czy istnieje baza danych

+0

możliwy duplikat [Jak sprawdzić, czy baza danych istnieje w Hsqldb/Derby?] (Http://stackoverflow.com/questions/3801773/how-to-check-if-a-database-exists-in-hsqldb -derby) – Raedwald

+0

Odpowiedź czosnku jest poprawna, tylko dodam, że wyszukiwanie w tabeli musi być pisane wielkimi literami, ponieważ pomimo tego, że utworzono tabelę małymi literami, metadane są pisane wielkimi literami –

Odpowiedz

6

używam:

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. 

... i to jest praca dla mnie.

0

Test Istao na istnienie stołu nie zadziałał dla mnie z Derby. Stół nigdy nie został znaleziony, mimo że został wcześniej utworzony. Czego brakuje, musisz określić TABLE_SCHEM jako "APP", a następnie ustawić typ tabeli na "TABLE". Być może używanie null działało w poprzednich wersjach, ale używanie Derby 10.12 nie znajduje poprzednio utworzonej tabeli z tymi parametrami ustawionymi na 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 " + ... 

Mam nadzieję, że to pomoże komuś innemu.