uloha z Javy

Programovacie jazyky, rady, poradňa...
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: uloha z Javy

Príspevok od používateľa yankee »

vymazal som tie uvodzovky a uz to funguje, diky za radu

edit... ALE neviem preco vzdy vypise cenu 2.1 ??????????????
piton
King
King
Používateľov profilový obrázok
Príspevky: 1902
Registrovaný: 02 aug 2005, 0:31
Bydlisko: Hnojisko

Re: uloha z Javy

Príspevok od používateľa piton »

skus pridat za kazdy case break;
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: uloha z Javy

Príspevok od používateľa yankee »

moje prve riesenie uz finguje vdaka vsetkym za rady
to Javatar: ale nepaci sa mi ze moje riesenie nedokaze pracovat podla zadania... napr. ked chce zakaznik cukor naviac preto to teraz skusam riesit trochu aj podla tvojho navrhu, ale nie je mi moc jasny, mohol by si to popisat trochu podrobnejsie?
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: uloha z Javy

Príspevok od používateľa javatar »

jasne popisem...

vies aka je to abstraktna trieda?

je to trieda bez konstruktoru ktora sa neda priamo vytvorit
a naco je to dobre? da sa z nej dedit a vsetky atributy a metody sa zdedia a abstraktne metody sa musia dodefinovat inak trieda neprejde kompilaciou

nebudes prisady riesit ako interface ale ako abstraktnu triedu... a preco? mozes podedit atribut dvojita typu boolean a uz v konstruktore sa spytat na to ci bude alebo nebude dvojita (alebo to zahrnut v konstruktore pomocou parametrou)

nechas jej abstraktnu metody vypoctu ceny - alebo ak dvojita ingrediencia vzdy znamena dvojitu cenu pokojne nemusi byt ani abstraktna(dalsia vyhoda abstraktnej triedy oproti interface - neurcujes len ake metody ma potomok ale tie spolocne mozes pokojne aj zadefinovat) ale len vypocitas cenu podla cennika alebo z atributu cena (your choice) pripadne das krat dva ak dvojita==true

chapeme sa alebo chces kod?
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: uloha z Javy

Príspevok od používateľa yankee »

hej chapem, nieco som si aj precital o abstraktnej triede a je mi jasne ako si to myslel

//autoeditácia príspevku (02 Dec 2010, 17:22)
mam taketo dalsie zadanie...
Úloha 1
Navrhnite program, ktorá bude ukladať do databázy dva objekty:

Osoba
Auto
Atribúty týchto tried nie sú dôležité, zvoľte si 2 - 3 ľubovoľné atribúty pre každú triedu.

Treťou triedou programu bude UkladacObjektov. Táto trieda bude vedieť uložiť tieto objekty do databázy.

Navrhnite tieto tri triedy tak aby Osoba a Auto nevedeli o tom, že sú ukladané do databázy = neobsahujú teda žiaden SQL príkaz. SQL príkazy vytvára trieda UkladacObjektov
Dôležité je aby ste triedy navrhli tak, aby ste okrem Osoby a Auta mohli pridať ďalšie a UkladacObjektov by sa nemusel zmeniť

Pri spustení programu nemusíte zadávať atribúty objektov Osoba a Auto, môžu byť pevne zadané v kóde alebo sa pri každom spustení vygenerujú náhodné. Stačí vložiť 2-3 objekty z každého druhu.

Nemusíte sa obmedziť iba na tieto triedy. Riešenie môže obsahovať ďalšie triedy resp. rozhrania.
chcem sa opytat akym sposobom by bolo vhodne to robit, ci udaje z objektov ukladat do databazy jednotlivo, alebo ich ukladat prostrednictvom nejakych kontajnerov, alebo ak mozete nejako inak poradit

vdaka
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: uloha z Javy

Príspevok od používateľa javatar »

ponuknem ti viac rieseni:

1. jednoduche: ulozis objekt do databazy ako BLOB, a budes mat v triede UkladacObjektov metodu UlozObjekt(Object o) kde urobis connect nad databazou a potom vlozis ako objekt do databazy ( http://dev.mysql.com/doc/refman/5.0/en/blob.html )

2. este jednoduchsie: definujes rozhranie kde trieda (Auto) vypise v jednom stringu svoje atributy oddelene neakym znakom, splitnes ich a nasledne v metode UlozObjekt(String tabulka, String[] stplce, String[] hodnoty) urobis connect a insert

3. univerzalne jak prasa: pouzijes java.reflections, a podla nazvu triedy vlozis atributy objektu do databazy, pokial databaza neobsahuje tabulku pre danu triedu tak ju vytvoris


na tvojom mieste by som siel cestou 2 :)
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: uloha z Javy

