Classpath Datenbank ... nur wo?

fisch100

Mitglied
Eigentlich ist der Fehler scheinbar simpel aber doch ... ich hab nichts gefunden (Forumsuche, und im Handbuch der Java-Programmierung und paar andere Seiten...)

es geht darum: ich hab meine Klassen alle an einem Ort (wie ungewöhnlich 😉 )
und möchte nun eine Datenbank (in meinem Fall ne Access DB - mdb) verwenden ->

nur hab ich das Probelm das ich den Vollständigenpfad(?! oder sogar direkt per Hosting) angebenmuss????

da es aber portable sein muss ... ist das eigentlich dumm ... und ich möchte jz nur wegen dem nicht ins internet stellen ... (wo das problem von nonSQL ist das man nur lesen kann ... soll aber jetzt nicht das Problem sein)

folgenden COde hab ich (jaja der standard code 😉 ):

Java:
try
      {
        //laden der Treiberklasse
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        //zurückgeben der neuen Verbindung
        Connection con = DriverManager.getConnection("jdbc:odbc:Datenbank");
      }
      catch(Exception e)
      {
        System.out.println(e);
      }

Fehler: java.sql.SQLException: [Microsoft][ODBC Driver Manager] Der Datenquellenname wurde nicht gefunden, und es wurde kein Standardtreiber angegeben

Treiber sollte doch passen ... also bleibt nur der Datenpfad .. wie oben schon beschieben ...


vielen dank schon mal =)
 
Ist die Datenbank unter dem Namen "Datenbank" als ODBC Datenquelle im Betriebssystem eingetragen?
Alternativ:
Java:
Connection c = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=c:/datenbank.mdb");
Gilt für Access 97 Datenbank. Für höhere Versionen müsste ich jetzt auch erst einmal im Internet suchen.
 
danke für die schnellen antworten =)

das mit mysql war mir schon klar ... das löst mein problem aber auch nicht ...

ebenso wie
Ist die Datenbank unter dem Namen "Datenbank" als ODBC Datenquelle im Betriebssystem eingetragen?
Alternativ:
Java Code: Quelltext in neuem Fenster öffnen

1



Connection c = DriverManager.getConnection("jdbc😱dbc😀river={Microsoft Access Driver (*.mdb)};DBQ=c:/datenbank.mdb");

Gilt für Access 97 Datenbank. Für höhere Versionen müsste ich jetzt auch erst einmal im Internet suchen.

wobei ich denke (ich bin gerade nicht zuhause) dass ich bei dem versuch das ganze so anzugeben einen fehler bekommen hab bezüglich "die länge des datenpfades ist zu lange" - jedoch benötige ich hier wieder den vollständigen pfad des ortes wo das programm sich befindet ... was es zwar nicht daran hindert auf anderen computern zu arbeiten ... jedoch in der portabilität einschränkt ...
gibt es keinen weg darum .. oder muss ich vor dem programm start immer den aktuellen pfad setzten ... damit das programm weiß wo ich mich befinde?
 
ja klar ... nur wie soll ich das mit der datenbank verbinden ... normal geht ja alles aus der java-datei auf relativenpfad (sofern nicht als absolut angegeben)

deswegen wundert es mich ja das es nicht geht einfach mit :"Dateiname" ...
 
Pfade kann man auch "herausfinden" :

Java:
System.out.println(new File("").getAbsolutePath());


EDIT:

Hatte aus dem falschen Schnipped kopiert. Nun ist es richtig.
 
Zuletzt bearbeitet:
Der relative Pfad geht nicht von der Datei sondern von dem Arbeitsverzeichnis aus.

Wenn du das über eine IDE startest, dann kann man den festlegen.

Sonst da wo java ausgeführt wird
 
Werd das dann zuhause ausprobieren - und es wird gehn 😉

@nrg warum kein jdbc-odbc Brigde ?!
ich mein mir ist es egal da es jetzt nichts "besonderes" können muss -> was wird sonst vorgeschlagen? (einzige vorraussetztung sollte ein einfaches eintragen in die tabelle sein 😉 )
 
1. Ein Testprojekt anlegen
2.folgenden code einsetzen und compilieren:
Java:
public static void main(String[] args){
System.out.println(new File("").getAbsolutePath());
}

