java生成Access数据库文件
(2011-06-29 11:01:17)- 近日为客户做了一个将当前数据导出到桌面access数据库的功能
- 思路是这样的:
- 当客户端选中需要导出的数据发送到服务端
- 服务端要有一个空白的access数据库,我将这个数据库名称定义为temp.mdb
- 当服务端接收到请求的时候将这个temp.mdb复制到我指定的一个文件夹路径,复制后的名字使用当前的日期“年月日时分秒”例如:“20110628141646239.mdb”
- 在这个20110628141646239.mdb文件中创建一个表
- 向这个表中插入数据
- 将插入数据后的文件发送到客户端,提示下载
下面的是我参考的一个方法:
- 1. 在ClassPath下存一个空的blank.mdb. (也就是在你的项目中包含一个空白的.mdb文件)
- 2. 将项目中的blank.mdb另存到新的路径. (可能是用户选择要导出mdb文件的保存路径)
- 3. 将.mdb作为数据源, 用JDBC ODBC添加数据. 注: jdbc-odbc 在jre中是有的jre/lib/rt.jar. 也就是不需要引入额外的jar包.
注:
- 步骤3中, 你可以执行CREATE Table的SQL语句.
- 如果你已经知道了DB的SCHEMA, 那更简单了, 你直接在你的项目中包含一个带有SCHEMA的空的.mdb文件, 这样在步骤3的时候, 不需要再做表结构的创建, 只需要做数据插入即可.
Java代码
-
private Connection connection; -
private Statement statement; -
-
// 空白mdb文件路径. 直接保存在src/cn/iwoo/dataexport/common/下. -
private final String blankMdbFilePath = "cn/iwoo/dataexport/common/"; -
// 空白mdb文件名 -
private final String blankMdbFileName = "blank.mdb"; -
// 需要保存到的新的mdb文件路径和名 -
private String savedMdbFilePathAndName = defaultSavedMdbFilePath + defaultSavedMdbFileName; -
// 新mdb文件路径 -
public static final String defaultSavedMdbFilePath = "C://"; -
// 新mdb文件名 -
public static final String defaultSavedMdbFileName = "data.mdb"; -
// mdb文件后缀 -
public static final String defaultSavedMdbFileExten sion = ".mdb"; -
-
// 标准的单件模式 -
private static AccessUtil instance = new AccessUtil(); -
private AccessUtil() { -
} -
public static AccessUtil getInstance() { -
return instance; -
} -
-
-
-
public void setSavedFilePathAndName(String newFilePathAndName) { -
this.savedMdbFilePathAndName = newFilePathAndName; -
} -
-
-
public void deleteOldMdbFile() throws Exception { -
File oldTargetFile = new File(savedMdbFilePathAndName); -
if (oldTargetFile.exists()) { -
oldTargetFile.delete(); -
} -
} -
-
-
public void copyBlankMdbFile() throws Exception { -
InputStream is = this.getClass().getClassLoader().getResourceAsStream(blankMdbFilePath + blankMdbFileName); -
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(); -
} -
-
-
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, "", ""); -
statement = connection.createStatement(); -
} -
-
-
private void executeSql(String sql) throws Exception { -
statement.execute(sql); -
} -
-
-
public void closeConnection() throws Exception { -
statement.close(); -
connection.close(); -
} -
- }
当然,最后我在将我事先准备好的mdb文件copy到我指定的文件夹的时候我用的是自己写的方法
**