Hello

I am trying to connect to an access database, i have tried using the

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")

but this does not work. I am using Eclipse IDE and running windows 7 64bit. Does anyone know how to make it work?

Thanks

Recommended Answers

All 12 Replies

you have to add User Data Source in Win

or

using 3rd. party Driver

Or you can run the code under a 32-bit JVM. The 64-bit JVM will not find the 32-bit Access driver in ODBC, but a 32-bit installation will.

so do i need to download a new JVM?

I tried that driver but when i ran my program i get this error:

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Invalid cursor state

Then you got a connection and the driver worked.

Invalid cursor state could be occurring if you tried to read a row value without calling next(). Post the code and the stack trace if you want a more definitive answer.

Here is the code

import java.sql.*;


class Test
{
 public static void main(String[] args)
 {
 try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Connection con = DriverManager.getConnection("jdbc:odbc:Cont","","");
Statement s = con.createStatement();
s.executeQuery("SELECT * FROM Customer");
ResultSet rset = s.getResultSet();

while(rset.next());
{
	System.out.println(rset.getString("Name") +" " +
			rset.getString("Email") + " " +
			rset.getInt("Comments")); 
}

 }
 catch (ClassNotFoundException exp) {
System.err.println(exp);

 }
 catch(SQLException exp)
 {
	 System.err.println(exp);
 }
 }
}

Try changing your query call to this and see if it makes a difference

ResultSet rset = s.executeQuery("SELECT * FROM Customer");

Still the same error unfortunately.

Replace the println() statements in your catch blocks with exp.printStackTrace() calls so you can see exactly which line is causing the error.

I don't see anything specifically wrong with your code. I suggested the previous change because the Access ODBC driver is picky about re-reading values that have already been read.

Statement s = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

check and set ResultSet#Type as you really needed, just for my ... then if you are able to call rset.first();

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.