Príspevok od používateľa yankee »

no neviem vela som nerozumel asi je toho na mna vela
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: uloha z Javy

Príspevok od používateľa javatar »

tak podrobnejsi popis riesenia

vytvoris si interface VlozitelnyDoDatabazy a definujes mu metodu VypisAtributy - toto si uz robil takze vies ako na to

v objektoch ktore chces vlozit do databazy nasledne v MetodeVypis atributy vypises atributy - normalne v jednom stringu (atribut1.toString()+"\n"+atribut2.toString() atd.) pricom ich vzdy oddelis neakym znakom (v mojom pripade to bol "\n" - cize enter)

Vies ako mas tvorit objekt ktory vklada do databazy? Lebo v nom potom vyuzivas tu metodu pri tvorbe jednotliveho insertu (SQL prikaz)
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: uloha z Javy

Príspevok od používateľa yankee »

Vies ako mas tvorit objekt ktory vklada do databazy? Lebo v nom potom vyuzivas tu metodu pri tvorbe jednotliveho insertu (SQL prikaz)
pri databazach sme robili len SELECT

Kód: Vybrať všetko

String sql = "SELECT id FROM tajj";

Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(sql);
ja som do premennej sql skusal davat INSERT prikaz, ale vypisovalo mi to chybu (teraz si uz nespomeniem aku)

tak neviem ci sa pouziva pre INSERT nejaky iny sposob
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: uloha z Javy

Príspevok od používateľa javatar »

na inserty sa pouziva statement.executeUpdate(sql prikaz ako string)
teda

Kód: Vybrať všetko

Statement s = conn.createStatement();
s.executeUpdate(sql);
nemusis pre kazdy insert tvorit osobitny statement (ako v pripade selectu)

syntax prikazu insert:

INSERT INTO nazov_tabulky (zoznam_stlpcov) VALUES (hodnoty_jednotlivych_stlpcov_do_ktorych_chces_vkladat_vporadi_urcenom_v_zozname_stlpcov)

aspon MySql ma taku syntax
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: uloha z Javy

Príspevok od používateľa yankee »

Kód: Vybrať všetko

String sql = "insert into TABLE_AUTO (ZNACKA, MODEL, FARBA) values ('BMW', 'M6', 'zlta');";
	    
	    Statement s = connection.createStatement();
	    s.executeUpdate(sql);
pouzil som tento kod, ale aj tak mi vypisuje chybu java.sql.SQLSyntaxErrorException

nevies v com moze byt chyba? lebo ked som ten sql prikaz spustil v scrapbooku, tak sa spustil a vykonal bez problemov, aj v do databazy sa zapisal
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: uloha z Javy

Príspevok od používateľa javatar »

nechaj si v catch bloku do konzoly vypisat chybu exception a napis ju sem

Kód: Vybrať všetko

catch(Exception ex){
System.out.println(ex.toString());
}
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: uloha z Javy

Príspevok od používateľa yankee »

toto je ona

Kód: Vybrať všetko

java.sql.SQLSyntaxErrorException: Syntax error: Encountered ";" at line 1, column 75.
odstanil som zo sql prikazu bodkociarku a uz to funguje, ale este stale neviem ako ulozim tie hodnoty do databazy, teraz tam mam len sql prikaz pre konkretne hodnoty, to rozhranie ktore si mi poradil som spravil
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: uloha z Javy

Príspevok od používateľa javatar »

no jednoducho :)
sql prikaz je jednoduchy string, insert into musi byt na zaciatku, potom identifikujes do ktorej tabulky to chces dat a podla toho uz len ten string skladas

chapes ci ches kod?
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: uloha z Javy

Príspevok od používateľa yankee »

no takto... v rozhrani mam metodu vypisAtributy();

v triede Auto ju mam definovanu takto....

Kód: Vybrať všetko

public void vypisAtributy() {
		System.out.println(znacka.toString()+ "\n" + model.toString() + "\n" + farba.toString());
	}
neviem ci si to tak myslel ty....

no a ja konkretne neviem ako z tej metody dostat atributy do toho Stringu sql

a este jedna otazka.... nebolo by jednoduchsie vyskladat ten sql prikaz pomocou get metod z triedy Auto?
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: uloha z Javy

Príspevok od používateľa javatar »

