Verbindungsprobleme mit Oracle Datenbank

tekilla209

Mitglied
Hallo Leutz,

ich habe ein Prog. geschrieben, dass mit den wichtigsten gängigen Datenbanken zusammen funktionieren soll.
Jetzt bin ich dabei die Möglichkeit Oracle zu verwenden einzubauen und bekomme schon bei der Verbindung einige Probleme.

Der folgende Code liefert einen Error, mit dem ich nichts anfangen kann (hab leider keine Ahnung von Oracle)

Code:
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);

driver = "oracle.jdbc.driver.OracleDriver"
url = "jdbc:eek:racle:thin:mad:192.168.0.222:1521"

Der Error:

java.sql.SQLException: Listener refused the connection with the following error:
ORA-12514, TNS:listener does not currently know of service requested in connect descriptor
The Connection descriptor used by the client was:
192.168.0.222:1521

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:380)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:401)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:466)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:839)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
...

2. Frage: Wie kann ich SHOW DATABASES und SHOW TABLES in Oracle realisieren?
ich habe gelesen das geht nicht so ohne weiteres. Wie kann ich überhaupt verschiedene Datenbanken auf einem Oracle Server laufen lassen?


PS:
Ich verwende Oracle Express Edition 10g
 
Moin!
Ich mag mich täuschen, aber fehlt da nicht noch der Datenbankname in der URL?

url = "jdbc:eek:racle:thin:mad:192.168.0.222:1521:databaseName"

*grüssle*
MeinerEiner
 
Danke erstma für die Antwort!

im Prinzip hast Du ja recht, aber ich dachte ich könnte die verbindung est mal so aufbauen und dann ein "SHOW DATABASES" äquivalent benutzen und anschliesent USE databasename machen.

Wie kann ich sehen welche Datenbanken vorhanden sind?
hab bisher nur den Server installiert ohne irgendwelchen Content. Sollte Da nicht immer eine Datenbank namens "system" existieren?
url = "jdbc:eek:racle:thin:mad:192.168.0.222:1521:system" habe ich schon versucht, ging aber auch net.

Wie kann ich in dem Oracle neue Datenbanken anlegen?
Mit dem Webinterface-Teil kann ich Tabellen anlegen aber unter welchem Datenbanknamen finde ich die dann?
 
Wie gesagt, 100% sicher bin ich nicht, aber
das was du willst ist glaub ich nicht so ganz JDBC konform, wird also erstmal nicht untersützt.
Aber eventuell hat dein Orakeltreiber ja ein paar Erweiterungen, die das ermöglichen.
Da musst du mal in die Doku von dem Treiber schauen...

*grüssle*
MeinerEiner
 
Hi,

2. Frage: Wie kann ich SHOW DATABASES und SHOW TABLES in Oracle realisieren?
ich habe gelesen das geht nicht so ohne weiteres. Wie kann ich überhaupt verschiedene Datenbanken auf einem Oracle Server laufen lassen?


Ein Show Database wird so weit ich Oracle verstanden habe, nicht möglich sein. Jede DB ist für sich alleine ein abgeschlossenes System. Um auf die Oracle-DB zu kommen, benötigst Du eine SID (System Identifier), die Du beim Verbindungsaufbau angeben musst.

