• 原因
  • 方法
    • odbc连接
    • jdbc连接
    • 使用jackcess
  • 总结

原因

最近因为因为项目需要,需要把数据从Access里面导入的其他数据库里面,于是就开始在网络找寻各种办法.因为我比较熟悉的语言是java 所以就找了一些关于java的方法.

方法

连接Access的方法就是odbc 和jdbc连接.

odbc连接

使用的就是系统自带的odbc连接:

  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");  /** * 直接连接access文件。 */  String dbur1 = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=d://a1.mdb";  Connection conn = DriverManager.getConnection(dbur1, "username", "password");  

注意在Deiver后面有一个空格,不能省略.
使用这个方法的好处就是系统自带的,比较方便不需要下载什么jar包.
但是:

windows7 64位对于odbc的支持不太好,经常会报“无效的字符串或缓冲区”

使用起来比较郁闷.

jdbc连接

jdbc连接是java里面比较好的,一般支持的都比较好.
找到了开源的ucanaccess 纯jdbc 驱动,发 现在查询效率上远远高于odbc,但是占用的内存比较大,偶尔出现内存溢出(高配机器用着还是挺好的)
ucanacess下载地址

Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
Connection conn=DriverManager.getConnection("jdbc:ucanaccess://<mdb or accdb file path>",user, password);
for example:
Connection conn=DriverManager.getConnection("jdbc:ucanaccess://c:/pippo.mdb");

这样就可以方便的使用sql语句查询access里面的数据.

使用jackcess

Jackcess 是一个Java 类库,用来读写微软的Access 数据库。
直接使用java代码就可以读取Access数据库的内容,可以建表 删表
jackcess官网

Are password protected databases supported?
Basic password protection (Access 2003 or earlier) is merely software enforced, and Jackcess does not do any password checking at this point. So, a password protected database can be used the same as any other.
If a database is actually encrypted, then you will need need an encoder.

这个是官网的FAQ
大概意思就是对有密码的access数据库也能访问.我测试过.可以
demo
查询表

Database db = DatabaseBuilder.open(new File("mydb.mdb"));
Table table = db.getTable("Test");for(Row row : table) {System.out.prinln("Look ma, a row: " + row);}Row row = ...;for(Column column : table.getColumns()) {String columnName = column.getName();Object value = row.get(columnName);System.out.println("Column " + columnName + "(" + column.getType() + "): "+ value + " (" + value.getClass() + ")");}// Example Output://// Column ID(LONG): 27 (java.lang.Integer)// Column Name(TEXT): Bob Smith (java.lang.String)// Column Salary(MONEY): 50000.00 (java.math.BigDecimal)// Column StartDate(SHORT_DATE_TIME): Mon Jan 05 09:00:00 EDT 2010 (java.util.Date)

添加记录

 String name = "bob";BigDecimal salary = new BigDecimal("1000.00");Date startDate = new Date();table.addRow(Column.AUTO_NUMBER, name, salary, startDate);

创建新的数据库

File file = new File("test.mdb");Database db = new DatabaseBuilder(file).setFileFormat(Database.FileFormat.V2000).create();

创建表

 Table table = new TableBuilder("Test").addColumn(new ColumnBuilder("ID", DataType.LONG).setAutoNumber(true)).addColumn(new ColumnBuilder("Name", DataType.TEXT)).addColumn(new ColumnBuilder("Salary", DataType.MONEY)).addColumn(new ColumnBuilder("StartDate", DataType.SHORT_DATE_TIME)).toTable(db);

使用游标查询记录

Table table = db.getTable("Test");Cursor cursor = CursorBuilder.createCursor(table);boolean found = cursor.findFirstRow(Collections.singletonMap("ID", 1));if (found) {System.out.println(String.format("Row found: Name = '%s'.",cursor.getCurrentRowValue(table.getColumn("Name"))));} else {System.out.println("No matching row was found.");}Table table = db.getTable("Test");IndexCursor cursor = CursorBuilder.createCursor(table.getPrimaryKeyIndex());boolean found = cursor.findFirstRow(Collections.singletonMap("ID", 1));Table table = db.getTable("Test");Row row = CursorBuilder.findRowByPrimaryKey(table, 1);if (row != null) {System.out.println(String.format("Row found: Name = '%s'.",row.get("Name")));} else {System.out.println("No matching row was found.");}