uvazujes dobre - no a teraz cez metodu split dostanes pole hodnot ktore chces vlozit do databazy
yankee napísal: a este jedna otazka.... nebolo by jednoduchsie vyskladat ten sql prikaz pomocou get metod z triedy Auto?
bolo, ale to by si porusil univerzalnost triedy ukladajucej do databazy a to v zadani nemas...


vidim ze sa moc nechapeme, ale teraz nemam cas pisat ti kod... snad zajtra
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: uloha z Javy

Príspevok od používateľa yankee »

skusal som to robit pomocou tej split metody ale nefungovalo mi to, a stale neviem ako napisat triedu ktora vytvori ten sql prikaz, takze som sa ani trochu neposunul dalej. skusal som aj googlit a nasiel som aj veci ktore mi sice fungovali (myslim priklady s tou metodou split), ale nevedel som ako to zakomponovat do moho programu
ak by si mal cas, skus poradit ako dalej. budem velmi vdacny
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: uloha z Javy

Príspevok od používateľa javatar »

nuz tak teda trochu tvojej vdaky prijmem - predpokladame ze trieda sa vola auto a tabulka t_auto -> bolo by dobre keby malo rozhranie nie len vypis atributov ale aj nazvov atributov

Kód: Vybrať všetko

public void InsertToDatabase(Insertable i){
        StringBuilder SQLCommand = new StringBuilder();
        SQLCommand.append("INSERT INTO t_");
        SQLCommand.append(i.getClass().getName());
        SQLCommand.append(" (");
        for (String s : i.AttNames().split("\n")){
            SQLCommand.append(s).append(",");
        }
        SQLCommand.deleteCharAt(SQLCommand.length()-1);
        SQLCommand.append(") VALUES (");
        //takymto sposobom vyskladas cely string
        ...
        ...
        //potom uz len vytvoris connection a zavolas executeUpdate(SQLCommand.toString())
    }
uz sa chapeme? ak nie - napis SS, pokusim sa najst cas a vysvetlim cez skype/teamviewer
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: uloha z Javy

Príspevok od používateľa yankee »

chapem uz ako si to myslel, ale mam este par otazok...

neviem co je vstupny parameter metody (Insertable i) i by mal byt objekt triedy?

no a k tym atribudom, ktore maju byt ukladane do databazy..
ja mam taketo vzorove triedy Auto a Osoba

Kód: Vybrať všetko

package cabadaj;

public class Auto implements VlozitelnyDoDatabazy{
	private String znacka;
	private String model;
	private String farba;
	public static String tabulka = "TABLE_AUTO";
	
	public Auto(String znacka, String model, String farba) {
		this.znacka = znacka;
		this.model = model;
		this.farba = farba;
	}
	
	public void setZnacka(String znacka) {
		this.znacka = znacka;
	}
	public String getZnacka() {
		return znacka;
	}
	public void setModel(String model) {
		this.model = model;
	}
	public String getModel() {
		return model;
	}
	public void setFarba(String farba) {
		this.farba = farba;
	}
	public String getFarba() {
		return farba;
	}
	
	public void vypisAtributy() {
		System.out.println(znacka.toString() + "\n" + model.toString() + "\n" + farba.toString()); 
	}
}

Kód: Vybrať všetko

package cabadaj;

public class Osoba {
	private String meno;
	private String priezvisko;
	private String pohlavie;
	public static String tabulka = "TABLE_OSOBA";
	
	public Osoba(String meno, String priezvisko, String pohlavie) {
		this.meno = meno;
		this.priezvisko = priezvisko;
		this.pohlavie = pohlavie;
	}
	
	public void setMeno(String meno) {
		this.meno = meno;
	}
	public String getMeno() {
		return meno;
	}
	public void setPriezvisko(String priezvisko) {
		this.priezvisko = priezvisko;
	}
	public String getPriezvisko() {
		return priezvisko;
	}
	public void setPohlavie(String pohlavie) {
		this.pohlavie = pohlavie;
	}
	public String getPohlavie() {
		return pohlavie;
	}
	
	public void vypisAtributy() {
		System.out.println(meno.toString()+ "\n" + priezvisko.toString() + "\n" + pohlavie.toString());
	}
}
ako spravim rozhranie pre atributy ked maju odlisny charakter?
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: uloha z Javy

Príspevok od používateľa javatar »

insertable je pre mna to iste co pre teba vlozitelnydodatabazy je to rozhranie

no a tomu rozhraniu si definoval vypis atributy a este mu definuj metodu vypis nazvy atributov aby si vedel mena stlpcov tabulky... alebo ich tiez vyries cez staticke stringy
Napísať odpoveď