从oracle中导出数据到access中,以mdb格式导出文件
来源:互联网 发布:2011安全生产事故数据 编辑:程序博客网 时间:2024/04/29 23:28
@Overridepublic void exportMdbData(Invocation inv, Long taId, Paging page) throws Exception { //设置表名 String tablename1="tb_09as0y4kyet2"; // 空白mdb文件路径. 直接保存在src/cn/iwoo/dataexport/common/下. String blankMdbFilePath = "com/lzzj/prodma/controllers/archives/"; // 空白mdb文件名 String blankMdbFileName = "123.mdb"; // 新mdb文件路径 String defaultSavedMdbFilePath = "com/lzzj/prodma/controllers/archives/"; // 新mdb文件名 String defaultSavedMdbFileName = "data.mdb"; // mdb文件后缀 String defaultSavedMdbFileExtension = ".mdb"; // 需要保存到的新的mdb文件路径和名 String savedMdbFilePathAndName = defaultSavedMdbFilePath + defaultSavedMdbFileName; //将空白mdb文件拷贝到特定目录 InputStream is = this.getClass().getClassLoader().getResourceAsStream(blankMdbFilePath + blankMdbFileName); savedMdbFilePathAndName=getClass().getClassLoader().getResource("/").getPath()+savedMdbFilePathAndName; 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(); //开始从oracle取数据 Connection conn =null; PreparedStatement ps=null; ResultSet rs =null; String createTableSql1="";//一个建表语句 Map map1=new HashMap();//一个map存一个表的字段 List<Map> list1 = new ArrayList<Map>();//一个list存一个表的记录 int mapSize1=0;//一个表的字段个数 String value="";//用于拼接sql try{ Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.3.157:1521:ORCL", "pde", "pde"); map1=getCols(conn,ps,rs,tablename1);//map中存有该表中的所有字段 mapSize1=map1.size(); //拼接access中的建表sql语句 createTableSql1=createTableSql(tablename1,map1);//建表sql String sql2="select * from "+tablename1;//提取ORACLE表数据的sql ps = conn.prepareStatement(sql2); rs = ps.executeQuery(); String aa=""; String bb=""; while (rs.next()) { Map dateMap=new HashMap();//一条记录一个dateMap for(int z=1;z<=mapSize1;z++){ aa=String.valueOf(map1.get(z+"")); bb=rs.getString(z)==null?"":rs.getString(z); dateMap.put(aa, bb); } list1.add(dateMap); } //结束从oracle取数据 }catch(Exception e){ e.printStackTrace(); }finally{ // 关闭记录集 if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } // 关闭声明 if (ps != null) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } // 关闭链接对象 if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } //打开对mdb文件的jdbc-odbc连接 Connection connection=null; Statement statement=null; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ="+ savedMdbFilePathAndName.substring(1).trim(); //, *.accdb connection = DriverManager.getConnection(database); statement = connection.createStatement(); statement.execute(createTableSql1); //创建ACCESS表sql String insertSql=""; int listSize=list1.size(); //拼接access中的insert语句 for(int x=0;x<listSize;x++){ insertSql="insert into "+tablename1+" values("; for(int k=1;k<=mapSize1;k++){ value=String.valueOf(list1.get(x).get(map1.get(k+""))); if(k==mapSize1){ insertSql+="'"+value+"');"; }else{ insertSql+="'"+value+"',"; } } statement.execute(insertSql); } //1.设置文件ContentType类型,这样设置,会自动判断下载文件类型 inv.getResponse().setContentType("multipart/form-data"); //2.设置文件头:最后一个参数是设置下载文件名(假如我们叫data.mdb) inv.getResponse().setHeader("Content-Disposition", "attachment;fileName="+"data.mdb"); File file = new File(savedMdbFilePathAndName); OutputStream out1; FileInputStream inputStream = new FileInputStream(file); //3.通过response获取ServletOutputStream对象(out) out1 = inv.getResponse().getOutputStream(); try { int b = 0; byte[] buffer1 = new byte[8192]; while (b != -1){ b = inputStream.read(buffer1); //4.写到输出流(out)中 out1.write(buffer1,0,b); } } catch (IOException e) { e.printStackTrace(); }finally{ out1.flush(); inputStream.close(); out1.close(); file.delete(); } }catch(Exception e){ e.printStackTrace(); }finally{ // 关闭声明 if (statement != null) { try { statement.close(); } catch (SQLException e) { e.printStackTrace(); } } //关闭连接 if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } }public Map getCols(Connection conn,PreparedStatement ps,ResultSet rs,String tableNmae) throws SQLException{//获取某张表中的所有字段 Map map=new HashMap(); String sql1="select COLUMN_NAME from user_tab_cols where table_name=upper('"+tableNmae+"') order by column_id";//获取该表中的所有字段 ps = conn.prepareStatement(sql1); rs = ps.executeQuery(); int j=0; while (rs.next()) { j++; map.put(j+"", rs.getString(1));//存表中的所有字段 } return map;}public String createTableSql(String tableNmae,Map map){String createTableSql="CREATE TABLE "+tableNmae+" ( "; int mapSize=map.size();//字段个数 String value=""; for(int k=1;k<=mapSize;k++){ value=String.valueOf(map.get(k+"")); if(k==mapSize){ createTableSql+=value+" Memo );"; }else{ createTableSql+=value+" Memo ,"; } }return createTableSql;}
封装的方法比较笨,待优化
阅读全文
0 0
- 从oracle中导出数据到access中,以mdb格式导出文件
- 从SQLServer中导出数据到Access
- 从oracle中导出excel格式数据
- 从Oracle中导出数据到文本文件
- 数据从sqlserver中导出到access数据库中
- 数据从sqlserver中导出到access数据库中
- 从数据库中导出数据以excel格式保存到本地
- 如何将 Access 数据导出到 Oracle 数据库中?
- 从Oracle中通过Spool导出数据到TXT文件中
- Sqoop 从hdfs中把数据导出到oracle
- 如果从ORACLE导出批量数据以EXCEL格式.
- Access导入导出(mdb和ISAM格式)
- 从radgird中导出数据到excle
- sqoop从hive中导出oracle数据
- winform中 以excel的格式导出 listview的数据 到指定目标文件夹
- 2006-5-9 从 MySql 导出数据到 Access中——实践小结 By Stabx
- 2006-5-10 从 MySql 导出数据到 Access中——完全篇 By Stabx
- Oracle中表数据导出到excel中
- Linux命令grep -a:Binary file (standard input) matches
- spring mvc 拦截器打印详细的请求参数信息
- 洛谷 P1328 生活大爆炸版石头剪刀布
- Matlab 并行代码
- 关于寻找shape特征(feature)的方法总结
- 从oracle中导出数据到access中,以mdb格式导出文件
- git上传项目到github
- 五大常用算法之一:分治算法
- 洛谷 P1019 单词接龙
- java和C结构体通信
- java web的MVC开发模式
- BroadcastReceiver应用详解
- Grid / Custom command view detail informations
- GitLab 结合 sourceTree 图形化管理使用