如何使用Spring配置UCanAccess JDBC驱动程序?

时间:2013-12-26 22:10:08

标签: java spring ms-access jdbc ucanaccess

每当我尝试使用ODBC驱动程序访问MDB文件时,它都会给我一个错误:

error : "[Microsoft][ODBC Driver Manager] Invalid string or buffer length exception"

所以我决定改用UCanAccess JDBC driver

有没有人有使用Spring配置UCanAccess JDBC驱动程序的经验?

我已将UCanAccess.jar放入我的lib文件夹并按如下所示进行配置,但这不起作用:

<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" />

我的开发环境:带有JdbcTemplate,Windows 7 64位,Microsoft Access 2013的Spring Framework 3.x。

2 个答案:

答案 0 :(得分:2)

您必须将所有UCanAccess依赖项放在您的lib文件夹中(请参阅UCanAccess分发的lib文件夹中的jar:jackcess,hsqldb,commons-logging和commons-lang)。

答案 1 :(得分:0)

在这种依赖性下,这对我来说很好用

    <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();
        }
    }
}
}