java + oracle

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

java + oracle

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

Zdravim, robim jede projekt do skoly, kde chcem pouzit oracle databazu. Na odoslanie SQL prikazu pouzivam Statement, ale prave tu mi eclipse vyhadzuje chybu a neviem preco. Tento kod som prebral s projektu, kde som sa propajal na Derby, pouziva sa pre oracle nejaka ina trieda?

Kód: Vybrať všetko

Statement s = connection.createStatement();
s.executeUpdate("nejaky sql insert");
axxis
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3690
Registrovaný: 29 máj 2007, 21:53
Bydlisko: Spálené mlyny
Kontaktovať používateľa:

Re: java + oracle

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

my sme mali toto v skole, ale ja som sa tomu nakoniec vyhol, lebo som to robil v ASP.NET, ale predpokladam, ze oracle ma vytvorene nejake svoje API pre pracu s ich databazou. (aspon pre .NET to spravili) mozno by si sa mohol kuknut niekde na nete a najst si ho

poslem Ti aj nejaky kod v PM, je to urobene v struts2
paralen
Light Star
Light Star
Príspevky: 267
Registrovaný: 02 máj 2006, 15:15

Re: java + oracle

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

jaku chybu ti vypisuje?

Pouzivas dobru triedu Statement?
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: java + oracle

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

Pise to takuto chybu

Kód: Vybrať všetko

jan 05, 2012 10:23:17 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [FormularServlet] in context with path [/Projekt_PSDSD2] threw exception
java.lang.NullPointerException
	at cabadaj.DBmanage.UkladacObjektov.InsertToDatabase(UkladacObjektov.java:31)
	at cabadaj.servlet.FormularServlet.doPost(FormularServlet.java:41)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
...
...
...
...
A pouzivat triedu java.sql.Statement

keby trebalo poslem aj celu metodu ktoru pouzivam na ukladanie
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: java + oracle

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

posli ;-)
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: java + oracle

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

Na zapis udajov do DB pouzivam tuto metodu

Kód: Vybrať všetko

public static void InsertToDatabase(VlozitelnyDoDatabazy objekt) throws ClassNotFoundException, SQLException{

		Connection connection = DatabazaOracle.pripojSaNaDB();
		
		Statement s = connection.createStatement();
		s.executeUpdate(SQLPrikazy.SQLinsert(objekt));
		connection.close();
		System.out.println(SQLPrikazy.SQLinsert(objekt));
		System.out.println("Udaje boli uspesne vlozene do databazy.");
	}
A tuto metodu na vytvorenie pripojenia

Kód: Vybrať všetko

public static Connection pripojSaNaDB() throws ClassNotFoundException, SQLException {
		
		Connection connection = null;
		try {
		    // Load the JDBC driver
		    String driverName = "oracle.jdbc.driver.OracleDriver";
		    Class.forName(driverName);

		    // Create a connection to the database
		    String serverName = "127.0.0.1";
		    String portNumber = "1521";
		    String sid = "xe";
		    String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;
		    String username = "user1";
		    String password = "pass";
		    connection = DriverManager.getConnection(url, username, password);
		} catch (ClassNotFoundException e) {
		    // Could not find the database driver
		} catch (SQLException e) {
		    // Could not connect to the database
		}
		return connection;
	}
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: java + oracle

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

Class.forName(driverName).newInstance();
a ak ti to bude hadzat exception cosi s NoClassFound tak musis v projekte importovat kniznicu ktora tuto class ma
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: java + oracle

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

Hadze mi to stale rovnaku chybu

Kód: Vybrať všetko

jan 07, 2012 5:38:50 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [FormularServlet] in context with path [/Projekt_PSDSD2] threw exception
java.lang.NullPointerException
	at cabadaj.DBmanage.UkladacObjektov.InsertToDatabase(UkladacObjektov.java:31)
	at cabadaj.servlet.FormularServlet.doPost(FormularServlet.java:41)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
//autoeditácia príspevku (07 Jan 2012, 18:10)
a mam este jeden problem, odkedy som nainstaloval javu7 pise mi chyby aj na servletoch, detail na obrazku...
Prílohy
chyby.JPG
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: java + oracle

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

no bolo by mile keby si tie chyby napisal

aky je stav premennej connection po prebehnuti metody pripojSaNaDB() ? ak null tak chyba je v metode pripojSaNaDB - posli potom na ktorom riadku to pada...
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: java + oracle

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

ako dokazem v Eclipse monitorovat stav premennej? Nieco take som este nerobil.

Inak rad by som to robil inym sposobou ako servletmi. Zadanie mojho projektu je urobit databazovu aplikaciu, ktora bude komunikovat s druhou databazovou aplikaciou, umiestnenou napr. na inom pocitaci. Ide o to, ze ked v jednej databaze ulozim udaje, tak tieto udaje sa ulozia aj v druhej DB na inom PC (zdvojenie databaz), kazda DB bude obsluhovana vlastnou aplikaciou

