Stránka 1 z 2

databáze součásti javy

Napsal: úte 10. dub 2012, 18:59
od Václav Sedlář
Dobrý den, řešíme ve škole jeden program v javě a potřebovali bychom, aby součástí programu byla i databáze...je nějaké řešení?

Databáze se musí spustit s programem...program pak něco do dbs zapisuje...když se ukončí program, dbs se ukončí taky (data v ní zůstanou)

V zadání totiž je, že na klientském pc nebude žádná dbs...vše musí být s programem...

díky

Re: databáze součásti javy

Napsal: úte 10. dub 2012, 22:08
od Caderom
SQLite

Re: databáze součásti javy

Napsal: stř 11. dub 2012, 15:34
od Václav Sedlář
ok, díky...prostudujeme....

ještě nám někdo říkal něco o derby databázi...nemáte nějaké info?

Re: databáze součásti javy

Napsal: stř 11. dub 2012, 16:44
od Caderom
Jo, Derby databáze by šla také použít.

Stručné srovnání těchto 2 databází - http://www.sqlite.org/cvstrac/wiki?p=SqliteVersusDerby

Re: databáze součásti javy

Napsal: stř 11. dub 2012, 21:09
od arxeiss
Javu neprovozuju, a výše zmíněné DB taky ne, ale o SQLite vím, že je to hojně využívaná DB v malých programcích, je to DB která nepotřebuje žádný server ani nic, a je souborová, jenom tvůj program musí mít třídu pro práci s touto DB.
Je ovšem hodně omezená, ale pro klasické věci stačí až nad hlavu. Např většina aplikací v Androidech právě pro ukládání využívá SQLite

Re: databáze součásti javy

Napsal: stř 11. dub 2012, 21:20
od Václav Sedlář
jj, vypadá to že to chodí...teď to budeme testovat....díky za pomoc....ozvu se jak to dopadlo...

Re: databáze součásti javy

Napsal: čtv 12. dub 2012, 11:27
od Václav Sedlář
no tak mám zajímavý problém:

udělal jsem javu, sbírání dat, zápis do DBS SQLite, vzhled a pod. a po spuštění to při pokusu o zápis dat do DBS hodí do výpisu chybu out of memory....program nespadne, běží dál...

když jsem celý projekt poslal kolegům, tak jim to nedělá a normálně zapisuje do DBS...

nevíte proč?

Re: databáze součásti javy

Napsal: pát 13. dub 2012, 09:46
od yuri.cs
Skus JVM dat parametr napr. -Xmx512m a sleduj jestli bude mit porad malo pameti.

Re: databáze součásti javy

Napsal: pát 13. dub 2012, 10:11
od Václav Sedlář
ok, zkusím to v netbeansech najít a nastavit...

Ale koukal jsem do správce úloh na volnou fyz.paměť a než program spustím mám asi 550 volné paměti...po spuštění to klesne na necelých 400a pak při zápisu to do databáze to dost klesne...ale na nulu se to dostane jen při opakovaném (neúspěšném) zápisu...

Ale na PC kde mi to funguje tak i když mám dle správce úloh nula paměti, tak to funguje...

Re: databáze součásti javy

Napsal: pát 13. dub 2012, 10:30
od Václav Sedlář
tak to nepomohlo...pořád chyba

dělá to už na začátku:

Kód: Vybrat vše

public void CreateTable(String name) throws SQLException {
        try {
            Class.forName("org.sqlite.JDBC");
            Connection conn = DriverManager.getConnection("jdbc:sqlite:" + this.name + ".db");
            Statement stat = conn.createStatement();
            stat.executeUpdate("create table if not exists " + name + " (id integer PRIMARY KEY AUTOINCREMENT, datum_a_cas datetime, prutok float(53));");

            conn.close();
        } catch (ClassNotFoundException e) {
            // něco
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }

    }

vleze to do :

Kód: Vybrat vše

} catch (SQLException e) {
            System.out.println(e.getMessage());
        }

Re: databáze součásti javy

Napsal: pát 13. dub 2012, 13:39
od yuri.cs
proklepnul bych ten argument 'name'. ta cesta k DB musi mit nejakej tvar, tak treba neni dodrzenej a nemuze se tak nakonektit

Re: databáze součásti javy

Napsal: pát 13. dub 2012, 16:03
od Václav Sedlář
ok, podívám se...je ale zajímavé, že dám projekt na flešku,zkopíruju do dalších 3 pc s netbeansama a tam to jde

Re: databáze součásti javy

Napsal: pát 13. dub 2012, 17:30
od Václav Sedlář
Díky moc, bylo to tím...do name jsem dávali jen název souboru...

Na 5 PC to nevadilo a vytvořilo dbs soubor ve složce s projektem (tak jak jsme potřebovali), ale jen můj notebook-debil musí mít napsanou celou cestu...

Teď je ale problém, jak napsat cestu aby to bylo ve složce s projektem? když dám

\\dbs.db

tak to vytvoří soubor na disku C...

Já ale nemůžu vědět, kam si to uživatel zkopíruje, takže nemůžu dát natvrdo cestu...

Edit:
Zatím to řeším tak, že zjistím pomocí System.getProperty("user.dir") cestu...

Re: databáze součásti javy

Napsal: pát 13. dub 2012, 17:47
od Václav Sedlář
hmm, tak problém ...vadí mu háčky a čárky v cestě...

