Toon posts:

ODBC koppeling via Vast path in JAVA na MS-Acces Databank

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

Ik heb een applicatie geschreven in java die gebruikt maakt van een ODBC verbinding en dit werkt goed (Maakt gebruik van DNS), Nu wil ik hem echter op mijn werk inzetten maar kan hier geen gebruik maken van de ODBC-verbinding via dns omdat deze door systeembeheer niet aangemaakt wordt.

Nu heb ik gelezen dat je ook de databank kunt benaderen via het Path. Echter dit geeft bij mij (op de laptop dus met volledige rechten) de volgende foutmelding.

De naam van de gegevensbron is niet gevonden en er is geen standaardstuurprogramma opggeven.

Ik gebruik Jbuilder 6 en de daarbij behoorende JDK 1.3.1

de debugger geeft aan dat ik de volgende url probeer te laden:
"jdbc:odbc:Driver={Microsoft Access Driver(*.mdb)};DBQ=c:\weetikhet.mdb"

Ik gebruik de volgende code (deze heb ik in verschillende forums en internetpagina's gevonden)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public String connect() throws SQLException
  {

  try
    {
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    }
    catch (ClassNotFoundException e)
    {
      System.out.println("Error"+e);
    }

    String dbpath="c:\\weetikhet.mdb";
    String url = "jdbc:odbc:Driver={Microsoft Access Driver(*.mdb)};dbpath="+ DBPAD;
    connect =java.sql.DriverManager.getConnection(url,"","");

    if(connect !=null)
    {
      stmt = connect.createStatement();
      return url;
    }
    else
      return null;
  }


Ik zie echt niet meer waar nu de fout zou kunnen zitten, het path heb ik regelmatig gecontroleerd en ook al andere locaties geprobeert.

[ Voor 9% gewijzigd door Verwijderd op 19-07-2005 10:22 ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
www.connectionstrings.com

en daar de OLE DB connectiestring voor MS Access kiezen.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10-2025
waarom zou die dat moeten doen?, alleen een antwoord blaten zonder uitleg is niet echt helpvol.

Ikzelf heb tot nu toe alleen de borland classes gebruikt om verbinding te maken met een ms-acces database in java.

Ik zie wat jij vergeten bent, je moet een default connection type opgeven. Zie de dns string hieronder...

Je kunt ook met borland eerst verbinding maken en dan de native java classes gebruiken voor de rest.
Het enigste wat je nodig hebt is een object van het type Connection.
Vandaaruit kun je dan verder breien.

Dit gaat dan ongeveer als volgt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
//heb je nodig
import com.borland.dx.sql.dataset.*;


private Database database1 = new Database();
private Connection con;

 database1.setConnection(new ConnectionDescriptor(
                "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)}; Dbq="+currentDir+"\\vragenDB.mdb;   "+
                "Uid=; Pwd=;", "", "", false,
                "sun.jdbc.odbc.JdbcOdbcDriver"));
        con = (this.getDatabase()).getJdbcConnection();


Dit is zomaar even de code op een rij. Als je wilt weten wat de currentdir is van je applicatie (omdat je daar je database in wilt gooien misschien dan kun je weer.

String currentDir = System.getProperty("user.dir");

gebruiken.

[ Voor 9% gewijzigd door D-Raven op 19-07-2005 10:41 ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
D-Raven schreef op dinsdag 19 juli 2005 @ 10:40:
waarom zou die dat moeten doen?, alleen een antwoord blaten zonder uitleg is niet echt helpvol.
Met dat antwoord heb je een betere connectiestring, en staan er voorbeeldeelden bij. Het is imho niet een geval van blaten. Het is dat de site geen directe links ondersteund, anders had ik die erbij gegeven. Misschien was wat meer uitleg op z'n plaats geweest, maar ik ging ervan uit dat de link genoeg info zou geven.

[ Voor 13% gewijzigd door P_de_B op 19-07-2005 10:55 ]

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
Oke zeker de current dir is intressant want daarmee heb ik toch weer een variable path. net zoals met internet links :*) .

De import com.borland.dx.sql.dataset.*; zit niet standaard bij mij in Jbuilder 6 maar zal dadelijk eens gaan zoeken of ik deze kan vinden.

Maar heb weer hoop ;)

(Jbuilder personal versie dus die staan uit, vanavond maar eens na Foundation 2005 gaan kijken misschien zitten ze daar wel in :| )

[ Voor 19% gewijzigd door Verwijderd op 19-07-2005 11:19 ]


  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10-2025
Verwijderd schreef op dinsdag 19 juli 2005 @ 10:59:
Oke zeker de current dir is intressant want daarmee heb ik toch weer een variable path. net zoals met internet links :*) .

De import com.borland.dx.sql.dataset.*; zit niet standaard bij mij in Jbuilder 6 maar zal dadelijk eens gaan zoeken of ik deze kan vinden.

Maar heb weer hoop ;)

