利用xml在不同数据库中交换数据
来源:互联网 发布:淘宝卖家怎么贷款 编辑:程序博客网 时间:2024/06/03 18:03
XML在不同语言,不同数据源中交换数据已经成为主流。用XML在不同数据库中交换数据,可以达到安全,灵活的目的。
将sql数据库一个表中的数据库导出到xml文件中,再通过dom4j读取xml文件,将xml中的数据写入到Oracle数据库中。
一:分析表结构,建立目标数据库表。
既然是不同的数据库,但是数据库表结果应该是一样的,在实际项目中,一般是首先分析表结构。利用已经存在的xml文件,或者数据库表,在目的数据库中建立对应的表。原数据库与目标数据库的表结构是一致的。
二:将sql server数据库中的数据导出成xml文件。
一般情况为了安全起见,不会开放数据库,只能将数据库中的数据导出到xml。Sql server导出到xml的方法如下:
利用sql查询语句
- select * from classInfo for xml path('my'),root('myRoot')
这里的classInfo是表名称,for xml path是关键语句,表示查询结果以xml的形式输出。其中括号和其中的my可以省略。它代表xml文件的一个行目录,每一个my代表数据库的一条记录,my是自己命名的节点名称,可以是任意名称。root('myRoot')代表xml文件的根目录是myRoot,也可以自己命名。
数据库中的记录为:
生成的xml文件为:
- <myRoot>
- <my>
- <classNo>07</classNo>
- <classes>07</classes>
- <grade>2008</grade>
- <classSize>90</classSize>
- <collegeNo>01</collegeNo>
- <specialtyNo>01001</specialtyNo>
- <assistant></assistant>
- <remark>无</remark>
- <IsEffective>是</IsEffective>
- </my>
- <my>
- <classNo>09</classNo>
- <classes>音乐</classes>
- <grade>如:2008</grade>
- <classSize>90</classSize>
- <collegeNo>06</collegeNo>
- <specialtyNo>09</specialtyNo>
- <assistant></assistant>
- <remark>无</remark>
- <IsEffective>是</IsEffective>
- </my>
- <my>
- <classNo>123</classNo>
- <classes>faf</classes>
- <grade>如:2008</grade>
- <classSize>22</classSize>
- <collegeNo>01</collegeNo>
- <specialtyNo>234r</specialtyNo>
- <assistant>234</assistant>
- <remark>af</remark>
- <IsEffective>是</IsEffective>
- </my>
- <my>
- <classNo>323</classNo>
- <classes>33</classes>
- <grade>20093</grade>
- <classSize>33</classSize>
- <collegeNo>01</collegeNo>
- <specialtyNo>就</specialtyNo>
- <assistant>234</assistant>
- <remark>333</remark>
- <IsEffective>是</IsEffective>
- </my>
- <my>
- <classNo>999</classNo>
- <classes>信息2班</classes>
- <grade>2008</grade>
- <classSize>80</classSize>
- <collegeNo>01</collegeNo>
- <specialtyNo>03</specialtyNo>
- <assistant>234</assistant>
- <remark>好</remark>
- <IsEffective>是</IsEffective>
- </my>
- </myRoot>
三:配置开发环境,编写读取XML文件和写入数据库的语句。
上文中已经说到了如何读取xml文件。这里利用dom4j读取配置文件,将xml中的数据读取出来。
数据库助手类,负责连接,关闭数据库
- package com.lsh.testXML;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.SQLException;
- /**
- * 数据库工具类
- * @author 李守宏
- *
- */
- public class DBUtil {
- /**
- * 取得数据库连接
- * @return
- */
- public static Connection getConnection() {
- Connection conn = null;
- try {
- Class.forName("oracle.jdbc.driver.OracleDriver");
- String dbUrl = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
- String username = "drp";
- String password = "drp";
- conn = DriverManager.getConnection(dbUrl, username, password);
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return conn;
- }
- //关闭preparedStatement
- public static void close(PreparedStatement pstmt) {
- if (pstmt != null) {
- try {
- pstmt.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
- //关闭connection
- public static void close(Connection conn) {
- if (conn != null) {
- try {
- conn.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
- }
执行读取xml和写入oracel数据库的程序:
- package com.lsh.testXML;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.util.Iterator;
- import java.util.List;
- import org.dom4j.Document;
- import org.dom4j.DocumentException;
- import org.dom4j.Element;
- import org.dom4j.io.SAXReader;
- /**
- * 利用dom4j读取xml,再写入到oracel数据库中
- * @作者 李守宏——七期信息技术提高班
- * @创建日期 2012-2-18
- */
- public class test {
- /**
- * @param args
- */
- public static void main(String[] args) {
- try {
- //my.xml位于classpath路径下,也可以放到其他路径,这里只要指明路径就行
- Document doc = new SAXReader().read(Thread.currentThread().getContextClassLoader().getResourceAsStream("my.XML"));
- xmlTODB(doc.selectNodes("/myRoot/my"));
- } catch (DocumentException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- private static void xmlTODB(List itemList){
- String sql = "insert into classInfo(Classno,Classes,Grade,Classsize,Collegeno,Specialtyno,Assistant,Remark,Iseffective)" +
- " values(?,?,?,?,?,?,?,?,?)";
- Connection conn = null;
- PreparedStatement pstmt = null;
- try{
- conn = DBUtil.getConnection();
- pstmt = conn.prepareStatement(sql);
- //迭代获取xml每个节点的值,将xml读出的数据看成一个list
- for(Iterator iter=itemList.iterator();iter.hasNext();){
- Element elt = (Element)iter.next();
- String classNo = elt.elementText("classNo");
- String classes =elt.elementText("classes");
- String grade = elt.elementText("grade");
- String classSize = elt.elementText("classSize");
- String specialtyNo = elt.elementText("specialtyNo");
- String collegeNo = elt.elementText("collegeNo");
- String assistant = elt.elementText("assistant");
- String remark = elt.elementText("remark");
- String isEffective = elt.elementText("IsEffective");
- pstmt.setString(1, classNo);
- pstmt.setString(2, classes);
- pstmt.setString(3, grade);
- pstmt.setString(4, classSize);
- pstmt.setString(5, specialtyNo);
- pstmt.setString(6, collegeNo);
- pstmt.setString(7, assistant);
- pstmt.setString(8, remark);
- pstmt.setString(9, isEffective);
- pstmt.addBatch();
- }
- pstmt.executeBatch();
- System.out.println("ok");
- }catch(Exception e){
- e.printStackTrace();
- }finally{
- DBUtil.close(conn);
- DBUtil.close(pstmt);
- }
- }
- }
PS:注意在sql中不区分大小写,在xml中区分大小写。
- 利用XML在不同数据库中交换数据
- 利用XML在不同数据库中交换数据
- 利用XML在不同数据库中交换数据
- 利用XML在不同数据库中交换数据
- 利用xml在不同数据库中交换数据
- 利用DB_LINK在不同平台的数据库中复制数据。
- 利用Navicat传输MySql中不同数据库的数据
- mybatis的xml中判断不同数据库,获得数据
- 利用data store在不同模型中传递数据
- 如何在不同的数据库中解析SQL Server数据
- 在不同的数据库中解析SQLServer数据
- 在VS2010中利用百度地图Place API获取POI数据(XML文件方式存储),并导入mysql数据库
- 在jQuery中利用AJAX加载XML数据并解析
- 在jQuery中利用AJAX加载XML数据并解析
- 在jQuery中利用AJAX加载XML数据并解析
- 在jQuery中利用AJAX加载XML数据并解析
- 在jQuery中利用AJAX加载XML数据并解析
- [.net]利用xml在两个不同的站点上传递数据
- JS实现兼容IE6、IE7、IE8的图片上传前预览效果
- HDU 2056 Rectangles (求两个相交矩形面积)
- 创建数据库
- OpenCV 编程简介(矩阵/图像/视频的基本读写操作)
- POJ 3537 Crosses and Crosses
- 利用xml在不同数据库中交换数据
- DBMS_SPACE查找使用和未使用的空间
- 向oracle中获取记录集的代码
- mysql旧版本密码长度问题
- Getting Started With Burp Suite
- HDU 2030 汉字统计
- linux下firefox安装Adobe Flash Player插件
- ubuntu下安装 gSOAP 用于C/C++开发web service服务端与客户端
- OpenCV摄像头视频的获取