刚学习java不久,在做DRP分销商管理这个项目中,发现很多新东西,需要我们不断总结。今天我们就来介绍一下导入XML文件。
在实际应用中,导入是一项很重要的功能,一般来说我们常用的是导入Excel,Word等,但是今天我们要导入的是XML文件,因为XML是一种纯文本文件,具有很好的兼容性和可扩展性,在数据传输和共享的时候更具有通用性。
1、需要导入的XML文件
文件中每一个标签如< NUMERO >、< REPOSICION >等,对应数据库中的一个字段。当我们引入相应的jar包,如dom4j等,之后就可以编写导入的方法。
<?xml version="1.0" encoding="utf-8"?>
<ACCESOS>
<item>
<SOCIO>
<NUMERO>00045050</NUMERO>
<REPOSICION>0</REPOSICION>
<NOMBRE>MOISES MORENO</NOMBRE>
<TURNOS>
<LU>T1</LU>
<MA>T2</MA>
<MI>T3</MI>
<JU>T4</JU>
<VI>T5</VI>
<SA>T6</SA>
<DO>T7</DO>
</TURNOS>
</SOCIO>
</item>
<item>
<SOCIO>
<NUMERO>00045051</NUMERO>
<REPOSICION>0</REPOSICION>
<NOMBRE>RUTH PENA</NOMBRE>
<TURNOS>
<LU>S1</LU>
<MA>S2</MA>
<MI>S3</MI>
<JU>S4</JU>
<VI>S5</VI>
<SA>S6</SA>
<DO>S7</DO>
</TURNOS>
</SOCIO>
</item>
</ACCESOS>
2、连接数据库的类方法
此类用于连接数据库,类似于之前在.net那边使用的SQLHelper。
/**
* 封装数据常用操作
* @author Administrator
*
*/
public class DbUtil {
/**
* 取得Connection
* @return
*/
public static Connection getConnection(){
Connection conn=null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");//加载驱动
String url="jdbc:oracle:thin:@192.168.26.206:1521:ORCL";
//连接数据库的用户名和密码
String username="shiqidrp";
String password="shiqidrp";
conn=DriverManager.getConnection(url,username,password);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
/**
* 关闭ResultSet对象,释放资源
* @param rs
*/
public static void close(ResultSet rs)
{
if(rs!=null)
{
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 关闭Connection对象,释放资源
* @param conn
*/
public static void close(Connection conn)
{
if(conn!=null)
{
try {
conn.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
/**
* 关闭PreparedStatement对象,释放资源
* @param pstmt
*/
public static void close(PreparedStatement pstmt)
{
if(pstmt!=null)
{
try {
pstmt.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
/**
* 关闭Statement对象,释放资源
* @param pstmt
*/
public static void close(Statement pstmt)
{
if(pstmt!=null)
{
try {
pstmt.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
/**
* 开启事务
* @param conn
*/
public static void beginTransaction(Connection conn)
{
try {
if(conn!=null){
if(conn.getAutoCommit())
{
conn.setAutoCommit(false);
}
}
} catch (SQLException e) {
}
}
/**
* 关闭事务
* @param conn
*/
public static void commitTransaction(Connection conn)
{
try {
if(conn!=null){
if(!conn.getAutoCommit())
{
conn.commit();
}
}
} catch (SQLException e) {
}
}
/**
* 回滚事务
* @param conn
*/
public static void rollbackTransaction(Connection conn)
{
try {
if(conn!=null){
if(!conn.getAutoCommit())
{
conn.rollback();
}
}
} catch (SQLException e) {
}
}
/**
* 重置事务
* @param conn
*/
public static void resetTransaction(Connection conn)
{
try {
if(conn!=null){
if(conn.getAutoCommit())
{
conn.setAutoCommit(false);
}else{
conn.setAutoCommit(true);
}
}
} catch (SQLException e) {
}
}
}
3、执行导入的类
利用此类,读取XML文件中的数据并保存到数据库中。
public class TestXMLImport {
/**
* @param args
*/
public static void main(String[] args) {
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 document=new SAXReader().read(new File("G:/提高班/7DRP/drp/test_xmlImport/xml/test01.XML"));
//获得我们所需要的节点集
List itemList=document.selectNodes("/ACCESOS/item/SOCIO");
//循环得到节点集中元素,并转化成SQL语句
for(Iterator iterator=itemList.iterator();iterator.hasNext();)
{
//得到相应的节点的值
Element element=(Element)iterator.next();
String numero = element.elementText("NUMERO");
String reposicion = element.elementText("REPOSICION");
String nombre = element.elementText("NOMBRE");
List turnosList=element.elements("TURNOS");
StringBuffer sbBuffer=new StringBuffer();
//循环得到TURNOS节点下的元素,并拼成串
for(Iterator iterator1=turnosList.iterator();iterator1.hasNext();)
{
Element turnosElt = (Element)iterator1.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");
sbBuffer.append(lu + "," + ma + "," + mi + "," + ju + "," + vi + "," + sa + "," + doo);
}
//给SQL语句赋值
pstmt.setString(1, numero);
pstmt.setString(2, reposicion);
pstmt.setString(3, nombre);
pstmt.setString(4, sbBuffer.toString());
//保存生成的SQL语句
pstmt.addBatch();
}
//批量执行SQL语句
pstmt.executeBatch();
System.out.println("將xml導入成功");
} catch (Exception e) {
e.printStackTrace();
}
}
}
4总结
我们在学习过程中,不要仅仅为了实现功能,最主要的还是了解实现的这个过程,这种思路,当我们下次再导入其他格式的文件时就可以自己动手实现了。总之,学习在于总结出的学习方法,如何让学习变得简单,就看我们怎么做总结了。