关于Java读取access的方法
来源:互联网 发布:淘宝qq群机器人多少钱 编辑:程序博客网 时间:2024/05/16 06:09
- 原因
- 方法
- 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的方法
- java连接读取access数据库可行方法
- java读取ACCESS数据库的简单示例
- java 读取 access数据库
- 关于java读取clob字段的几种方法
- 对java中关于文件读取方法的比较
- ASP读取ACCESS数据库随机记录的方法
- ASP.NET + C#读取ACCESS数据库内容的简单方法
- PHP读取access 数据库的部分方法实例
- java读取Access ole字段
- java读取access数据问题
- java读取access数据库数据
- Java访问Access的一般方法
- 使用JAVA访问ACCESS数据库的方法
- java访问access数据库的方法
- java读取PDF的方法
- java读取excel的方法
- Java读取文件的方法
- Android的Media(录音,播放音乐,播放视频等)
- Mysql 锁机制整理
- Battery-historian 2.0的安装与使用
- 位运算/逻辑运算总结
- SignalR的介绍以及安装
- 关于Java读取access的方法
- apache-tomcat集群+负载均衡配置
- 文件流
- ogg脱敏复制
- 黑马程序员————————关于JDK1.5的新特性
- 一个资深游戏开发者对于棋牌游戏开发的一些经验分享
- ios AFNetworking https 双向证书验证实现
- shell 通配
- 电子或通信领域当前的主流技术及其社会需求调查报告。