Oracle Probleme mit dem anbinden einer Oracle 10g Datenbank

M4D-M4X

Bekanntes Mitglied
Hi Leute,

und zwar habe ich folgendes Problem:

Ich möchte mein Programm an einer Oracle Datenbank anbinden, die nicht Lokal ist.

Habe bereits den Ora10gClient installiert und mit SQL+ ist eine Verbindung zur Datenbank möglich.

Wenn ich das ganze mithilfe von JDBC mache, klappt es leider nicht, da er mir immer die Meldung:
"No suitable driver found for jdbc😱racle:thin😡IP:1521😀atenquelle"

Ich habe auch schon zum Thema gegoogled aber nichts gefunden, was mir weiterhelfen konnte.

Java:
public class Testclass{
	
	final String DB_URL		= "jdbc:oracle:thin:@192.168.123.84:1521:Datenquelle";
	final String DB_LOGIN		= "Login";
	final String DB_PASSWORD	= "PW";
	final String DB_DRIVER	= "sun.jdbc.odbc.JdbcOdbcDriver";
			
	Connection dbcon = null;
	ResultSet rs = null;

	Testclass(){
		try {
			Class.forName(DB_DRIVER);	

		} catch(java.lang.ClassNotFoundException e) {
			System.err.print("ClassNotFoundException: ");
			System.err.println(e.getMessage());
		}
		
		System.out.println(DB_URL+ "  "+DB_LOGIN + "  " +DB_PASSWORD);
		
		try {
			dbcon = DriverManager.getConnection(DB_URL,DB_LOGIN,DB_PASSWORD);
		} catch(SQLException ex) {
			System.err.println("SQLException: " + ex.getMessage()+"  Hier is der Fehler!");
		}

		
	}

	public static void main(String[] args){
		Testclass blubb = new Testclass();
	}
}

Was ich bereits ausprobiert habe:

URL: jdbc😱dbc😀atenquelle // wirft : "Der Datenquellname wurde nicht gefunden"
DRIVER: oracle.jdbc.OracleDriver //wirft eine ClassNotFoundException

Die classes12.zip sind bereits im Classpath des Projekts.

Ich hoffe mir kann jemand weiterhelfen.
 
Habe mir gerade die oracle.jar gedownloadet und ins classpath Verzeichnis von Java gelegt, die ja in der Umgebungsvariable steht oder?

Funktioniert nur leider immer noch nicht :bahnhof:

Was für ein Treiber ist denn der Richtige?
Habe jetzt auch mehrere im Internet gefunden, aber das funktioniert auch nicht wirklich @_@
 
Habe mir gerade die oracle.jar gedownloadet und ins classpath Verzeichnis von Java gelegt, die ja in der Umgebungsvariable steht oder?
jar-Archive müssen explizit im Classpath angegeben werden, den Classpath nur auf's Verzeichnis setzen reicht nicht aus.

Zu Deinem Problem: In Deinem zuerst geposteten Code passt die url-Angabe nicht zum verwendeten Treiber.

Entweder:
Code:
url = "jdbc:odbc:MeineDatenbank"
driver = "sun.jdbc.odbc.JdbcOdbcDriver"
Dazu muss allerdings die Datenbank als ODBC Datenquelle "MeineDatenbank" auf dem Client eingerichtet sein

Oder:
Code:
url = "jdbc:oracle:thin:@192.168.123.84:1521:Datenquelle"
driver = "oracle.jdbc.driver.OracleDriver"
Vermischen geht nicht. Ich würde empfehlen die 2. Variante zu verwenden, dazu solltest Du einfach nur das oracle.jar korrekt in den Classpath auf nehmen müssen.
 
Okay das ist schon mal sehr gut.

Was ich gerade festgestellt habe, ist, dass ich gar keine Classpath Umgebungsvariable hatte...
Jetzt habe ich eine erstellt und die oracle.jar und die classes12.zip eingetragen.
Leider immernoch erfolglos.

Was gibs da sonst zu machen ?
 
Zuletzt bearbeitet:
Benutzt Du eine IDE wie Eclipse o.ä.? Dort könnte man das jar-File einfach via Build Path einbinden.
Ansonsten über Konsole müsste das in etwa so aussehen:
Code:
java -cp C:\Verzeichnis\oracle.jar HauptKlasseMitMain
In dem Fall muss java aus dem Verzeichnis der HauptKlasseMitMain.class gestartet werden.
Ist allerdings auch schon eine Weile her, dass ich so ein Programm gestartet habe.
 
Ja ich verwende Eclipse.

Habs auch direkt mal ausprobiert und die oracle.jar in eclipse importiert.
Jetzt kann ich auch den import von oracle.jdbc.driver.* durchführen.

Das Problem ist aber, dass die ganze Applikation über Web laufen soll (JSP) und ich mit Eclipse nur den Aufbau zur Datenbank erstellen will, um den Code anschließend zu übernehmen.

Funktioniert schlichtweg immer noch nicht. Es wird immernoch kein richtiger Treiber gefunden.

