Reputation: 29
Whenever I tried to use an ODBC driver to access MDB files, it gave me an error:
error : "[Microsoft][ODBC Driver Manager] Invalid string or buffer length exception"
So I decided to use the UCanAccess JDBC driver instead.
Does anyone have experience configuring UCanAccess JDBC driver with Spring?
I've put the UCanAccess.jar into my lib folder and configured it like below, but that doesn't work:
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" ref="jdbcDriver" />
<property name="url" value="jdbc:ucanaccess://C:\\XXXX.mdb" />
<property name="username" value="" />
<property name="password" value="" />
</bean>
<bean id="jdbcDriver" class="net.ucanaccess.jdbc.UcanaccessDriver" />
My development environment: Spring Framework 3.x with JdbcTemplate, Windows 7 64bit, Microsoft Access 2013.
Upvotes: 3
Views: 6186
Reputation: 61
This works fine for me with this dependency
<dependency>
<groupId>net.sf.ucanaccess</groupId>
<artifactId>ucanaccess</artifactId>
<version>4.0.0</version>
</dependency>
MsAccessDatabaseConnection.java
package com.test.learn.java8;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class MsAccessDatabaseConnection {
public static void main(String[] args) {
// variables
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
// Step 1: Loading driver
try {
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
} catch (ClassNotFoundException cnfex) {
System.out.println("Problem in loading or "
+ "registering MS Access JDBC driver");
cnfex.printStackTrace();
}
// Step 2: open db connection
try {
String msAccDB = "C:/Users/vikal/OneDrive/Documents/VikDB.accdb";
//"D:/WORKSPACE/TEST_WORKSPACE/Java-JDBC/Player.accdb";
String dbURL = "jdbc:ucanaccess://" + msAccDB;
// Step 2.A: Create and get connection using DriverManager class
connection = DriverManager.getConnection(dbURL);
// Step 2.B: Creating JDBC Statement
statement = connection.createStatement();
// Step 2.C: Executing SQL & retrieve data into ResultSet
resultSet = statement.executeQuery("SELECT * FROM Employee");
System.out.println("ID\tName\t\t\tAge\tsalary");
while (resultSet.next()) {
System.out.println(resultSet.getInt(1) + "\t" +
resultSet.getString(2) + "\t" +
resultSet.getString(3) + "\t" +
resultSet.getString(4));
}
} catch (SQLException sqlex) {
sqlex.printStackTrace();
} finally {
try {
if (null != connection) {
// cleanup resources, once after processing
resultSet.close();
statement.close();
// and then finally close connection
connection.close();
}
} catch (SQLException sqlex) {
sqlex.printStackTrace();
}
}
}
}
Upvotes: 0
Reputation: 1710
You have to put all UCanAccess dependencies in your lib folder (see the jars in the lib folder of the UCanAccess distribution: jackcess, hsqldb,commons-logging and commons-lang).
Upvotes: 2