Takže:

Funguje:

Kód: Vybrat vše

String cesta="\\XXX\\";
nefunguje:

Kód: Vybrat vše

String cesta="\\Sdílená složka\\";
mezery nevadí:

Kód: Vybrat vše

String cesta="\\slozka x\\";

Re: databáze součásti javy

Napsal: pát 13. dub 2012, 23:40
od yuri.cs
jo jo, nikdy nepouzivat tohle zlo jako je diakritika, mezery a dalsi non-ASCII veci v path!
Tohle jsou casto dost psycho veci na debug. Pomatuju na soubory pojenovany s mezerou pred nazvem.

Re: databáze součásti javy

Napsal: sob 14. dub 2012, 00:48
od Václav Sedlář
Nojo, jenže:

1)jak to vyřešit, když si uživatel dá program do složky která má v názvu diakritiku?

2)nemůžu použít ani uživatelovu složku (v názvu účtu win mám taky diakritiku)

3)proč to dělá jen na mém notebooku?

Takže jediná možnost je nastavit natvrdo cestu např. C:/

Re: databáze součásti javy

Napsal: sob 14. dub 2012, 13:00
od W3N4
Tak nepouzivej absolutni cestu ale relativni, ne?

Jinak par poznamek:
- Dodrzuj konvence (metody zacinaji malym pismenem).
- Tady je to celkem jedno, vzhledem k tomu, ze pouzivas databazi v embedded modu, ale presto bych pouzival PreparedStatementy.
- Pokud vyjmku zachycujes, je zbytecne ji propagovat v signature metody.

Re: databáze součásti javy

Napsal: sob 14. dub 2012, 13:17
od Václav Sedlář
no asi takto..tuto třídu která má na starost databázi dělal kolega v mé skupině...je to školní projekt...

ale samo, že kdyby to bylo něco oficiálního, tak to bude vypadat jinak...teď jsme v časovém presu...

zkusím relativní cestu a dám vědět...
W3N4 píše:Tak nepouzivej absolutni cestu ale relativni, ne?


- Pokud vyjmku zachycujes, je zbytecne ji propagovat v signature metody.
-sorry, to mi nějak ušlo, jsem si toho ani nevšiml...asi to tam šoupnul netbeans


P.S.: Když dám v netbeansech vytvoření spustitelné verze (Run->Clean a Build Main Project), tak pak už ta spustitelná verze funguvala i na mém notebooku...

EDIT:

Tak buďto zapisuji relativní cestu špatně, nebo to nejde:

Absolutní cesta je takto:

C:\Sdílená složka\STI_projekt\STI_projekt\databaze.db

zkoušel jsem to zapsat takto:

Soubor="..\\databaze.db"; -chyba

Soubor="STI_projekt\\databaze.db"; -cesta nenalezena, protože je v cestě navíc ta složka, když jí vytvořím, tak chyba jako předtím

Soubor="..\\STI_projekt\\databaze.db"; -chyba


EDIT2:

ještě jsem si s tím hrál a dal jsem cestu jako:

\\databaze.db

a dal Clean a Build Main Project a spustil

teď už to háže jiný problém - databázi asi najde, ale vadí že v ní jsou záznamy s diakritikou...

a k tomu to začalo ignorovat mojí cestu a bere to nějaký starý soubor s databází

Re: databáze součásti javy

Napsal: sob 14. dub 2012, 14:32
od W3N4
A zkousel jsi proste cestu:
databaze.db
nebo pripadne:
.\databaze.db

(ted si ale nejsem jisty, jestli tecka na windowsu znaci aktualni adresar, stejne jako na unixu)

Btw mozna by nebylo na skodu hodit sem tu chybu, vcetne cele stacktrace pokud se jedna o vyjmku.

Re: databáze součásti javy

Napsal: sob 14. dub 2012, 14:37
od Václav Sedlář
zkoušel jsem tečku a to nejde...myslím že to bralo jako adresář s názvem tečka

dám výpis chyb...

ale zajímavé je, že to blbne jen ve vývoj.prostředí...když z toho udělám spustitelný, tak to funguje

edit1:

zde: http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC je napsáno, že hláška out of memory znamená:
catch(SQLException e)
{
// if the error message is "out of memory",
// it probably means no database file is found
System.err.println(e.getMessage());
}
EDIT2:

zde je komplet výpis e.printStackTrace():

Kód: Vybrat vše

[color=#FF4000]
java.sql.SQLException: out of memory
        at org.sqlite.DB.throwex(DB.java:288)
        at org.sqlite.NestedDB._open(NestedDB.java:73)
        at org.sqlite.DB.open(DB.java:77)
        at org.sqlite.Conn.<init>(Conn.java:88)
        at org.sqlite.JDBC.connect(JDBC.java:64)
        at java.sql.DriverManager.getConnection(DriverManager.java:582)
        at java.sql.DriverManager.getConnection(DriverManager.java:207)
        at database.RiverDatabase.CreateTable2(RiverDatabase.java:44)
        at sti_projekt_gaficky.STI_projekt_gafickyView.<init>(STI_projekt_gafickyView.java:59)
        at sti_projekt_gaficky.STI_projekt_gafickyApp.startup(STI_projekt_gafickyApp.java:19)
        at org.jdesktop.application.Application$1.run(Application.java:171)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
[/color]