» »

namizna aplikacija v javi

namizna aplikacija v javi

urosz ::

Upam, da me bo kdo, ki obvlada to področje poskušal malo usmeriti :D

Za maturo iz rač. bom izdelal namizno aplikacijo v javi, e-redovalnico. Za tem seveda stoji neka baza podatkov (učenci, ocene, razredi, itd..). Zanima me, na kakšen način se je najbolj lotit tega? Oz. kakšno bazo sploh naj uporabim. Naj so to klasične tekstovne datoteke (predvidevam da ne glih), mysql baza (za katero je potrebno spet vsaj lokalni strežnik) ali kako drugače?

Recimo za primer, da bi se odločil za mysql na lokalnem apache-ju (uporabil bi XAMPP ali WAMP). Ta aplikacija potem ni prenosljiva na kateri koli računalnik, saj vsak računalnik seveda nima strežnika in ustrezne mysql baze.

Kako se take stvari v praksi ponavadi delajo? Ker če že nekaj delam, hočem da jo je praktično tudi mogoče uporabljati (čeprav bo to 99% zgolj projektna za maturo).

Se pravi moje prvo vprašanje je, kako na čim bolj eleganten in enostaven način realizirati bazo vsega tega, da bo dokaj lahko prenosljiva.

In še drugo vprašanje.. GUI bom izdeloval v Swing-u, sedaj pa me zanima kaj je glede na mojo velikost aplikacije boljše:
a) ročno kodirati cel GUI, vse grafične komponente, obnašanje,.. in s tem popolnoma obvladovati kodo in porabiti nekoliko več časa
b) izdelati GUI v enem izmed IDE-jev, ki omogoča veliko dela z miško (naprimer: NetBeans ali pa Eclipse+kak plugin) in s tem prihraniti nekaj časa, vendar imeti tudi nekaj kode, ki je morda ne obvladaš v celoti in so stvari lahko nejasne.

lp, Uroš
  • spremenil: urosz ()

blackbfm ::

Za bazo preveri SQLite.

urosz ::

The entire database (definitions, tables, indices, and the data itself) is stored as a single cross-platform file on a host machine.


to se sliši kar vredu. berem nekaj o tem na njihovi strani in me zanima če si prav predstavljam zadevo?

1. Snameš si SQLite (Precompiled Binaries For Windows v mojem primeru) in namestiš.
2. Preko ukazne vrstice ustvariš datoteko x.db
3. V javi preprosto vstavljaš tabele, podatke, brskaš po podatkih, itd itd po tej datoteki *.db.
4. Aplikacijo lahko preneseš tudi na xyz računalnik, kjer ni nobenga apache-ja, ne SQLite ali česa podobnega, imaš pa zgolj javansko aplikacijo in x.db ter stvar deluje. Java enostavno komunicira z "db in a file" bazo.

Je to tako, ali sem precej fail-al ?

ps.: joo kako mi manjka znanje o bazah :P

Zgodovina sprememb…

  • spremenil: urosz ()

kopernik ::

Z verzijo 6 ima Java že vključeno bazo podatkov (vzeli so eno open source bazo in jo vključili v distribucijo). Za seminarsko verjetno zadošča. Sicer pa si poglej in se odloči: nekaj napotkov, domača stran projekta za več dokumentacije in podatkov

urosz ::

samo to je podobno kot mysql treba tudi konfigurirati v začetku in se ustvari neki Derby localhost itd.. predvidevam da ni pol ni prenosljivo kar tako, ali?

kopernik ::

Jaz priznam, da se z derbyjem še nisem ukvarjal, ampak naj bi podpiral čist out-of-the-box funkcionalnost. Torej je del aplikacije oz. lahko teče v istem procesu kot aplikacija. Ni potrebe po client-server instalaciji, če kaj vem. Preberi tukaj, za primer pa poglej tukaj. (Oboje je dostopno na linkih, ki sem ti jih dal v prejšnjem postu).

urosz ::

Samo vseeno moraš nastavit recimo CLASSPATH..
predvidevam da vsak računalnik nima tega nastavljenega..

eh nevem bom tiho raje ni mi najbolj jasno še :D

