java-oracle problem

Discussion in 'PC konfiguracije, notebook računari, servis' started by Surveyor, Jun 14, 2010.

  1. Surveyor

    Surveyor Novi član

    Imam instaliranu Oracle Database 10g Express Edition bazu na koju pokušavam da se konektujem iz java aplikacije koju pravim. Do sada što se tiče baza sam samo radio sa MySql i koliko sam do sad skontao, oracle je puno komplikovanija priča.
    Code koji je problem je sljedeći:
    Code:
    Connection connection = null;
    		try {
    			Connection con = null;
    			Class.forName("oracle.jdbc.driver.OracleDriver");
    			con = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:8080:xe", "system", "123456");
    			System.out.println("konekcija uspješna.");
    			con.setAutoCommit(false);
    			Statement stmt = con.createStatement();
    			stmt.executeQuery("CREATE TABLE sales AS SELECT id, SDO_GEOM.SDO_BUFFER(b.location, 0.25, 0.5, 'arc_tolerance=0.005 unit=mile') geom FROM branches b");			
    			stmt.close();
    			System.out.println("Ok.");
    			con.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    
    greška je:
    java.sql.SQLException: Io exception: Got minus one from a read call
    	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:124)
    	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:161)
    	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:273)
    	at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:327)
    	at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:360)
    	at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:150)
    	at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:31)
    	at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:595)
    	at java.sql.DriverManager.getConnection(Unknown Source)
    	at java.sql.DriverManager.getConnection(Unknown Source)
    	at oracle.mainOracle.main(mainOracle.java:15)
    
    Provjerio sam sid = xe.
    Listener sluša port 8080.
    Bazi mogu da pristupim preko oracle verzije phpMyAdmin-a.
    Probao sam da se konektujem i iz php-a, ali tamo imam problem što uspijem da se konektujem ali kada pošaljem upit, kaže mi da tabela ne postoji (bilo koju vrstu upita da pošaljem, a tabela postoji 100%).
    Tražio sam pomoć na više mjesta, svi kažu da uradim što sam već uradio... pa ako ko zna ovdje bio bih zahvalan.

    edit:
    AKo šta pomaže, kada promjenim ip adresu npr. na 127.0.0.2 dobijem sljedeću grešku:
    Code:
    java.sql.SQLException: Io exception: The Network Adapter could not establish the connection
    	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:124)
    	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:161)
    	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:273)
    	at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:327)
    	at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:360)
    	at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:150)
    	at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:31)
    	at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:595)
    	at java.sql.DriverManager.getConnection(Unknown Source)
    	at java.sql.DriverManager.getConnection(Unknown Source)
    	at oracle.mainOracle.main(mainOracle.java:13)
    
    Što po meni znači da sa ispravnom adresom ipak uspostavi neki kontakt sa bazom...
     
  2. BoLa

    BoLa Aktivista

    -mislim da ti nije nasao driver.

    Napisi ovo:
    try {
    Class.forName ("oracle.jdbc.driver.OracleDriver");
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    }

    umjesto :
    Class.forName("oracle.jdbc.driver.OracleDriver");
     
  3. syss

    syss Veteran foruma

     
  4. Surveyor

    Surveyor Novi član

    Hvala vam na odgovoru.
    @BoLa
    Uradio sam kako si mi rekao, i dobio istu grešku:
    Code:
    java.sql.SQLException: Io exception: Got minus one from a read call
    	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:124)
    	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:161)
    	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:273)
    	at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:327)
    	at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:360)
    	at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:150)
    	at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:31)
    	at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:595)
    	at java.sql.DriverManager.getConnection(Unknown Source)
    	at java.sql.DriverManager.getConnection(Unknown Source)
    	at oracle.mainOracle.main(mainOracle.java:17)
    
    @syss
    probavao sam ranije sa portom 1521, tada dobijem sljedeću grešku:
    Code:
    java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
    ORA-12705: Cannot access NLS data files or invalid environment specified
    
    	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:124)
    	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:315)
    	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:276)
    	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:271)
    	at oracle.jdbc.driver.T4CTTIoauthenticate.receiveOauth(T4CTTIoauthenticate.java:646)
    	at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:307)
    	at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:360)
    	at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:150)
    	at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:31)
    	at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:595)
    	at java.sql.DriverManager.getConnection(Unknown Source)
    	at java.sql.DriverManager.getConnection(Unknown Source)
    	at oracle.mainOracle.main(mainOracle.java:17)
    
    Provjerio sam i da li slušaju port:
    Code:
    LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 14-JUN-2010 16:56
    :25
    
    Copyright (c) 1991, 2005, Oracle.  All rights reserved.
    
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE)))
    STATUS of the LISTENER
    ------------------------
    Alias                     LISTENER
    Version                   TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
    ction
    Start Date                14-JUN-2010 16:17:46
    Uptime                    0 days 0 hr. 38 min. 38 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Default Service           XE
    Listener Parameter File   C:\oraclexe\app\oracle\product\10.2.0\server\network\a
    dmin\listener.ora
    Listener Log File         C:\oraclexe\app\oracle\product\10.2.0\server\network\l
    og\listener.log
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC_FOR_XEipc)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=phenom8750)(PORT=1521)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=8080))(Presentation=HTTP)(Session=RAW))
    Services Summary...
    Service "CLRExtProc" has 1 instance(s).
      Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
    Service "PLSExtProc" has 1 instance(s).
      Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
    Service "XEXDB" has 1 instance(s).
      Instance "xe", status READY, has 1 handler(s) for this service...
    Service "XE_XPT" has 1 instance(s).
      Instance "xe", status READY, has 1 handler(s) for this service...
    Service "xe" has 1 instance(s).
      Instance "xe", status READY, has 1 handler(s) for this service...
    The command completed successfully
    
    Tabelu sam importovao iz .DMP file-a, koristeći system korisnika, pomoću imp komande u cmd-u.
    Stvarno nemam pojma šta bi moglo da bude...
     
  5. syss

    syss Veteran foruma

     
  6. BoLa

    BoLa Aktivista

    Mislim da ti nije dobro instaliran driver za oracle tje ne moze da ga nadje.

    Probaj ubaciti driver u classpath(classes12.zip ? ).
     
  7. Surveyor

    Surveyor Novi član

    @syss
    prmijenio sam port, promijenio u registry-ju vrijednosti NLS_LANG varijable. Samo što je kod mene bilo na dva mjesta da se promjeni. Pokušam ponovo, ista greška. Pobrišem skroz iz registry-ja te varijable-opet ista greška. Pogledam u init.ora, u njemu se nigdje ne spominje.
    Pošaljem upit SELECT * FROM NLS_SESSION_PARAMETERS;
    i dobijem
    Code:
    PARAMETER	VALUE
    NLS_LANGUAGE	AMERICAN
    NLS_TERRITORY	AMERICA
    NLS_CURRENCY	$
    NLS_ISO_CURRENCY	AMERICA
    NLS_NUMERIC_CHARACTERS	.,
    NLS_CALENDAR	GREGORIAN
    NLS_DATE_FORMAT	DD-MON-RR
    NLS_DATE_LANGUAGE	AMERICAN
    NLS_SORT	BINARY
    NLS_TIME_FORMAT	HH.MI.SSXFF AM
    NLS_TIMESTAMP_FORMAT	DD-MON-RR HH.MI.SSXFF AM
    NLS_TIME_TZ_FORMAT	HH.MI.SSXFF AM TZR
    NLS_TIMESTAMP_TZ_FORMAT	DD-MON-RR HH.MI.SSXFF AM TZR
    NLS_DUAL_CURRENCY	$
    NLS_COMP	BINARY
    NLS_LENGTH_SEMANTICS	BYTE
    NLS_NCHAR_CONV_EXCP	FALSE
    
    Koliko sam skontao imaju 3 nivoa ovih NLS-ova. Prvi je na nivou sistema, drugi na nivou instance a treći na nivou sesije.
    Probao sam u cmd-u: set NLS_LANG=CROATIAN_CROATIA.EE8MSWIN1250, nema promjene.

    @BoLa
    Dodao sam klasu pravilno, evo za svaki slučaj sam napravio funkciju za kontrolu:
    Code:
    public static boolean imaLiKlase (String imeKlase){
    	try {Class.forName (imeKlase);return true;}
    	catch (ClassNotFoundException exception) {return false;}
    	}
    
    vrati true ako upišem oracle.jdbc.driver.OracleDriver, false ako namjerno pogriješim.

    Hvala vam ljudi na trudu
     
  8. BoLa

    BoLa Aktivista

    Ne znam fakat, ja radim sa PostgreSql+JDeveloper nikad problema nisam imao sa necim ovakvim. Samo dodas u libraries class path do .jara drivera napravim novu konekciju, i pichi.

    Koji IDE koristis?
     
  9. Surveyor

    Surveyor Novi član

    Riješen problem :D
    Koristim eclipse, mada planiram da ovo uradim u netBeans-u, eclipse više koristim ovako za istesirat nešto.
    Kontao sam ako već ne mogu da promjenim te teritorijalno-jezičke postavke baze, da probam da svoj program prilagodim njima.
    U code sam samo dodao
    Code:
    import java.util.Locale;
    i
    Code:
    Locale.setDefault(Locale.ENGLISH);
    i konektovao sam se bez problema :D .
    Sad me jedino interesuje podrška za naše znakove, pošto je sve prilagođeno engleskom.
    Koliko sam se napatio oko ovoga, znam da je traljavo riješenje (bolje bi bilo da sam promjenio NLS baze), ali mi je drago što sam konačno uspjeo da uspostavim konekciju.

    Hvala ljudi puno na pomoći
     
  10. syss

    syss Veteran foruma

    ovo je zadnje ljubavno pismo što ti šalje kolega, otisnuo se u beli svet :)