java生成Access数据库文件

java生成Access数据库文件

  (2011-06-29 11:01:17)
标签: 

access数据库

 

文件路径

 

绝对路径

 

文件拷贝

 

服务端

 

it

分类: Java
  • 近日为客户做了一个将当前数据导出到桌面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代码
          public class AccessUtil {   
  1.     private Connection connection;   
  2.     private Statement statement;   
  3.        
  4.     // 空白mdb文件路径. 直接保存在src/cn/iwoo/dataexport/common/下.   
  5.     private final String blankMdbFilePath "cn/iwoo/dataexport/common/";   
  6.     // 空白mdb文件名   
  7.     private final String blankMdbFileName "blank.mdb";   
  8.     // 需要保存到的新的mdb文件路径和名   
  9.     private String savedMdbFilePathAndName defaultSavedMdbFilePath defaultSavedMdbFileName;   
  10.     // 新mdb文件路径   
  11.     public static final String defaultSavedMdbFilePath "C://";   
  12.     // 新mdb文件名   
  13.     public static final String defaultSavedMdbFileName "data.mdb";   
  14.     // mdb文件后缀   
  15.     public static final String defaultSavedMdbFileExtension ".mdb";   
  16.        
  17.     // 标准的单件模式   
  18.     private static AccessUtil instance new AccessUtil();   
  19.     private AccessUtil() {   
  20.     }   
  21.     public static AccessUtil getInstance() {   
  22.         return instance;   
  23.     }   
  24.        
  25.        
  26.       
  27.     public void setSavedFilePathAndName(String newFilePathAndName) {   
  28.         this.savedMdbFilePathAndName newFilePathAndName;   
  29.     }   
  30.        
  31.       
  32.     public void deleteOldMdbFile() throws Exception {   
  33.         File oldTargetFile new File(savedMdbFilePathAndName);   
  34.         if (oldTargetFile.exists()) {   
  35.             oldTargetFile.delete();   
  36.         }   
  37.     }   
  38.   
  39.       
  40.     public void copyBlankMdbFile() throws Exception {   
  41.         InputStream is this.getClass().getClassLoader().getResourceAsStream(blankMdbFilePath blankMdbFileName);   
  42.         OutputStream out new FileOutputStream(savedMdbFilePathAndName);   
  43.         byte[] buffer new byte[1024];   
  44.         int numRead;   
  45.         while ((numRead is.read(buffer)) != -1{   
  46.             out.write(buffer, 0numRead);   
  47.         }   
  48.         is.close();   
  49.         out.close();   
  50.     }   
  51.   
  52.       
  53.     public void connetAccessDB() throws Exception {   
  54.         Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");   
  55.         String database "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" savedMdbFilePathAndName.trim() ";DriverID=22;READONLY=true}";   
  56.         connection DriverManager.getConnection(database, """");   
  57.         statement connection.createStatement();   
  58.     }   
  59.   
  60.       
  61.     private void executeSql(String sql) throws Exception {   
  62.         statement.execute(sql);   
  63.     }   
  64.   
  65.       
  66.     public void closeConnection() throws Exception {   
  67.         statement.close();   
  68.         connection.close();   
  69.     }   
  70.   
  71.  

当然,最后我在将我事先准备好的mdb文件copy到我指定的文件夹的时候我用的是自己写的方法

**
  * 将一个空白的文件拷贝到指定的目录文件夹
  *
  * @param fileFrom空白文件的绝对路径
  * @param fileTo将文件复制到位置的绝对路径
  * @return
  */
 public static boolean copy(String fileFrom, String fileTo) {
  try {
   FileInputStream in = new FileInputStream(fileFrom);
   FileOutputStream out = new FileOutputStream(fileTo);
   byte[] bt = new byte[20480];
   int count;
   while ((count = in.read(bt)) > 0) {
    out.write(bt, 0, count);
   }
   in.close();
   out.close();
   return true;
  } catch (IOException ex) {
   return false;
  }
 }

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值