dajmo mojstri sigurno se je kdo ukvarjal že s kakimi namiznimi aplikacijami.
Kaj ste izbrali? in kako deluje?

Zgodovina sprememb…

  • spremenil: urosz ()

kopernik ::

Ja, je res težko nastaviti classpath. Ga boš mogel tudi recimo pri sqllite. Pač, vsaka dodatna knjižnica zahteva popravek classpatha. Za tisti preprost primer zgoraj (vse delaš v istem direktoriju):

$JAVA_HOME/bin/javac JavaDBDemo.java 
$JAVA_HOME/bin/java -cp .:$JAVA_HOME/db/lib/derby.jar JavaDBDemo Vinko Ljubljana


Rezultat bi moral biti:
1: Name: Vinko
AddressLjubljana


Aja, mislim, da vem, kaj te žuli. Kakšne sistemske spremenljivke in podobno ? Ni nič potrebno nastavljati, lahko classpath navedeš ob zaganjanju programa, tako kot sem dal primer.

Zgodovina sprememb…

  • spremenil: kopernik ()

kopernik ::

(Ja, pozabil omeniti, če slučajno ni jasno. Podani ukazi so za linux, za Windows mislim, da moraš pri classpathu spremeniti dvopičje v podpičje, $JAVA_HOME pa spremeni v absolutno pot do direktorija, kjer imaš instalirano javo, v kolikor ne maraš sistemskih spremenljivk)

c00L3r ::

Sicer ne vem kakšne so zdaj zahteve za seminarsko za maturo. Ko sem jaz pred leti delal seminarsko za maturo sem imel "vodenje videoteke". Napisano je bilo v pascalu in sem shranjeval v tekstovne datoteke. V javi ali c#, pa mislim, da je najenostavneje podatke hranit s serializacijo ali pa pa še boljše XML serializacijo. To ti je najlažje naredit in mislim, da bi moralo biti dovolj za seminarsko.

Za kaj resnega pa MySql ali pa kak SqlLite.

Zgodovina sprememb…

  • spremenil: c00L3r ()

urosz ::

glede zahtev tudi jaz nevem.. hočem pa naredit nekaj kar bi vsekakor doseglo zahteve..

se pravi bi lahko čisto vse podatke shranil tudi v *.xml ?

vse učence, vse učitelje, vse ocene, vse predmete, vse razrede.... ?

in z njimi čisto enostavno upravljal (beri: ustvarjal nove, bral, prikazoval podatke,...) ?

ker xml datoteke pa so lahko prenosljive, ne rabiš server-client, nobenih classpathov, nič.. xml mi kar diši, edina težava je, da še z xml nisem nikoli delal

kopernik ::

V Javi je več opcij glede xml-a, najenostavnejša je verjetno tale, kar pa je PITA pri kakšnih povezanih strukturah. Za enostavno delo z xml datotekami bi zato ravno tako potreboval kakšno eksterno knjižnico in posledica je popravljanje classpatha. Mimogrede, če že nameravaš delati s fajli, predlagam yaml. XML se mi ne zdi tako grozno primeren za shranjevanje grafov objektov, sploh v primeru, če boš to delal lastnoročno.

Mavrik ::

Am, zakaj bi pa popravljal classpath, če itak na koncu vse zapakiraš v .jar in se potem tisto zalaufa avtomatsko?
The truth is rarely pure and never simple.

kopernik ::

Zato ker derby.jar ne moreš zapakirati v svoj jar s svojimi razredi. Pa kaj vas ta classpath tako moti ? V ukazni vrstici dodaš še -cp en_eksterni_lib.jar

EDIT: Lahko bi vse zapakiral v en jar, če bi vse klase vseh zunanjih knjižnic nekam odzipal in nato iz vse solate naredil en jar. Samo to je res grdo.

EDIT2: Lahko bi si tudi pomagal z webstartom, ampak to je spet nekaj dodatnega dela pri ustvarjanju distribucije. Za eno seminarsko totalni overkill.

Zgodovina sprememb…

  • spremenil: kopernik ()

urosz ::

torej če zdaj povzamemo vse možnosti

pick=?

