java使用Xstream注解 解析xml文件 并将数据导入MySql数据库中

来源:互联网 发布:软件小品官网 编辑:程序博客网 时间:2024/06/05 18:23

需要解析的xml文件如下:

java类一一xml文件的第一层


java类一一xml文件的第二层


java类一一xml文件的第三层


java类一一xml文件的第四层



xml转化工具类:

public class ParseXmlUtil {

/**
* 序列化对象为XML字符串

* @param channels 对象
* @param isFormat 是否格式化输出

* @return XML字符串
*/
public static String toXML(Channels channels, boolean isFormat) {
/**
* new DomDriver()用于解决java.lang.NoClassDefFoundError: org/xmlpull/v1/XmlPullParserFactory问题
*/
XStream xmlConverter = new XStream(new DomDriver());
xmlConverter.processAnnotations(Channels.class);
xmlConverter.processAnnotations(Channel.class);
xmlConverter.processAnnotations(ChannelDate.class);
xmlConverter.processAnnotations(Program.class);
if (!isFormat) {
StringWriter writer = new StringWriter();
xmlConverter.marshal(channels, new CompactWriter(writer));
return writer.toString();
} else {
return xmlConverter.toXML(channels);
}
}

/**
* 序列化XML字符串为对象

* @param xml xml字符串

* @return Channels对象
*/
public static Channels fromXML(String xml) {
/**
* new DomDriver()用于解决java.lang.NoClassDefFoundError: org/xmlpull/v1/XmlPullParserFactory问题
*/
XStream xmlConverter = new XStream(new DomDriver());
xmlConverter.processAnnotations(Channels.class);
xmlConverter.processAnnotations(Channel.class);
xmlConverter.processAnnotations(ChannelDate.class);
xmlConverter.processAnnotations(Program.class);
return (Channels) xmlConverter.fromXML(xml);
}

/**
* 序列化XML文件为对象

* @param xml xml文件

* @return Channels对象
*/
public static Channels fromXML(File xml) {
/**
* new DomDriver()用于解决java.lang.NoClassDefFoundError: org/xmlpull/v1/XmlPullParserFactory问题
*/
XStream xmlConverter = new XStream(new DomDriver());
xmlConverter.processAnnotations(Channels.class);
xmlConverter.processAnnotations(Channel.class);
xmlConverter.processAnnotations(ChannelDate.class);
xmlConverter.processAnnotations(Program.class);
return (Channels) xmlConverter.fromXML(xml);
}

}


数据库连接工具类:

/**
 * mySql数据库连接工具类
 * @author jinmengjuan 2015-8-5 下午02:02:32
 * @ClassName ConnectionUtils
 * @Description TODO
 * @version V1.0
 */
public class ConnectionUtils {

private static String url = "jdbc:mysql://192.168.11.34:3306/scltv?useUnicode=true&characterEncoding=gbk";
private static String dbUser = "root";
private static String dbPassword = "becom@123";
public static final String name = "com.mysql.jdbc.Driver";  
// /**
// * 读入filename指定的文件,并解析,把键值对中的数据读出
// * 给全局变量url,dbUser,dbPassword赋值
// * @param filename :传入的文件名
// */
// public static void getParam(String filename){
// Properties propes = new Properties();
// File file = new File(filename);
// try {
// FileInputStream fis = new FileInputStream(file);
// //加载输入流指定的文件,数据放入键值对对象
// propes.load(fis);
//// //获取文件中url(key)对应的value,给全局变量赋值
//// url = propes.getProperty("db.url");
//// dbUser = propes.getProperty("db.username");
//// dbPassword = propes.getProperty("db.password");
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
/**
* 利用getParam方法获得的参数,构造连接并返回
* @return 连接对象
*/
public static Connection getConnection(){
// getParam("src/db-conf.properties");
Connection conn = null;
try {
Class.forName(name);//指定连接类型  
// Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(url,dbUser,dbPassword);
System.out.println("连接正常!");
} catch (Exception e) {
e.printStackTrace();
System.out.println("连接错误!");
}
return conn;
}
public static void main(String[] args) throws FileNotFoundException {
getConnection();
}
/**
* 关闭连接
* @param conn
*/
public static void close(Connection conn){
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 关闭语句对象
* @param stmt
*/
public static void close(PreparedStatement stmt){
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 关闭结果集
* @param rs
*/
public static void close(ResultSet rs){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

解析xml文件并将数据插入mysql数据库中:

public class BatchInsertProgramInfosFromXML {

public static void main(String[] args){

String sql = "insert into program_info(channel_id,program_date,program_starttime,program_endtime,program_name) " +
"values(?,?,?,?,?);";

//根据频道的guid查询频道主键id - 用于塞入节目信息表中
String searchsql = "select channel_id from channel_info  where guid=?";

Connection conn = null;
PreparedStatement pstmt = null;
PreparedStatement pst = null;

try {
       conn = ConnectionUtils.getConnection();
       pstmt = (PreparedStatement) conn.prepareStatement(sql);
       
       Channels aa = (Channels) ParseXmlUtil.fromXML(new File("UTIEPGList.xml"));
       
       for (Channel channel : aa.getChannels()) {
System.out.println(channel.getGuid());
System.out.println(channel.getChannelName());

/** 根据guid查询频道主键id - 用于存入节目信息表中 start **/
pst = (PreparedStatement)conn.prepareStatement(searchsql);
pst.setString(1, channel.getGuid());
ResultSet rs = pst.executeQuery();
int channelId = 0;
while(rs.next()){
channelId = rs.getInt("channel_id");
}
/** 根据guid查询频道主键id - 用于存入节目信息表中 end **/

for (ChannelDate channelDate : channel.getChannelDates()) {
String programDate = channelDate.getChannelDateName();

for (Program program : channelDate.getPrograms()) {

pstmt.setInt(1,channelId);
pstmt.setString(2,programDate);
pstmt.setString(3,program.getProgramStartTime());
pstmt.setString(4,program.getProgramEndTime());
pstmt.setString(5,program.getProgramName());

pstmt.addBatch();
}
}

}
       pstmt.executeBatch();//批量增加节目信息
       conn.commit();
       
       System.out.println("将xml导入数据库成功!");
        } catch (Exception e) {
       e.printStackTrace();
        }finally{
        ConnectionUtils.close(pst);
ConnectionUtils.close(pstmt);
ConnectionUtils.close(conn);
}
}

}

补充:依赖架包 【部分代码及架包下载地址:http://download.csdn.net/detail/rainbow_m/9024945  






0 0
原创粉丝点击