Ich verwende: dbcon = DriverManager.getConnection("jdbc😱racle:thin😡Datenquelle","Login","PW");

Ist daran evtl etwas falsch ?
 
Habs auch direkt mal ausprobiert und die oracle.jar in eclipse importiert.
Jetzt kann ich auch den import von oracle.jdbc.driver.* durchführen.
Importieren muss man das nicht, im Kontextmenü des Projekts --> Build Path --> Add External jar
Das Problem ist aber, dass die ganze Applikation über Web laufen soll (JSP) und ich mit Eclipse nur den Aufbau zur Datenbank erstellen will, um den Code anschließend zu übernehmen.

Funktioniert schlichtweg immer noch nicht. Es wird immernoch kein richtiger Treiber gefunden.

Ich verwende: dbcon = DriverManager.getConnection("jdbc😱racle:thin😡Datenquelle","Login","PW");
Ich hab leider keine Ahnung, wie man sowas im JSP Umfeld einbindet, damit hab ich mich nie wirklich auseinander gesetzt.
Wie schaut denn die Fehlermeldung aus? Kommt eine ClassNotFoundException? Dann liegt's immer noch daran, dass das jar-File nicht korrekt eingebunden ist.
 
Also eine ClassNotFoundException wird überhaupt nicht ausgegeben, lediglich "No suitable driver was found for jdbc😱dbc😀atenquelle".


Das mit dem import oracle.jdbc.driver.* war nur zur verdeutlichung, dass die .jar jetzt mit eclipse importierbar ist ^^
 
Du hast ja auch keinen ODBC Treiber, sondern einen JDBC Treiber in den Classpath aufgenommen, versuch es doch mal so wie schon oben gezeigt:
Java:
url = "jdbc:oracle:thin:@192.168.123.84:1521:Datenquelle"
driver = "oracle.jdbc.driver.OracleDriver"
 
Okay genauer lesen wäre von Vorteil...😳

Den Treiber scheint er jetzt zu mögen, jedoch wirft er mir komischerweise eine OutOfBoundsException...


Hier mein StackTrace:

Java:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7
	at oracle.security.o3logon.C1.r(C1)
	at oracle.security.o3logon.C1.l(C1)
	at oracle.security.o3logon.C0.e(C0)
	at oracle.security.o3logon.O3LoginClientHelper.getEPasswd(O3LoginClientHelper)
	at oracle.jdbc.ttc7.O3log.<init>(O3log.java:287)
	at oracle.jdbc.ttc7.TTC7Protocol.logon(TTC7Protocol.java:227)
	at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:198)
	at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:251)
	at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:224)
	at java.sql.DriverManager.getConnection(DriverManager.java:582)
	at java.sql.DriverManager.getConnection(DriverManager.java:185)
	at Testclass.<init>(Testclass.java:24)
	at Testclass.main(Testclass.java:33)

Aber wieso eine OutOfBounds? Weiß jemand was da passiert ?


Der Code:

Java:
import java.sql.*;
public class Testclass{
	

	final String DB_URL		= "jdbc:oracle:thin:@192.168.123.84:1521:Datenquelle";
	final String DB_LOGIN		= "Login";
	final String DB_PASSWORD	= "PW";
	final String DB_DRIVER	= "oracle.jdbc.driver.OracleDriver";
			
	Connection dbcon = null;
	ResultSet rs = null;

	Testclass(){
		try {
			Class.forName(DB_DRIVER);	

		} catch(java.lang.ClassNotFoundException e) {
			System.err.print("ClassNotFoundException: ");
			System.err.println(e.getMessage());
		}
		
		try {
			dbcon = DriverManager.getConnection(DB_URL,DB_LOGIN,DB_PASSWORD);
		} catch(SQLException ex) {
			System.err.println("SQLException: " + ex.getMessage());
		}

		
	}

	public static void main(String[] args){
		Testclass blubb = new Testclass();
	}
}
 
Zuletzt bearbeitet:
Wow hat funktioniert :toll:

Besten Dank =)

Jetzt aber noch die Masterfrage 😀

Wie bekomme ich genau das auf mein Webprojekt?

Eine Lokale Verbindung über den Tomcat is kein Problem aber die hier macht mich wahnsinnig 🙁
Wie muss man das .jar dann hier implementieren, damit der Treiber verwendet werden kann?
 
Entweder du installierst die lib in den Tomcat Shared Libs Folder oder aber du packst sie mit ein dein WEBINF/libs fuer deine Anwendung.
 
Ich hab die 2. Variante ausgewählt, also ein WEB-INF Ordner angelegt und unter lib die ojdbc14.jar hineinkopiert.

Wie sieht das ganze dann aus, damit der Tomcat das Umsetzt bzw. drauf zugreift?
Ist da noch was von nöten?

bzw.

Muss ich die .jar nochmal in ein Unterverzeichnis packen und dann sowas machen wie:

<%@ import="Unterverzeichnis.ojdbc14.jar" %>

Entschuldigung für die vielen Fragen, aber bin im Projektstress 😱
Die ganze Geschichte muss bis Freitag stehen ^^.
 