(Jbuilder personal versie dus die staan uit, vanavond maar eens na Foundation 2005 gaan kijken misschien zitten ze daar wel in :| )
Je hebt niet persee die borland dingen nodig, je hebt alleen een goede connection string nodig.
Volgens mij mis je een ; in je string en moet het zoiets worden.

"jdbc:odbc:Driver={Microsoft Access Driver(*.mdb)};dbpath="+ DBPAD + ";";

[ Voor 18% gewijzigd door D-Raven op 19-07-2005 11:39 ]


  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10-2025
P_de_B schreef op dinsdag 19 juli 2005 @ 10:52:
[...]


Met dat antwoord heb je een betere connectiestring, en staan er voorbeeldeelden bij. Het is imho niet een geval van blaten. Het is dat de site geen directe links ondersteund, anders had ik die erbij gegeven. Misschien was wat meer uitleg op z'n plaats geweest, maar ik ging ervan uit dat de link genoeg info zou geven.
:) Het ging mij erom dat je een link plaatste zonder uitleg. Das niet echt handig als iemand iets voor connectionstrings zoekt via de search ;)

Blaten was misschien een verkeerde woordkeuze van mij, excuses.

Verwijderd

Topicstarter
D-Raven schreef op dinsdag 19 juli 2005 @ 11:31:
[...]


Je hebt niet persee die borland dingen nodig, je hebt alleen een goede connection string nodig.
Volgens mij mis je een ; in je string en moet het zoiets worden.

"jdbc:odbc:Driver={Microsoft Access Driver(*.mdb)};dbpath="+ DBPAD + ";";
Ja ik had zo ie zo een stom foutje gemaakt met het overtype van de code dus hier even de nieuwe code die ik nu gebruik

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public String connect() throws SQLException
  {

  try
    {
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    }
    catch (ClassNotFoundException e)
    {
      System.out.println("Error"+e);
    }

    String dbpath="weetikhet.mdb";    // Databank ook in de root van de applicatie gezet ;-)
    String currentdir=System.getProperty("user.dir"); 
    String url = "jdbc:odbc:Driver={Microsoft Access Driver(*.mdb)};dbq="+currentdir+ dbpath;
    connect =java.sql.DriverManager.getConnection(url,"","");

    if(connect !=null)
    {
      stmt = connect.createStatement();
      return url;
    }
    else
      return null;
  }


De aanpassing met van ";" had geen effect.

De DriverManager.getConnection staat voor de drivër en dan 2 keer "" omdat ik geen UID heb en ook geen Password. ( geselecteerd uit uitschuiflijst van de EDI)

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10-2025
loop eens met de debugger erdoorheen en kijk een welke waarde currentdir nu heeft, en verifieer dat je database in die directory staat.
Als je je afvraagt of die dubbel slashes in de currentdir string wel kloppen... ja, 1 slash is een escape char dus daarom zet die er 2 neer.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Toch kun je wel beter de OLE DB driver gebruiken, die is een stuk sneller dan de oude ODBC driver :)

Oops! Google Chrome could not find www.rijks%20museum.nl


  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10-2025
Dat is waar :)

Verwijderd

Topicstarter
Die OLE DB driver werkt via Jet en ik weet niet of dat hier werkt standaar (hebben windows 2000 met netframework), ook heb ik nergens een voorbeeld gevonden hoe ik de Jet kan aanroepen via java (dit heb ik alleen ooit gedaan met ASP omdat ik toen ook niet via de gewonen ODBC het werkent kreeg)

Ik heb de code in de debugger bekeken en het path over genomen in mijn run (als ik dan draai wordt de databank geopend) dus daaruit stel ik dan ook dat het path werkt

