środa, 19 listopada 2008

Jak sprawdzić czy baza danych istnieje w OpenBaseMovil-db

Po kilku dniach pracy z OpenBaseMovil-db natknąłem się na problem. Otóż operacja:
Database db = Database.connect(DATABASE_NAME);
jeśli baza danych nie istnieje to ją automatycznie utworzy. Lepsze to niż rzucać wyjątkiem ;-) No ale gdy później zaczynamy operować na tabelach które nie istnieją to wyjątek już się pojawia... Trzeba znaleźć sposób jak sprawdzić tabele zostały już utworzone podczas łączenia z bazą. Rozwiązanie odnalazło się na forum OpenBaseMovil. Sposobem na to jest jest wersjonowanie bazy przy użyciu metod Database.getVersionMajor() oraz Database.setVersionMajor().
Już spieszę z przykładem:
public Database createDb() {
Database dbh = null;
try {
dbh = Database.connect(DATABASE_NAME);
// 0 - tabele jeszcze nie istnieją
if (dbh.getVersionMajor() == 0) {
dbh.drop();
dbh = Database.create(DATABASE_NAME);
// tworzenie tabel
createTables(dbh);
// 1 - tabele utworzone
dbh.setVersionMajor((short) 1);
}
} catch (Exception e) {
dbh = null;
}
return dbh;
}
I problem rozwiązany :)

ps. wersja finalna NetBeans 6.5 dostępna tutaj :)

EDIT:
Metoda ostatecznie nie działała jak powinna, poprawiłem - teraz jest ok :)

1 komentarz:

  1. nie działa mi ta funkcja:
    Database db = Database.connect("BazaDanych");
    jeśli baza nie istnieje to powinna zostać utworzona a tymczasem wywala błąd w NetBeans, pozostałem funckje m.in. Database.create i cała reszta działa bez problemu:
    Installing suite from: http://127.0.0.1:2743/MobileApplication1.jad
    [Store] [ERROR] RecordLocator{multiplexer=1, recordId=1, offset=0}
    bm.storage.InvalidRecordIDException: error finding record
    at bm.storage.Store.loadRecord(Store.java:499)
    at bm.storage.Store.makeCurrent(Store.java:433)
    at bm.storage.Store.getRecord(Store.java:873)
    at bm.db.Database.loadHeader(Database.java:762)
    at bm.db.Database.connect(Database.java:112)
    at Midlet.startApp(Midlet.java:20)
    at javax.microedition.midlet.MIDletTunnelImpl.callStartApp(), bci=1
    at com.sun.midp.midlet.MIDletPeer.startApp(), bci=7
    at com.sun.midp.midlet.MIDletStateHandler.startSuite(), bci=269
    at com.sun.midp.main.AbstractMIDletSuiteLoader.startSuite(), bci=52
    at com.sun.midp.main.CldcMIDletSuiteLoader.startSuite(), bci=8
    at com.sun.midp.main.AbstractMIDletSuiteLoader.runMIDletSuite(), bci=161
    at com.sun.midp.main.AppIsolateMIDletSuiteLoader.main(), bci=26

    OdpowiedzUsuń