Zuletzt bearbeitet:
Probier es aus... 😉

Laut der Servlet Spezifikation sollten alle jars im WEB-INF/lib folder auch in dem Webapp Classpath sein... Nicht ein extra Unterverzeichniss anlegen. Alle libs direkt in WEB-INF/lib.

Du importierst auch nicht ein Jar, sondern die Klassen, z.B.:

[XML]
<%@ page import="java.sql.*" isThreadSafe="false" %>
[/XML]
 
Zuletzt bearbeitet von einem Moderator:
Ist es dann eigentlich nötig die .jar zu importieren um den Treiber zum laufen zu bringen?

Oder geht das ganz anders als gedacht?

Die importversuche sind auch gescheitert.

Er bring mir immer die Meldung:

Only a type can be imported. oracle.jdbc.driver.OracleDriver resolves to a package

Aber der OracleDriver ist doch ne Klasse?
 
Okay der Import funktioniert astrein.

Ich steh heut einfach nur derb aufm Schlauf 😳

Gerade eben habe ich alles so aufgebaut wie in meiner IDE also:

Java:
<%   
		final String DB_URL		= "jdbc:oracle:thin:@192.168.123.84:1521:Datenquelle";
		final String DB_LOGIN		= "Login";
		final String DB_PASSWORD	= "PW";
		final String DB_DRIVER	= "oracle.jdbc.driver.OracleDriver";
				
		Connection dbcon = null;
		ResultSet rs = null;
		
		Class.forName(DB_DRIVER);
		dbcon = DriverManager.getConnection(DB_URL,DB_LOGIN,DB_PASSWORD);
%>

Jedoch bekomme ich für den Treiber eine Schöne ClassNotFoundException
 
Für welche Klasse?

Wenn du eine Exception hast möglichst auch den Stacktrace mitgeben. Das hilft enorm dein Problem zu analysieren. Und gib mal den gesammten Code deines JSPs mit an.
 
Oh ja klar sry hab ich vergessen.

der Stacktrace:

Java:
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
	org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:128)
	org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:66)
	java.lang.Class.forName0(Native Method)
	java.lang.Class.forName(Unknown Source)
	org.apache.jsp.indextest_jsp._jspService(indextest_jsp.java:194)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


Der Komplette Quellcode ist nichts anderes als ein dynamischer Kalender, also irrelevant und über 300 Zeilen lang.

Der Kalender soll anschließend mithilfe der Datenbank gefüllt werden.

Mir gehts hauptsächlich um die Verbindung ^^
 
Okay das Thema hat sich erledigt...
Die Lösung war zu simpel, als das man drauf kommen könnte xD.

Ich poste Sie heute abend bzw. am Freitag wenn ich keinen Stress mehr hab =)
Ich sag nur... man sollte es sich nicht unnötig kompliziert machen!
Und ein ODBC sollte im System eingerichtet sein ^^

fassy du hast was gut bei mir!
 
Vornherein muss ich sagen, dass ich es nicht geschafft habe das ojdbc14.jar in das Webprojekt mit einzubinden. Ich habe lediglich eine bessere und einfachere Lösung gefunden.

Also mein Problem war:

Ich habe es mir, so wie auch in den meisten Fällen viel zu Umständlich gemacht.

Der Oracle 10g Client wurde vor dem Problem bereits installiert. Dieser installiert ja automatisch den Treiber für eine ODBC Verbindung mit. Das bedeutet, dass ich mir einfach eine ODBC mit dem Installierten 10g Treiber erstellt habe und dann über folgende URL und Treiber die Verbindung aufgebaut habe:

Java:
final String DB_URL = "jdbc:odbc:Datenquelle";

final String DB_DRIVER	= "sun.jdbc.odbc.JdbcOdbcDriver";

Also der ganz normale jdbc😱dbc Treiber.
 
Das ist aber ehrlich gesagt nur eine schlechter Workaround fur dein Problem. Wenn du spaeter mal deine Anwendung verteilen willst musst du auf eine Oracle Client Instalation zurueckgreifen.

ODBC ist veraltet. Eigentlich macht man mittlerweile alles mit JDBC und das einbinden der odbc14.jar ist eigentlich kein Problem. Hatte ich bisher zumindest nie. Im schlimmsten Fall einfach in die Sharedlibs vom Tomcat.
 
Das kann man mal machen, zum Entwickeln und Testen.
Wenn das aber mal produktiv eingesetzt werden soll, würde ich von der ODBC Krücke weg und direkt den original OracleTreiber nutzen.
 
Okay, das was ihr sagt klingt einleuchtend.

Für dieses jedoch eher kleinere Projekt sollte es aber auch eine ODBC Brücke tun.

Das Programm bzw. die Site nutzen im Endeffekt ca. 15 Leute.

Aber ich werde es mir auf jeden Fall merken, und wenn ich mal die Zeit dazu finde, werde ich die Site von der ODBC Bridge weglocken.

Habt ihr vllt. sonst noch generelle Tipps zum Thema JSP bzw. Datenbanken?
 

Zurück
Oben