Dom4j+PLSQL XML文件导入数据库

来源:互联网 发布:有哪些工作 知乎 编辑:程序博客网 时间:2024/06/05 06:45

   之前了解过一篇,是通过Dom4j读取XML文件http://blog.csdn.net/huo065000/article/details/47866461,由于一些原因,我们会遇到一些这样的情况 ,解析XML,将其放到数据库中保存,然后再适当的时候再读取出来显示,所以如何将我们的这次我们借助于dom4j来完成我们XML文件存入数据库的操作。

Step-1:

     在进行操作之前,你必须要存在一个这样的数据库表来进行接收操作。对于数据库表的创建,我们可以采用PL SQL 直接导入sql操作,然后直接存入数据库:文件--打开--选择SQL Script,则可以导入写好的sql语句。这样想要的表则存入数据库中。

Step-2:

数据库表创建成功之后,则可以回到我们的工具(Eclipse/MyEclipse……)上,建立lib包,然后引入三个必要的jar包

  • dom4j-1.6.1.jar(因为采用dom4j辅助存入,所以这个是必要的)
  • jaxen-1.1-beta-6jar(使用dom4j解析XML时,要快速获取某个节点的数据,使用XPath是个不错的方法)
  • ojdbc6.jar(和数据库打交道)
Step-3:
1、建立一个文件包,将我们需要保存到数据库的xml文件放入其中。
2、在src下建立一个包,在其中建立两个类,一个用来存放执行方法,另一个用来和数据库进行连接

Step-4:
     一切准备工作完成之后,就可以实行填充工作了,首先Until中添加数据库连接操作:
/** * @ClassName: DbUtil * @Description: 封装数据库常用操作 * @author: HuoYaJing * @date:2015年10月6日 下午6:51:42 */public class DbUtil {/** * @throws SQLException * @Title: getConnection * @Description: 取得Connection * @param @return * @return Connection * @throws */public static Connection getConnection() {// 加载驱动,使用反射来实现Connection conn = null;try {                        //驱动连接 Class.forName("oracle.jdbc.driver.OracleDriver");// 连接 String url = "jdbc:oracle:thin:@127.0.0.1:1521:ORCLE"; String username = "C##drp1";  //连接数据库的用户名 String password = "drp1";     //连接数据库的密码 conn = DriverManager.getConnection(url, username, password);  //进行连接} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}return conn;}
TestXMLImport中进行操作:
public static void main(String[] args) throws SQLException {// TODO Auto-generated method stub//执行插入的SQL语句String sql="insert into t_xml(NUMERO, REPOSICION, NOMBRE, TURNOS) values (?, ?, ?, ?)";Connection conn = null;PreparedStatement pstmt = null;try {conn = DbUtil.getConnection();pstmt = conn.prepareStatement(sql);//读取xml文件存放的路径Document doc=new SAXReader().read(new File("E:\\提高班学习资料\\接口管理系统\\Source\\test_xmlImport\\xml\\test01.xml"));//查找对应的信息,从XMl中找对应的层层关系List itemList= doc.selectNodes("/ACCESOS/item/SOCIO");//遍历for(Iterator iter=itemList.iterator();iter.hasNext();){Element el=(Element) iter.next();//使用Element的elementText属性取值,将值一一取出来String numero=el.elementText("NUMERO");String reposicion=el.elementText("REPOSICION");String nombre=el.elementText("NOMBRE");//返回集合List turnosList=el.elements("TURNOS");StringBuffer sbsString=new StringBuffer();//第二层循环,同理将值一一取出来赋值给变量sbsStringfor(Iterator  iter1=turnosList.iterator();iter1.hasNext();){Element turnosElt=(Element)iter1.next();String lu=turnosElt.elementText("LU");String ma=turnosElt.elementText("MA");String mi=turnosElt.elementText("MI");String ju=turnosElt.elementText("JU");String vi=turnosElt.elementText("VI");String sa=turnosElt.elementText("SA");String doo=turnosElt.elementText("DO");sbsString.append(lu + "," + ma + "," + mi + "," + ju + "," + vi + "," + sa + "," + doo);}//通过pstmt赋值pstmt.setString(1, numero);pstmt.setString(2, reposicion);pstmt.setString(3,nombre);pstmt.setString(4, sbsString.toString());pstmt.addBatch();}pstmt.executeBatch();//提示System.out.println("将XML导入数据库成功"); } catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{//关闭DbUtil.close(pstmt);DbUtil.close(conn);}}
     工作完成,只要对其进行单元测试在console输出框中输出:

     
最后看我们的数据库信息:

     操作完成。对于操作的部分其实就是通过一一遍历读取的操作将其值赋值,通过PreparedStatement(预处理执行语句)操作将numero,reposicion,nombre,sbsString作为4个字段名,将值保存到数据库中的操作。


1 0
原创粉丝点击