VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 数据库 > Access数据库 >
  • java web操作Access数据库

Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点,是 Microsoft Office 的系统程序之一。
 
JDK1.8增加了很多新特性,但不再包含access桥接驱动,因此在连接Access数据库时有所变化[和JDK1.6相比]. 所以需要我们自己 创建连接方式
 
1、UCanAccess是一个纯Java JDBC驱动程序,它允许我们在不使用ODBC的情况下读取和写入Access数据库。它使用另外两个软件包Jackcess和HSQLDB来执行这些任务。以下是如何设置它的简要概述。
 
 
选项1:使用Maven
如果您的项目使用Maven,则可以通过以下坐标简单包含UCanAccess:
 
groupId: net.sf.ucanaccess 
 
artifactId: ucanaccess
 
<dependency>
   <groupId>net.sf.ucanaccess</groupId>
   <artifactId>ucanaccess</artifactId>
   <version>4.0.4</version>
</dependency>
选项2:手动将JAR添加到您的项目中
如上所述,UCanAccess需要Jackcess和HSQLDB。Jackcess又有它自己的依赖关系。所以要使用UCanAccess,您需要包含以下组件:
 
UCanAccess(ucanaccess-xxxjar)
HSQLDB(hsqldb.jar,版本2.2.5或更新版本)
Jackcess(jackcess-2.xxjar)
commons-lang(commons-lang-2.6.jar或更新的2.x版本)
commons-logging( commons-logging-1.1.1.jar或更新的1.x版本)
 
幸运的是,UCanAccess在其分发文件中包含了所有必需的JAR文件。当你解压缩它时,你会看到类似的东西
 
ucanaccess-4.0.1.jar  
  /lib/
    commons-lang-2.6.jar  
    commons-logging-1.1.1.jar  
    hsqldb.jar  
    jackcess-2.1.6.jar
您只需将所有五(5)个 JAR添加到您的项目中即可。
 
注意:不要不加loader/ucanload.jar,如果要添加其他五(5)JAR文件到您的构建路径。该UcanloadDriver课程仅在特殊情况下使用,需要不同的设置。请参阅相关的答案在这里了解详情。
 
Eclipse:在Package Explorer中右键单击项目并选择Build Path > Configure Build Path...。单击“添加外部JAR ...”按钮以添加五(5)个JAR中的每一个。当你完成你的Java Build Path应该看起来像这样
 
 
 
NetBeans:展开项目的树视图,右键单击“Libraries”文件夹并选择“Add JAR / Folder ...”,然后浏览至JAR文件。
 
 
 
添加所有五(5)个JAR文件后,“Libraries”文件夹应该如下所示:
 
 
 
IntelliJ IDEA的:选择File > Project Structure...主菜单。在“库”窗格中单击“添加”(+)按钮并添加五(5)个JAR文件。一旦完成,该项目应该看起来像这样:
 
 
 
 
 
而已!
现在使用这样的代码在.accdb和.mdb文件中“U可以访问”数据
 
// assumes...
//     import java.sql.*;
Connection conn=DriverManager.getConnection(
        "jdbc:ucanaccess://C:/__tmp/test/zzz.accdb");
Statement s = conn.createStatement();
ResultSet rs = s.executeQuery("SELECT [LastName] FROM [Clients]");
while (rs.next()) {
    System.out.println(rs.getString(1));
}
2、详细的解决方案
1. 在ClassPath下存一个空的blank.mdb. (也就是在你的项目中包含一个空白的.mdb文件)
2. 将项目中的blank.mdb另存到新的路径. (可能是用户选择要导出mdb文件的保存路径)
    代码
 
public class AccessUtil {
    private Connection connection;
    private Statement statement;
    // 需要保存到的新的mdb文件路径和名
    private String savedMdbFilePathAndName = defaultSavedMdbFilePath + defaultSavedMdbFileName;
    // 新mdb文件路径
    public static final String defaultSavedMdbFilePath = "C://";
    // 新mdb文件名
    public static final String defaultSavedMdbFileName = "data.mdb";
    // 标准的单件模式
    private static AccessUtil instance = new AccessUtil();
    private AccessUtil() {
    }
    public static AccessUtil getInstance() {
        return instance;
    }
    /**
     *
     Description: 设置待保存的新的mdb文件路径和名
 
     */
    public void setSavedFilePathAndName(String newFilePathAndName) {
        this.savedMdbFilePathAndName = newFilePathAndName;
    }
    /**
     *
     Description: 删除已经存在的mdb文件
 
     */
    public void deleteOldMdbFile() throws Exception {
        File oldTargetFile = new File(savedMdbFilePathAndName);
        if (oldTargetFile.exists()) {
            oldTargetFile.delete();
        }
    }
    /**
     *
     Description: 将空白mdb文件拷贝到特定目录
 
     */
    public void copyBlankMdbFile() throws Exception {
        InputStream is = this.getClass().getClassLoader().getResourceAsStream("static/ERPDATA.mdb");
        OutputStream out = new FileOutputStream(savedMdbFilePathAndName);
        byte[] buffer = new byte[1024];
        int numRead;
        while ((numRead = is.read(buffer)) != -1) {
            out.write(buffer, 0, numRead);
        }
        is.close();
        out.close();
    }
    /**
     *
     Description: 打开对mdb文件的jdbc-odbc连接
 
     */
    public void connetAccessDB() throws Exception {
        /*Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + savedMdbFilePathAndName.trim() + ";DriverID=22;READONLY=true}";
        connection = DriverManager.getConnection(database, "", "");*/
         connection=DriverManager.getConnection(
                "jdbc:ucanaccess://D:/data.mdb");
        statement = connection.createStatement();
 
        /*ResultSet rs = statement.executeQuery("SELECT  [DATA1] FROM [TABLE]");
        while (rs.next()) {
            System.out.println(rs.getString(1));
        }*/
    }
    /**
     *
     Description: 执行特定sql语句
 
     */
    public void executeSql(String sql) throws Exception {
         statement.execute(sql);
    }
    /**
     *
     Description: 关闭连接
 
     */
    public void closeConnection() throws Exception {
        statement.close();
        connection.close();
    }
 
 
 
 
}
测试类
 
public class Test {
    public static void main(String[] args) {
        AccessUtil accessUtil = AccessUtil.getInstance();
        accessUtil.setSavedFilePathAndName("D://data.mdb");
        try {
            accessUtil.copyBlankMdbFile();
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            accessUtil.connetAccessDB();
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            accessUtil.executeSql("INSERT INTO [TABLE] ([DATA1],[DATA2],[DATA3]) VALUES('1','2','3')");
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            accessUtil.closeConnection();
        } catch (Exception e) {
            e.printStackTrace();
        }
 
    }
}
如果你是Maven项目 记得添加上面的依赖
 
如果不是的话,记得手动导入jar包
————————————————
版权声明:本文为CSDN博主「hengliang_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hengliang_/article/details/80496538

相关教程