kopernik ::

Sam se odloči. V uvodnem postu si govoril o nalogi za maturo, hkrati pa še spraševal, kako se dela v praksi. Jaz bi za seminarsko izbral kar tekstovne datoteke. V praksi, kjer bi tako e-redovalnico spremljalo in urejalo več ljudi, pa jasno neka baza podatkov, uporabniški vmesnik pa lahko kar web aplikacija s tremi skupinami uporabnikov : učenci in njihovi starši starši z bralnim dostopom samo do svojih podatkov, učitelji s polnim dostopom do podatkov svojih učencev, administratorji s polnim dostopom do vseh podatkov o vseh učencih. Zadevo je mogoče zakomplicirati še na kakšne druge načine.

urosz ::

spoznavam se s sqlite

po kakih 2 urah mučenja/guglanja/poskušanja sem končno uspel nastaviti driver/classpath za sqlite, narediti prvo *.db s pomočjo SQLite Database Browser-ja in napisat testni programček, ki tri vnose iz tabele v bazi prebere in izpiše v konzolo

mislim da bom se odločil za sqlite

pozna kdo kaj bolj naprednega kot je recimo SQLite Database Browser? Tega sem namreč naključno zasledil nekje.

blackbfm ::

sqlite manager, plugin za firefox: https://addons.mozilla.org/en-US/firefo...

urosz ::

aha hvala. kar všečna zadeva, edino ni mi všeč da je plugin za ff. iščem kako samostojno zadevo.

eno vprašanje še.. izbira končnice baze.. *.db, *.sdb, *.sqlite, ... itd

je pomembno?

blackbfm ::

ne

urosz ::

eno vprašanje na hitrco

v sql tabeli, kjer je stolpec matematika (ali pa slovenščina ali karkoli), bodo not ocene. kako je najboljše shranit te ocene v tabelo? kot string ("5,1,2,3,4,2") in pol v javi to sparsat ali shranit nek int[] ocene v tabelo ali kako?

kogledom ::

Zakaj bi tako kompliciral?
Ena tabela za Učence: ID, Ime, Priimek, ...
Ena tabela za Predmete: ID, Predmet, Učitelj, ...
Ena tabela za Ocene: ID, ID_Učenec, ID_Predmet, Datum, Vrsta(pisna, ustna, drugo), ...

urosz ::

vsak razred ima svojo podatkovno bazo s temi tremi tabelami potem takem?

Mavrik ::

Ne. Saj ocene niso vezane na razred ampak na učenca.
The truth is rarely pure and never simple.

urosz ::

že že, samo upoštevaj da je potrebno te učence klasificirati v razrede

da lahko dodajaš nove razrede, kjer so spet povsem drugi predmeti, učenci,..

Zgodovina sprememb…

  • spremenil: urosz ()

Mavrik ::

In kako ti to vpliva na opisano strukturo? Učenec pripada razredu. Ocene pripadajo učencu in predmetu. Kje maš tu povezavo ocena -- razred?
The truth is rarely pure and never simple.

urosz ::

saj ne vpliva na strukturo, samo moram nekako ponazorit Razrede znotraj katerih so učenci.

to da ima vsak razred svoj *.db fajl je zelo narobe?

to se mi zdi namreč zelo preprosta rešitev.


Ob samem začetku e-redovalnice
1. ustvari razred, njegove predmete, njegove učence
Med šolskim letom kao
2. odpri razred (bazo), urejaj podatkev(vnosi v tabelah), zapri razred(bazo)

kogledom ::

Zelo narobe ni, vendar se vprašaj kaj ti to pomaga? Samo več baz boš moral narediti (zamisli si kako bi morebitne spremembe v tem sistemu vzdrževal), alternativa pa ti je ena baza z eno tabelo več (Razredi), v tabelo Učenci pa dodaš polje ID_Razred.

urosz ::

kogledom hvala, vbistvu je to najboljša rešitev res

prav težko mi je načrtovat kaj takega, ko še nikoli nisem delal/programiral podobne stvari :P :P

kogledom ::