总结

以上就是我找寻的能使用的java连接access的方法.
个人觉得是用jdbc和jackcess的方法比较好,可以根据个人的使用场景来选择合适的方法.
tip:

  • ucanaccess使用的也是jackcess的方法,只是ucanacess可以使用sql语句查询记录

  • jackcess使用的游标来查询记录 纯java代码

关于Java读取access的方法相关推荐

  1. java读取ACCESS数据库的简单示例

    java读取ACCESS数据库的简单示例  虽然简单,对初学者来说,如果没有一段可以成功执行的代码供参考,还真难调试  先用ACCESS建一个数据库 DB1.MDB,里面有一表"table1 ...

  2. java读取文件的方法是_Java读取文件方法大全

    Java读取文件方法大全 2011/11/25 9:18:42  tohsj0806  http://tohsj0806.iteye.com  我要评论(0) 摘要:文章来源:http://www.c ...

  3. java 读取word 表格,java读取word表格方法

    首先网上下载poi插件poi-bin-3.9-20121203.zip import java.io.File; import java.io.FileInputStream; import java ...

  4. Java读取xml数据

    xml中的代码 <?xml version="1.0" encoding="UTF-8"?><books id="aaa" ...

  5. java读取配置文件详解

    目录 使用类加载器加载配置文件 ServletContext方式 读取web.xml配置 前言: 1 这是一个java读取配置文件的方法集合,只有常见的方式 2 围绕的内容大部分是读取properti ...

  6. 基于JNA(Java Native Access)实现RFID单卡、多卡读取以及写入。

    前言 在对RFID等硬件操作中,会使用C或C++进行实现,但如果是基于Java环境进行开发,就会和C++.C进行交互,调用底层的一些方法.在JNA出现之前,使用JNI会存在封装性不好.不稳定等问题. ...

  7. java读取配置文件的几种方法

    在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配置文件来完成,本文根据笔者工作中用到的读取配置文件的方法小小总结一下,主要叙述的是spring读取配置文件的方法. 一.读取xml配置 ...

  8. java读取pdf_Java 读取PDF中的文本和图片的方法

    本文将介绍通过Java程序来读取PDF文档中的文本和图片的方法.分别调用方法extractText()和extractImages()来读取. 使用工具:Free Spire.PDF for Java ...

  9. java中读取文件的方法

    总结一下java中读取文件的方法: 方法一(逐行的读取文件内容): private FileReader fileReader; private BufferedReader bufferedRead ...

最新文章

  1. python综合作业题目_python作业 1、2、3 题
  2. access port 与portfast之间的关系
  3. js 层 分页显示选择用户名
  4. PMP之项目整合管理
  5. C#和.NET Framework的关系
  6. aerials标准测试图像_Python 图像读写谁最快?不信就比一比
  7. 调用Xvid编码器流程(基于xvid1.1.0)
  8. 如何在ASP.NetCore增加文件上传大小
  9. Java类集框架 —— LinkedHashMap源码分析
  10. 抗癌中草药彩色图谱——西洋参
  11. powershell 遍历json_遍历JSON文件PowerShell
  12. Centos7+搜狗拼音输入法 安装不踩雷
  13. 基于Java坦克大战小游戏设计(3)
  14. PDA手持终端扫描条码开单打印一体 结合后台电脑系统 数据同步交互解决方案
  15. 旅游类App原型制作分享-Triposo
  16. Linux 下使用Trickle限制下载/上传带宽
  17. bootstrap table固定列导致复选框失效的解决方法
  18. 你知道么?好莱坞也是社交媒体的诞生地……
  19. python 大智慧接口_大智慧数据格式
  20. (字母排序搜索)类似微信通讯录效果

热门文章

  1. EM算法在高斯混合模型学习中的应用
  2. VMware产品下载链接
  3. CAD机械零件平面绘制练习一
  4. “离散元数值模拟仿真技术与应用”系列专题培训的通知
  5. bigsur cdr文件_macOS Big Sur 11.2 原版引导镜像下载
  6. 菜鸟教程 - Python 100例
  7. 《酷玩》——畅玩游戏,尽享应用,探索无限可能!
  8. 简述分类法的优缺点_自由分类法的优缺点
  9. 九齐新型单片机NY8A051F
  10. mysql中findinset函数的使用