JDBC MS Acess connect DSN-less free

-Just getting started in java, and I want to connect my application to a MS access database.

-I would like to be able to connect without using a DSN, thus DSN-less.
- And from what I read all of the drivers cost money, but I would like something free!
Any ideas?

Code & drivers is what I am looking for.

Thanks,
LVL 1
Dean_ReedyAsked:
Who is Participating?
 
guidwayCommented:
Try this (this is if you are using an Access Database, but should work with others):

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String db = "jdbc:odbc:Driver={Microsoft Access          (*.mdb)};DBQ=C:/foo/foobar.MDB";

Connection DBConn = DriverManager.getConnection(db,"","");

You should be able to replace this driver name with whatever database you are accessing. Hope this helps,

guidway
0
 
steeksCommented:
you can use the RmiJdbc driver.  It is available under the LGPL Licence, which allows you to bundle it with commercial products.  You can find it at
http://www.objectweb.org/RmiJdbc/RmiJdbcHomePage.htm

You can connect using either a url, hostname, or ip address
This driver is open source, and they provide some useful info for getting it up and running
0
 
objectsCommented:
It still needs a DSN.
0
Cloud Class® Course: Ruby Fundamentals

This course will introduce you to Ruby, as well as teach you about classes, methods, variables, data structures, loops, enumerable methods, and finishing touches.

 
Ravindra76Commented:
How can I use the JDBC API to access a desktop database like Microsoft Access over the network?

Most desktop databases currently require a JDBC solution that uses ODBC underneath.
This is because the vendors of these database products haven't implemented all-Java JDBC drivers.


The best approach is to use a commercial JDBC driver that supports ODBC and the database you
want to use. See the JDBC drivers page for a list of available JDBC drivers.

The JDBC-ODBC bridge from Sun's Java Software does not provide network access to desktop databases
by itself. The JDBC-ODBC bridge loads ODBC as a local DLL, and typical ODBC drivers for desktop databases
like Access aren't networked. The JDBC-ODBC bridge can be used together with the RMI-JDBC bridge ,
however, to access a desktop database like Access over the net. This RMI-JDBC-ODBC solution is free.

http://dyade.inrialpes.fr/mediation/download/ 

also look
http://java.sun.com/products/jdk/1.1/docs/guide/jdbc/index.html 
http://java.sun.com/docs/books/jdbc/intro.html 

Java how-to DB section!
http://tactika.com/realhome/javaht/java-d1.html 
http://codeguru.developer.com/java/Miscellaneous/Database/index.shtml 

courtesy: vladi21
0
 
Ravindra76Commented:
sorry. Ignore my comments. It is the same old link (object web)  :)
0
 
Ravindra76Commented:
0
 
Dean_ReedyAuthor Commented:
steeks,

I do thank you for the answer, however I am looking for a DSN-less connection option.
The MS Access database will be on my local machine, and in the future I am looking at moving it to a drive mapped to a local server.
Dean

0
 
googlyralphCommented:
Comments:

using access, what about Jet Database Engine (ie, MS access db, with the ODBC bridge).

And why not use a DSN? its just a simple matter of a constant in your code, and a registry key on either a local box or a server?

DB's like Oracle allow specification of a port, server name eg db1.muckingfuddled.com:1521, this is accomplished via a level 4 jdbc driver implmeneted using Sockets.

GR.
0
 
Dean_ReedyAuthor Commented:
GR,

True, the DSN route is a possibility.  However I want to distribute this simple application to other people, and that would require them to setup a DSN as well, which I am hopping to avoid.  Now is there a way to programmable to setup up the DSN?

Dean
0
 
googlyralphCommented:
The DSN's are just registry entries, they can be added from a batch file and a .reg file.

If you add a DSN to your system, then export the registry key: HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\{DSN_NAME_YOU_SPECIFY}

for example one on my machine, is one called pimtest (for access), looks like:

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\pimtest]
"Driver"="C:\\WINNT\\System32\\odbcjt32.dll"
"DBQ"="X:\\FORGE\\pimtest.mdb"
"DriverId"=dword:00000019
"FIL"="MS Access;"
"PWD"="pass"
"SafeTransactions"=dword:00000000
"UID"="user"

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\pimtest\Engines]

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\pimtest\Engines\Jet]
"ImplicitCommitSync"=""
"MaxBufferSize"=dword:00000800
"PageTimeout"=dword:00000005
"Threads"=dword:00000003
"UserCommitSync"="Yes"

GR.
0
 
googlyralphCommented:
i cant remember exactly, but there is a switch for regedit so in a batch file calling:

regedit /[SomeSwitchOrOther] dsn.reg

will import the require file. (or you could just double click it from explorer, but wheres the fun in that... ;-)
Without a switch it asks if you want to proceed, there is away roundit,m i jsut cant think of hte switch...

GR.
0
 
objectsCommented:
Are the database's you are trying to access installed on the client?
You only need to setup a DSN on the server hosting the database, not every client.
0
 
Dean_ReedyAuthor Commented:
objects,

The program is going to be first on individual clients, however in the future I would like to set it up on the client machines where they are mapping a drive to an NT Server.  I prefer DSN-less, or a way programmicly to setup DSNs on the client machines would be answer also.

Dean
0
 
googlyralphCommented:
registry programaticlly is either using a "Java" library written by M$ for win32 interaction (i know things like dialogs and directx have been written by M$ so assume there are classes for the registry too), or a native dll/exe with the registry data in, or a .reg file.
0
 
objectsCommented:
> up on the client machines where they are mapping a drive to an NT Server

Then you only need a DSN on the NT server.
Not the client.
0
 
Dean_ReedyAuthor Commented:
Here is what I finally got to work.  Notice I had to add "newInstance()".

Thanks, guid way.


Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
Connection conn = DriverManager.getConnection("jdbc:odbc:;DRIVER=Microsoft Access Driver (*.mdb);DBQ=Test.mdb;PWD=mypass","login","password");
Statement command = conn.createStatement();
ResultSet rs = command.executeQuery("select count(*) as tot from Member");  
 
0
 
Dean_ReedyAuthor Commented:
Here is what I finally got to work.  Notice I had to add "newInstance()".

Thanks, guid way.


Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
Connection conn = DriverManager.getConnection("jdbc:odbc:;DRIVER=Microsoft Access Driver (*.mdb);DBQ=Test.mdb;PWD=mypass","login","password");
Statement command = conn.createStatement();
ResultSet rs = command.executeQuery("select count(*) as tot from Member");  
0
 
objectsCommented:
I thought you knew how to connect, but were confused about DSN's ????
Good to hear your happy :)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.