您的位置:首页 > 编程语言 > Java开发

java---access处理(mdb、accdb)---使用jackcess包

2017-03-27 10:31 190 查看
在使用jackcess前,学习了maxuyang1987的文章,获益良多,把自己的代码放在这里也给后来人一个参考。
http://blog.csdn.net/maxuyang1987/article/details/18705267。
jackcess不支持sql查询,使用起来还是有些不方便

package com.uni.tools.demo;

import com.healthmarketscience.jackcess.*;
import com.healthmarketscience.jackcess.util.ImportUtil;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.sql.Types;
import java.util.Collections;
import java.util.Date;
import java.util.Map;

/**
* Created by huangyi5230 on 2017/3/26.
*/
public class ReadAccessDemo {

//mdb accdb
//mdb是accdb的早期版本格式,2007以后,使用accdb格式
/**
* @param args
* @throws
*/
public static Logger logger = Logger.getLogger(ReadAccessDemo.class);

public static void main(String[] args) throws IOException {

//使用了日志文件,也可以不用,会有warnning提示,不影响运行
BasicConfigurator.configure ();
PropertyConfigurator.configure("log4j.properties");
logger.info("开始运行");

//可以分别测试下面的函数的运行情况

//getAccessDataTable();
createTable();
//createTableRecByCsv() ;
//deleteRec();
}
/**
* 读取指定表格
* @throws IOException
*/

//程序需要引入3个包
//一个是jackcess
//另一个是commons-logging
//第3个是commons-lang

//log4j是日志文件,不是必须强制引入的

public static void getAccessDataTable() throws IOException{

//这里的data.accdb是access文件的名称,后缀名支持accdb和mdb。照片列表是access文件中的一个表。accdb就相当于一个数据库,照片列表就相当于数据库中的一个表
Table table = DatabaseBuilder.open(new File("d:\\data.accdb")).getTable("照片列表");
for(Row row : table) {

//顺序取出表中的字段和值
//字段名区分大小写,如果不一致会导致取值为null
System.out.println("--照片名称--" + row.get("照片名称")+"--poinum--" + row.get("POINUM"));
}
}
/**
* 创建表并写入数据
* @throws IOException
*/
public static void createTable() throws IOException{

//这里同样支持mdb和accdb
Database db = DatabaseBuilder.create(Database.FileFormat.V2000, new File("d:\\new.accdb"));
Table newTable;
try {

//刚才是创建文件,这里是在文件里创建表,字段名,字段类型
newTable = new TableBuilder("NewTable")
.addColumn(new ColumnBuilder("a")
.setSQLType(Types.INTEGER))
.addColumn(new ColumnBuilder("b")
.setSQLType(Types.VARCHAR))
.toTable(db);

//插入一条数据测试
newTable.addRow(1, "foo");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
*  将CSV文件的内容复制到一个新表:
* @throws IOException
*/
public  static void createTableRecByCsv() throws IOException{
Database db = DatabaseBuilder.open(new File("d:\\new.mdb"));

//可以是文本文件,Delimiter是选择分隔符,这里使用逗号
new ImportUtil.Builder(db, "NewTable22").setDelimiter(",").importFile(new File("c:\\test.csv"));
db.close();
}
/**
* 删除一条数据
* @throws IOException
*/
public static void deleteRec() throws IOException{
Table table = DatabaseBuilder.open(new File("c:\\new.mdb")).getTable("NewTable22");

//我认为这里应该是查找a,foo才对,原文不知道是否笔误了
Row row = CursorBuilder.findRow(table, Collections.singletonMap("a", "foo")); if(row != null) { System.out.println("Found row where 'a' == 'foo': " + row); table.deleteRow(row); } else { System.out.println("Could not find row where 'a' == 'foo'"); } }}

对了,使用的日志配置文件log4j.properties文件放在程序根目录下。

内容如下:

 ### 设置###

log4j.rootLogger = debug,stdout,common,error

### 输出信息到控制抬 ###

log4j.appender.stdout = org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Target = System.out

log4j.appender.stdout.layout = org.apache.log4j.PatternLayout

### %-5p,应该是占5个字符的位置

log4j.appender.stdout.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %m%n

### 输出DEBUG 级别以上的日志到=E://logs/error.log ###

log4j.logger.common=info  

log4j.appender.common = org.apache.log4j.DailyRollingFileAppender

###在名称后面加入时间区分 有个问题,就是第一个文件不会自动添加日期,这个是log4j不支持###

###log4j.appender.common.DatePattern='_'yyyy-MM-dd-HH-mm-ss'.log'

###如果存在同名文件,则在源文件后追加 ###

log4j.appender.common.Append = true

 ###这是过滤器,如果级别低于这个设置的级别,不被记录显示 ###

log4j.appender.common.Threshold = INFO 

log4j.appender.common.layout = org.apache.log4j.PatternLayout

log4j.appender.common.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} - %m%n

log4j.appender.common.File=./log/common.log

### 输出ERROR 级别以上的日志到=E://logs/error.log ###

log4j.logger.error=error  

log4j.appender.error = org.apache.log4j.DailyRollingFileAppender

#log4j.appender.error.DatePattern='_'yyyy-MM-dd-HH-mm-ss'.log'

log4j.appender.error.Append = true

log4j.appender.error.Threshold = ERROR 

log4j.appender.error.layout = org.apache.log4j.PatternLayout

log4j.appender.error.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} - %m%n

log4j.appender.error.File =./log/error.log
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: