java web 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

net.sf.ucanaccess

ucanaccess

4.0.4

选项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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值