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 】
- java使用Xstream注解 解析xml文件 并将数据导入MySql数据库中
- java xStream解析xml文件
- 通过sql文件将数据导入mysql数据库中
- 使用RMySQL将csv文件数据导入MySQL数据库
- java中解析复杂xml(XStream简单使用)
- 使用jar包XStream解析xml数据
- 在VS2010中利用百度地图Place API获取POI数据(XML文件方式存储),并导入mysql数据库
- XStream解析xml数据
- 使用XStream解析复杂的XML文件
- 解析XML文件(一)----使用XStream方式
- 使用XStream解析复杂的XML文件
- 使用XStream解析和生成xml文件
- 使用XStream解析复杂的XML文件
- 使用XStream解析复杂的XML文件
- XStream解析xml文件
- XStream解析XMl文件
- Xstream解析XML文件
- Xstream解析XML文件
- HDU - 4712 Hamming Distance(坑爹的随机数算法 + 暴力求解)
- Linux 内核学习之内存寻址(一) 硬件寻址
- Unreal Engine 4 Terminology
- for (int i = 0; gc_handDataOutput->QueryNumberOfHands(); ++i)
- 登录出错不过3,结合springsec
- java使用Xstream注解 解析xml文件 并将数据导入MySql数据库中
- 大数相乘之求N!
- Spring如何实现自动依赖注入-------autowire
- .net/c#得到EXCEL表格中的有效行数和列数
- 打印一组数字中最大数及出现的次数
- LayoutInflater.inflate(resid, parent, false)
- 在家你懂的貌晾够讼澈戳颐蘸蔚磁于
- ASP.NET MVC Json()处理大数据异常解决方法
- Perl Learning 8 Processing Text with Regular Expression