Ein Show table müsste mit "SELECT * FROM ALL_TABLES" (Oder so ähnlich) möglich sein. Habe derzeit keine Oracle-Instanz, auf der ich es testen kann. Mit dem Statement solltest Du aber alle Tabellen zurück bekommen, auf die der User zugreiffen kann (Sowohl die eigenen wie auch die Tabellen anderer User, für die du entsprechende Rechte wie SELECT erhalten hast.
Alle Tabellen in der DB sind in der Tabelle DBA_TABLES enthalten. Diese Tabelle gehört aber dem Benutzer SYS und ist in der Regel für Benutzer nicht lesbar.

Hoffe damit geholfen zu haben. Sollte ich daneben liegen, würde ich mich über eine entsprechende Rückmeldung freuen.
 
Danke nochmal für eure Antworten!

Habs jez endlich gerafft. Aber...
So wie ich das verstanden habe gibt es doch nur eine DB pro Server?
Wozu also den Datenbanknamen angeben, wenn doch sowieso nur eine DB existiert?
 
Zuletzt bearbeitet:
Also doch wie bei MySQL nur dass es kein "SHOW DATABASES" und auch kein "USE" gibt?
Geht wahrscheinlich nur nicht bei XE, hab zumindest nicht gefunden wo...
 
Hallo,

ja bei Oracle XE gibts die Einschränkung, dass man nur eine Datenbankinstanz auf einem Rechner betreiben kann:
...
The third limit is that only a single XE database can run on any given computer. The important point here is that you don't need a database for each application you create, as you might for some competing databases. Instead, Oracle uses the concept of schemas to separate applications...

http://www.oracle.com/technology/pub/articles/cunningham-database-xe.html

Gruß Tom
 
Hi an alle,

wollte per Java auf meine Oracle Database 10g Express zugreifen, jedoch tritt immer wieder ein Fehler auf könnte mir jemand vielleicht weiterhelfen...?

lg


Code:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import oracle.jdbc.OracleDriver;

class hr
{
	public static void  main(String args[]) 
	{

        try 
        {
        		DriverManager.registerDriver(new OracleDriver());
        }
        catch (SQLException e)
        {
        	System.err.println ("ERROR: Could not register the driver! Exiting ..");
        	e.printStackTrace();
        	Runtime.getRuntime().exit(1);
        }	
        // 1. JDBC-Treiber laden
       // Class.forName("oracle.jdbc.OracleDriver").newInstance();
       

        // Connect zur thinDriver
        Connection thinDriverConnection  = null;
        try
        {
         	  String thinDriverURL = "jdbc:oracle:thin:@remote_machine:1521:remote_xe";
          	  thinDriverConnection = DriverManager.getConnection(
         			  thinDriverURL, "hr", "fenerium");
        }
        catch (SQLException e)
        {
           	System.err.println ("ERROR: Could not register the driver! Exiting ..");
           	e.printStackTrace();
           	Runtime.getRuntime().exit(1);
        }
        finally
        {
        	try
        	{
        		if (thinDriverConnection != null)
        			thinDriverConnection.close();
        	}
        	catch (SQLException ignore) {}
        }
        
        String connectDescriptor = "(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = " +
        		"(PROTOCOL = TCP)(HOST = remote_machine)(PORT = 1521)))(CONNECT-DATA =" +
        		"(SID = REMOTE_XE)))";
        
        //thin Driver connection using a connect descriptor
        try
        {
        	String thinDriverConnectDescriptorURL = "jdbc:oracle:thin:@" + connectDescriptor;
        	
        	thinDriverConnection= DriverManager.getConnection(
       			  thinDriverConnectDescriptorURL, "hr", "fenerium");
        }
        catch (SQLException e)
        {
        	// handle the exception properly -  in this case, we just 
        	// print a message and stack trace and exit the application
           	System.err.println ("ERROR: Could not register the driver! Exiting ..");
           	e.printStackTrace();
           	Runtime.getRuntime().exit(1);
         }
         finally
         {
        	 try
             {
        		 if (thinDriverConnection != null)
                 thinDriverConnection.close();
             }
        	 catch (SQLException ignore) {}
         }        	

         
         // OCI driver connection using a connect descriptor
         Connection ociDriverConnection = null;
         try
         {
         	String ociDriverURL = "jdbc:oracle:oci:@remote_xe"; 
         				         	
         	ociDriverConnection= DriverManager.getConnection(
        			  ociDriverURL, "hr", "fenerium");
         }
         catch (SQLException e)
         {
         	// handle the exception properly -  in this case, we just 
         	// print a message and stack trace and exit the application
           	System.err.println ("ERROR: Could not register the driver! Exiting ..");
           	e.printStackTrace();
           	Runtime.getRuntime().exit(1);
          }
          finally
          {
         	 try
              {
         		 if (ociDriverConnection != null)
                  ociDriverConnection.close();
              }
         	 catch (SQLException ignore) {}
          }    
         
          
          //OCI driver connection using a connect descriptor
          try
          {
        	  String ociDriverConnectDescriptorURL = "jdbc:oracle:oci:@" 
         				+ connectDescriptor;
         	
        	  ociDriverConnection= DriverManager.getConnection(
        			  ociDriverConnectDescriptorURL, "hr", "fenerium");
          }
          catch (SQLException e)
          {
        	  // handle the exception properly -  in this case, we just 
        	  // print a message and stack trace and exit the application
        	  System.err.println ("ERROR: Could not register the driver! Exiting ..");
           	  e.printStackTrace();
           	  Runtime.getRuntime().exit(1);
          }
          finally
          {
         	 try
              {
         		 if (ociDriverConnection != null)
                  ociDriverConnection.close();
              }
         	 catch (SQLException ignore) {}
          }        	
	}
 

Neue Beiträge

Zurück