3.ergebnis anschauen und drüber nachdenken

4. Schlussfolgern, das diese anweisung mir genau den Pfad nennt aus dem das Programm gestartet wird. Starte ich also das Programm über eine Batsh oder eine Executable-JAR wird mit das Verzeichniss der Batsh/JAR zurückgegeben.

5. Den String nehmen und als Datenbankpfad einsetzen.

6. Glücklichsein das es funktioniert und eine Portierbare Anwendung haben.
 
das mit dem absoluten pfad funktioniert wunderbar -> VIELEN DANKE =)

jedoch behebt es noch immer nicht mein problem :/

hab nun die try-catch aufgetrennt um genau festzustellen wer nun wirklich den fehler verursacht:

Java:
try
{
//laden der Treiberklasse
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(Exception e)
{
System.err.println("Treiber: " + e);
}
try
{
//zurückgeben der neuen Verbindung
Connection con = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=D:/Datenbank.mdb");
}
catch(SQLException e)
{
System.err.println(e.toString());
System.err.println("SQL-State: " + e.getSQLState());
System.err.println("ErrorCode: " + e.getErrorCode());
e = e.getNextException();
}

Fehler:
java.sql.SQLException: [Microsoft][ODBC Driver Manager] Der Datenquellenname wurde nicht gefunden, und es wurde kein Standardtreiber angegeben
SQL-State: IM002
ErrorCode: 0

unter dem sql-state findet sich genau das selbe was er in der fehler zeile schreibt: irgendwas mag er an der quelle nicht -> hab dafür auch extra es direkt auf "D:/Datenbank.mdb" gegeben .. was keinen unterschied macht -.-

ich versteh echt nicht was da falsch ist ... ich denke/dachte ich muss NICHT in der verwaltung das ODBC eintellen (sonst wäre es ja auch nicht portabel)
 
wenn ich im ODBC bei access auf konfigurieren gehe .... gekomm ich den fehler:
"Die Setup-Routinen für den Microsoft Access Driver (*.mdb) ODBC-Treiber konnten nicht gefunden werden. Installieren Sie den Treiber erneut."

"Fehler gefunden:
Der angegebene DSN weist eine nicht übereinstimmende ARchitektur von Treiber und Anwednung auf."

... liege ich mit der Vermutung richtig das ich weden dem die ganze Zeit meinen Fehler suche (abgesehen davon das ich noch andere Fehler/Probleme hatte 😉 )
 
ich hab keine ahnung mehr was ich machen soll -.-

hab mich jetzt an h2 versucht - das problem löst sich noch immer nicht - jedoch bekomme ich nun einen anderen fehler:

Treiber: java.lang.ClassNotFoundException: org.h2.Driver
java.sql.SQLException: No suitable driver found for jdbc:h2:~/test/test1
SQL-State: 08001
ErrorCode: 0

verwendeter code:
Java:
      try
      {
        //laden der Treiberklasse
        Class.forName("org.h2.Driver");
      }
      catch(Exception e)
      {
        System.err.println("Treiber: " + e);
      }
      try
      {
        //zurückgeben der neuen Verbindung
        Connection con = DriverManager.getConnection("jdbc:h2:~/test/test1", "sa", "");
      }
      catch(SQLException e)
      {
        System.err.println(e.toString());
        System.err.println("SQL-State: " + e.getSQLState());
        System.err.println("ErrorCode: " + e.getErrorCode());
        e = e.getNextException();
      }

hoffe jemand hat eine ahnung woran das liegt ... aber inzwischen bezweifel ich dass es meine dummheit ist (oder doch?)
 
Dachte eigentlich dass das nicht nötig wäre - hab das mal angegeben also C:\....\H2\h2-1.3.155.jar

tut sich aber leider auch nichts =(

kann es sein das ich nur den "DB-erzeuger/server" davon hab?!
hab eigentlich erwartet das es gleich mitkommt der driver

EDIT: ok ... das mit dem pfad hab ich glaub ich jetzt verstande xD ... -> C:\....\H2\bin
wo dann weiters org\h2\ ist ... nur kein Driver .. nur build ...
 
Zuletzt bearbeitet:
Ich hab leider noch immer keine Lösung gefunden 🙁
und auch leider absolut keine Ahnung mehr was ich machen/google soll,

bei access vermute ich ja das es daran liegt das der Treiber etwas hat da er einen Fehler in ODBC ausgibt,
deswegen (und wiel nrg meinte ich soll die finger davon lassen) wollt ich dann h2 versuchen -> nach dem erstellen der DB bekomm ich nun den Fehler mit dem Driver
hab schon fast jedes verzeichnis ausprobiert in die CLASSPATH zu geben (es sollte doch h2\bin\h2."version".jar sein ?!)
 
Ich kenne den Java Editor leider nicht, aber vilt. könntest du ja testweise mal auf Netbeans 7.0 umsteigen und dort schauen ob du besser zurecht kommst?

Netbeans kann Datenbankquellen Automatisch anlegen und wenn du die Trieber importiert hast, ist das alles nur noch Klicki Klicki Bunti über ein Menü.

Also ich bin mittlerweile von Eclipse vollkommen weg und Nutze nur noch Netbeans, es ist nur angenehm und einfach.

Leider kann ich dir bei deinem H2 Problem nicht helfen, von H2 hab ich keine Ahnung :/
 
noch zu dem punkt jdbc-odbc bridges: die schnittstelle geht über mehrere schichten, an denen verschiedene hersteller beteiligt sind. das ganze führt zu mehrmaligen parsen, overhead und ist ziemlich fehleranfällig. die geschwindigkeit und funktionsfähigkeit ist sehr von der systemumgebung abhängig. wenn du ein programm schreibst, das auf einer kiste laufen soll, wäre das eine überlegung (wobei ich das selbst dann nicht nehmen würde) aber in anderen fällen würde ich die finger davon lassen.

zu deinem problem mit dem buildpath:http://www.java-forum.org/ides-tools/63338-eclipse-javaeditor.html vllt hilft das
ansonsten egal wie ich google ich komm immer bei eclipse raus 🙂. ich nutze selbst auch eclipse und da haste ne jar dem classpath mit paar klicks hinzugefügt (vllt wäre eine andere ide eine überlegung - ausser eclipse und netbeans gibt es ehrlich gesagt für mich keine wirkliche alternative). bei deiner fertigen jar steuerst du das dann mit der manifest.mf (jar mit winrar oder so öffnen und die manifest editieren) dazu kuck mal hier (der post von mir am ende) http://www.java-forum.org/java-basics-anfaenger-themen/118319-java-kommandozeile-starten-jar-libraries.html
 
Vielen Danke!!!

Es geht jetzt sowohl im JavaEditor als auch in der jar Datei =) (mit h2)

Hab mir aber auch nun Netbeans installiert: es ist zwar eine umgewöhnung aber es liefert VIEL mehr informationen - was besonders für einen noch nicht so erfahrenen "Programmierer" (das ist das erste mal in einem Leben das ich mich als soetwas bezeiche 😉 ) wie mich praktisch ist.

Nur ist die frage nun ... wo gebe ich hier die .jar ein=?
bzw -> ich hab direkt in netbeans eine datenbank (persistence - database schema) hinzugefügt
mit der jdbc:derby und hab dann ne Table hinzufügt ...
aber ich bekomm trotzdem nen fehler das kein driver da ist?!

wäre toll wenn ich das hier auch noch hinbekomm - da er mir schon jetzt sehr sympatisch ist

und so am rande: wie handhabt ihr (bzw sollte ich mit meinen normalerweiße gerade mal 5class datein) das ordnermanagment? ich finde das (zumindest jetzt) etws seltsam mit den ordnern

hab da jz:
projekt
->build
->nbproject
->src

finde das für meine zwecke etwas overkill?

EDIT: das mit dem .jar file hab ich gerade gefunden und ge geht auch (über h2)
 
Zuletzt bearbeitet:
Die Ordnerstruktur würde ich so lassen, Projekte werden irgendwann auch mal größer und die Struktur unterleigt gewissen Konventionen.

Wenn du bei anderen Projekten wie z.B. Webapplikationen mal Hilfe brauchst ist die Ordnerstruktur echt entscheident.

Also nutze Netbeans Automatismen 😉
 

Neue Themen


Zurück
Oben