Ja, saj boš hitro spoznal, da se splača pred programiranjem naredit načrt. Sploh pri bazah.
Drugače si pa pomagaj z realno situacijo. Kako je npr šola urejena. Imaš razrede, v katerih so učenci. Imaš še predmete, učitelje, ocene. Za vsako od stvari, ki sem jo naštel rabiš svojo tabelo. Potem pa poglej kako so povezane. Dokler imaš "1 na več" povezave je vse ok, zaplete so ko imaš "več na več" - primer je povezava med predmeti in učenci. V tem primeru narediš še eno vmesno tabelo, npr. PredmetUčenec s polji ID (tega se navadi dajat v vsako tabelo), ID_učenec in ID_Predmet. To ti omogoča da lahko pogledaš kateri učenci imajo določen predmet in katere predmete in določen učenec. Samo v te detaile verjetno ne rabiš zait.

urosz ::

ja saj začel sem s papirjem in pisalom. in to kakih 5-6 mesecev pred rokom oddaje, tako da mislim da bo..

aplikacija bo vsebovala ustvarjanje razredov, učencev, predmetov, vnašanje ocen, popravljanje ocen, pregledovanje ocen, mogoče kaka statistika..

mislim da bi se s temi tremi tabelami dalo to realizirat. bo vmes kak WHERE stavek več

nekaj samo me zanima, ne razumem popolnoma kaj misliš s tem "več na več" :P

kogledom ::

Vsak učenec pripada samo enemu razredu. To je "1 na več". In je torej enostavno povezati tabeli Učenci in Razredi. Ampak učenec pa posluša več predmetov in en predmet posluša več učencev. To pa je "več na več". In ko hočeš povezati tabeli učenec in predmet pa ne gre več tako enostavno. Rabiš še eno vmesno tabelo. Kot sem zgoraj razložil.

Invictus ::

Če boš delal lokalno aplikacijo na Windowsih, potem ne rabiš apacha.

za bazo pa lahko vzameš SQLite, kot so ostali predlagali.

Ne kompliciraj ...

LP I.

urosz ::

saj pa uporabljam sqlite :)

kogledom takole misliš?
recimo da sta v tabeli učenci 2 vnosa
id ime
1 uzizek
2 kogledom

v tabeli predmeti pa
id predmet
1 matematika
2 slovenš?ina

in v recimo da oba obiskujeva tako matematiko kot slovenš?ino
torej so v tabeli PredmetUcenec vnosi:
id id_ucenec id_predmet
1 1 1
2 1 2
3 2 1
4 2 2

c00L3r ::

saj pa uporabljam sqlite :)

kogledom takole misliš?
recimo da sta v tabeli učenci 2 vnosa
id ime
1 uzizek
2 kogledom

v tabeli predmeti pa
id predmet
1 matematika
2 slovenš?ina

in v recimo da oba obiskujeva tako matematiko kot slovenš?ino
torej so v tabeli PredmetUcenec vnosi:
id id_ucenec id_predmet
1 1 1
2 1 2
3 2 1
4 2 2


Tako je pravilna rešitev za povezave mnogo-mnogo oz. več na več :) Dobro ti gre.

urosz ::

eno vprašanje na hitrco spet samo
recimo vnesem 3 vrstice v tabelo, pol pa jih dropam in je 0 vrstic v tabeli
pol pa spet vstavim vrstico, pa je id enak 4, hočem pa seveda da bi bil 1

kako to rešit?

kogledom ::

delete from sqlite_sequence where name='YourTableName';

urosz ::

to je blo pa hitro. najlepša hvala

ker je moteče drugače pri testiranju


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

SQL/DML stavki

Oddelek: Šola
342853 (2195) IL_DIAVOLO
»

Matura 2 predmet E-redovalnica

Oddelek: Programiranje
101272 (906) FiR3F0X
»

[SQL] PgAdmin preprosto vprasanje povezano s stolpci v tabeli

Oddelek: Programiranje
221898 (1257) Cvele2011
»

[Access 2007]

Oddelek: Programiranje
132293 (1893) urosz
»

[PostgreSQL] PgAdmin kreiranje tabel

Oddelek: Programska oprema
6971 (925) Poldi112

Več podobnih tem