Het raren is dat op dit topic dezelfde code staat

[rml][ BC3] [ Java] en ODBC in windhoos[/rml]

en ook hier is er discussie of die code nu wel of niet werkt.

En dit forum biedt ook de oplossing

[rml][ Java] Connectie met DB[/rml]

Op het einde staat er dat het werk en ik zie geen verschil met die van mij :'(

[ Voor 14% gewijzigd door Verwijderd op 19-07-2005 12:54 ]


  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10-2025
Heb je een ODBC registratie gemaakt in je datasources van windows ?? (dus *.mdb koppelen aan ODBC driver)

Verwijderd

Topicstarter
D-Raven schreef op dinsdag 19 juli 2005 @ 16:30:
Heb je een ODBC registratie gemaakt in je datasources van windows ?? (dus *.mdb koppelen aan ODBC driver)
Hoe bedoel je precies ? dit kan ik even niet volgen.

Wat ik wel eerst heb geprobeerd is gewoon een DNS aan te maken! dus databank via configuratie en dan aangeven in de odbc en vervolgens die naam aanroepen. Dat werkt perfect, maar zoek dus eigenlijk na een manier dat het werkt zonder dat ik dus die odbc verbinding moet aan maken.

  • momania
  • Registratie: Mei 2000
  • Laatst online: 19:39

momania

iPhone 30! Bam!

Verwijderd schreef op dinsdag 19 juli 2005 @ 12:42:
[rml][ Java] Connectie met DB[/rml]

Op het einde staat er dat het werk en ik zie geen verschil met die van mij :'(
Die van jou
Java:
1
String url = "jdbc:odbc:Driver={Microsoft Access Driver(*.mdb)};dbq="+currentdir+ dbpath;

Die uit het topic:
Java:
1
String url = "jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ="+FileName; 

Jij mist achter 'Driver' een spatie en DBQ heb je lower case. :)

Neem je whisky mee, is het te weinig... *zucht*


Verwijderd

Topicstarter
D-Raven schreef op dinsdag 19 juli 2005 @ 10:40:
waarom zou die dat moeten doen?, alleen een antwoord blaten zonder uitleg is niet echt helpvol.

Ikzelf heb tot nu toe alleen de borland classes gebruikt om verbinding te maken met een ms-acces database in java.

Ik zie wat jij vergeten bent, je moet een default connection type opgeven. Zie de dns string hieronder...

Je kunt ook met borland eerst verbinding maken en dan de native java classes gebruiken voor de rest.
Het enigste wat je nodig hebt is een object van het type Connection.
Vandaaruit kun je dan verder breien.

Dit gaat dan ongeveer als volgt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
//heb je nodig
import com.borland.dx.sql.dataset.*;


private Database database1 = new Database();
private Connection con;

 database1.setConnection(new ConnectionDescriptor(
                "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)}; Dbq="+currentDir+"\\vragenDB.mdb;   "+
                "Uid=; Pwd=;", "", "", false,
                "sun.jdbc.odbc.JdbcOdbcDriver"));
        con = (this.getDatabase()).getJdbcConnection();


Dit is zomaar even de code op een rij. Als je wilt weten wat de currentdir is van je applicatie (omdat je daar je database in wilt gooien misschien dan kun je weer.

String currentDir = System.getProperty("user.dir");

gebruiken.
Heb nu Foundation geinstalleerd i.v.m veel meer mogelijkheden dan mijn Jbuilder 6 ;)

EN heb dus ook deze code geprobeert, maar ik krijg bij het stukje con=(this.getDatabase().....) dat hij getDatabase niet kent. Ontbreekt er bij mij misschien nog een import.

Ik gebruik de volgende imports
import java.sql.*;
import sun.jdbc.odbc.*;
import java.util.*;
import com.borland.dx.sql.dataset.*;

[ Voor 9% gewijzigd door Verwijderd op 20-07-2005 08:22 ]


Verwijderd

Topicstarter
WERKT !!!! :*) :*) :*)

Moest niet connect= (this.getDatabase()).getjdbcConnection(); zijn maar gebruik nu de code

connect = database1.getJdbcConnection();

Bedankt iedereen _/-\o_
Pagina: 1