K tym servletom... chyby mi tam ukazuje len Eclipse , ked som mal javu 6 tak tam tie chyby neboli
viac ako tento screen ti o tom neviem povedat
Prílohy
chyby.JPG
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: java + oracle

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

tak si nechaj vypisat hodnotu premennej do konzoly ked sa nevies pozriet co v nej je pocas debuggovania...
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: java + oracle

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

Ked som dal vypisat premennu connection, nic v konzole nebolo, iba to vyhodilu rovnaku chybu ako predtym

Ale chyba musi byt v pripojeni na DB lebo vzdy to odkaze na chybu v tomto riadku:

Kód: Vybrať všetko

Connection connection = DatabazaOracle.pripojSaNaDB();
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: java + oracle

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

tak si odkrokj danu metodu a zisti ktory riadok robi neplechu tam...
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: java + oracle

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

dnes mi spolutziak hovoril, ze by tam mohol byt problem aj z nejakymi nastaveniami bezpecnosti v oracle, je to mozne???
ja som akurat skusil vypnut firewall, ale to nemalo ziadny vplyv
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: java + oracle

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

pocuj - nullPointerException patri vo vynimkach k najlahsie vytraceovatelnym - uz davno si mal mat konkretny riadok a mohli by sme sa pozriet dalej

riadok: "connection = DriverManager.getConnection(url, username, password);" ti v pripade problemu z databazou hodi SQL exception ktoru ty elegantne utopis (rozumej - ignorujes ju v catch bloku)

nasledne ti riadok: "Statement s = connection.createStatement();" v takom pripade hodi null pointer exception (kedze connection sa bude rovnat null a budes sa snazit volat metodu objektu ktory neexistuje)

ale to by som najskor musel vediet ci ti to hadze v tom riadku a ci vrati metoda pripojSaNaDB null a podobne

kedze asi debugger pouzivat nevies (usudzujem z toho co pises) tak si kukni ako na to a potom hadz informacie z ktorych ti aj mozem pomoct
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: java + oracle

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

dik za tutorial.... zistil som, ze pri debugovani bola hodnota premennej connection null, takze co s tym? potrebujes este nieco ine vediet?
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: java + oracle

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

pada to na tomto riadku?

Kód: Vybrať všetko

DriverManager.getConnection(url, username, password);
mozes poslat stacktrace exception ktore ti hodi? stacktrace je napr. toto

Kód: Vybrať všetko

jan 07, 2012 5:38:50 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [FormularServlet] in context with path [/Projekt_PSDSD2] threw exception
java.lang.NullPointerException
   at cabadaj.DBmanage.UkladacObjektov.InsertToDatabase(UkladacObjektov.java:31)
   at cabadaj.servlet.FormularServlet.doPost(FormularServlet.java:41)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
a mal by si sa k nemu dostat ak vyhodis z metody pripojSaNaDB tuto vetvu

Kód: Vybrať všetko

catch (SQLException e) {
          // Could not connect to the database
      }
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: java + oracle

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

Snazil som sa to debugovat, aby som ti napisal rozumnu odpoved, ale nedopracoval som sa asi k nicomu rozumnemu, dam sem aspon video z debugovania, hadam to nejako pomoze

http://screencast.com/t/cAUXSVJGxfe6

edit. inak tento isty kod som pouzival predtym s Derby databazou, teraz som len zmenil vsetky atributy zodpovedajuce k Oracle DB, predtym s Derby DB to fungovalo bez problemov

//autoeditácia príspevku (30 Jan 2012, 21:20)
Nakoniec mi s tym pomohol spoluziak. Chyba bola v tom, ze do zlozky kde mam server apache-tomcat-7.0.8\lib\ som musel nakopirovat subor s driverom ojdbc14.jar

Mam este jednu otazku ohladom oracle. Chcem spravit dve pripojenia/databazy na jednom compe, tak aby som sa na mohol pripajat nasledovne:

Kód: Vybrať všetko

connection[0] = DriverManager.getConnection("jdbc:oracle:thin:@adresa1:xe", username, password);
connection[1] = DriverManager.getConnection("jdbc:oracle:thin:@adresa2:xe", username, password);
connection[2] = DriverManager.getConnection("jdbc:oracle:thin:@adresa3:xe", username, password);
teda aby bolo mozne menit iba ip adresu z url, je to mozne a pritom sa pripajat do inych databaz?
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: java + oracle

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

sorry, ze ta neskoro, anyway ak rozbehnes 2 instancie databazoveho servru na jednom PC tak sa budu lysit portom, url nie, viac databaz v ramci jedneho servra ti samozrejme pofrci
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: java + oracle

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

ale URL tiez obsahuje port nie?

ked ma url takyto tvar:

Kód: Vybrať všetko

jdbc:oracle:thin:@127.0.0.1:1521:xe
potom by URL mali iny port, teda jedna instancia by mala 1521 a druha dajme tomu 1599

alebo nemam pravdu? ide o iny port???
Napísať odpoveď