在Web编程过程中,往往涉及到读取XML配置文件,上网查了许多,都是通过用DOM解析或者SAX解析来完成的。下面就将我在项目中(我用的是Jdom操作XML,这里需要先下载jdom.jar包,然后将Oracle中的数据读取添加到SQL2005中,我是用jdbc读取Oracle,然后用LinkSQLServerBean.java写入SQL2005)做的关于XML解析的代码说明如下:
1.新件一个jdbc.xml文件,把它放到WEB-INF目录下,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<jdbcdriver>
<drivername>oracle.jdbc.driver.OracleDriver</drivername>
<url>jdbc:oracle:thin:@192.168.0.25:1521:test</url>
<username>test</username>
<password>123</password>
</jdbcdriver>
2.新建一个读取jdbc.xml类,名叫ReadWebinfoJdbcXml.java,我是放到util包下,代码如下:
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
public class ReadWebinfoJdbcXml{
//根据当前的类,得到webinfo的路径
public String getWebinfoAddress(){
Class theClass = ReadWebinfoJdbcXml.class;
java.net.URL u = theClass.getResource("");
//str会得到这个函数所在类的路径
String str = u.toString();
//截去一些前面6个无用的字符
str = str.substring(6, str.length());
//将%20换成空格(如果文件夹的名称带有空格的话,会在取得的字符串上变成%20)
str = str.replaceAll("%20", " ");
//查找“WEB-INF”在该字符串的位置
int num = str.indexOf("WEB-INF");
//截取即可
str = str.substring(0, num + "WEB-INF".length());
//str输出为:D:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\rtes\WEB-INF
return str;
}
public List<String> getNodeValue(){
SAXBuilder builder = new SAXBuilder();
List<String> list = new ArrayList<String>();
Document doc = null;
try{
doc = builder.build(new File(getWebinfoAddress()+"\\jdbc.xml"));
}catch (Exception e){
e.printStackTrace();
}
Element el = doc.getRootElement();
List<Element> subMenuList = el.getChildren();
for(int i=0;i<subMenuList.size();i++){
String str = ((Element)subMenuList.get(i)).getText();
list.add(str);
}
return list;
}
}
3.新建一个JdbcUtil.java类,用来连接数据库,该类也在util包下,代码如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import com.xtlh.rtes.util.ReadWebinfoJdbcXml;
/**
* <!-- SQL2005驱动程序 -->
*<jdbcdriver>
* <drivername>com.microsoft.sqlserver.jdbc.SQLServerDriver</drivername>
* <url>jdbc:sqlserver://192.168.0.47:1433;DataBaseName=rtes</url>
* <username>sa</username>
* <password>xtlh</password>
*</jdbcdriver>
*
*/
public class JdbcUtil{
static ReadWebinfoJdbcXml readXml=new ReadWebinfoJdbcXml();
static List<String> list=readXml.getNodeValue();
static String driverName=list.get(0);
static String url=list.get(1);
static String username=list.get(2);
static String password=list.get(3);
// 1.加载驱动一次
static{
try{
//Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Class.forName(driverName);
} catch (ClassNotFoundException e){
e.printStackTrace();
}
}
// 2.获得连接
public static Connection getConnection(){
Connection con = null;
// String url="jdbc:sqlserver://192.168.0.47:1433;DataBaseName=rtes";
// String username="sa";
// String password="xtlh";
try{
con = DriverManager.getConnection(url,username,password);
} catch (Exception e){
e.printStackTrace();
}
return con;
}
// 3.释放资源
public static void release(ResultSet rs, Statement stmt, Connection con){
if (rs != null){
try{
rs.close();
} catch (SQLException e){
e.printStackTrace();
}
}
if (stmt != null){
try{
stmt.close();
} catch (SQLException e){
e.printStackTrace();
}
}
if (con != null){
try{
con.close();
} catch (SQLException e){
e.printStackTrace();
}
}
}
// 4.释放资源
public static void release(Object obj){
if (obj instanceof ResultSet){
try{
((ResultSet) obj).close();
} catch (SQLException e){
e.printStackTrace();
}
} else if (obj instanceof Statement){
try{
((Statement) obj).close();
} catch (SQLException e){
e.printStackTrace();
}
} else if (obj instanceof Connection){
try{
((Connection) obj).close();
} catch (SQLException e){
e.printStackTrace();
}
}
}
// 5.打印结果集
public static void printRS(ResultSet rs){
if (rs == null)
return;
try{
ResultSetMetaData md = rs.getMetaData();
int colnum = md.getColumnCount();
StringBuffer sb = new StringBuffer();
while (rs.next()){
for (int i = 1; i <= colnum; i++){
sb.append(md.getColumnName(i));
sb.append("=" + rs.getString(i) + " ");
}
sb.append("\n");
}
System.out.println(sb.toString());
} catch (Exception e){
e.printStackTrace();
}
}
}
4.具体的实现类为ChannelJdbcImpl.java,代码如下:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.xtlh.rtes.database.LinkSQLServerBean;
import com.xtlh.rtes.entity.Channel;
import com.xtlh.rtes.util.JdbcUtil;
import com.xtlh.rtes.util.ToolUnit;
public class ChannelJdbcImpl
{
private Connection con= null;
private PreparedStatement ps= null;
private ResultSet rs= null;
/**
*
* @功能描述 根据对方服务器上的channel表同步本地数据库上的channel表
* @输入参数 无
* @反馈值 Boolean型变量
*/
public Boolean SynchronousChannel()
{
//先删除本地新路段表里的所有数据
deleteAllChannel();
ToolUnit tu = new ToolUnit();
List<Channel> list=new ArrayList<Channel>();
try{
con = JdbcUtil.getConnection();
String sql = "select * from channel";
ps = con.prepareStatement(sql);
ps.execute();
rs = ps.getResultSet();
int count=1;
while(rs.next())
{
Channel channel = makeEntity(tu);
list.add(channel);
if(count%5000==0){
addChannel(list);
list.clear();
}
count++;
}
//然后执行批处理添加新路段表数据,这些数据来自对方服务器上
addChannel(list);
}catch(Exception e){
e.printStackTrace();
}finally{
JdbcUtil.release(rs);
}
return true;
}
private Channel makeEntity(ToolUnit tu) throws SQLException
{
Channel channel = new Channel();
channel.setLxdm(tu.zhuanhuan(rs.getString("lxdm"),""));
channel.setLxjc(tu.zhuanhuan(rs.getString("lxjc"),""));
channel.setGldw_dm(tu.zhuanhuan(rs.getString("gldw_dm"),""));
channel.setGldw(tu.zhuanhuan(rs.getString("gldw"),""));
channel.setLdbh(tu.zhuanhuan(rs.getString("ldbh"),""));
channel.setQdzh(tu.zhuanhuan(rs.getString("qdzh"),""));
channel.setZdzh(tu.zhuanhuan(rs.getString("zdzh"),""));
channel.setLc(tu.zhuanhuan(rs.getString("lc"),""));
channel.setYhdw(tu.zhuanhuan(rs.getString("yhdw"),""));
channel.setXzqh_dm(tu.zhuanhuan(rs.getString("xzqh_dm"),""));
channel.setXzqh(tu.zhuanhuan(rs.getString("xzqh"),""));
channel.setSfcgld(tu.zhuanhuan(rs.getString("sfcgld"),""));
channel.setJsdj_dm(tu.zhuanhuan(rs.getString("jsdj_dm"),""));
channel.setJsdj(tu.zhuanhuan(rs.getString("jsdj"),""));
channel.setCdfl_dm(tu.zhuanhuan(rs.getString("cdfl_dm"),""));
channel.setCdfl(tu.zhuanhuan(rs.getString("cdfl"),""));
channel.setMclx_dm(tu.zhuanhuan(rs.getString("mclx_dm"),""));
channel.setMclx(tu.zhuanhuan(rs.getString("mclx"),""));
channel.setLjkd(tu.zhuanhuan(rs.getString("ljkd"),""));
channel.setLmkd(tu.zhuanhuan(rs.getString("lmkd"),""));
channel.setSjss(tu.zhuanhuan(rs.getString("sjss"),""));
channel.setSjxsl(tu.zhuanhuan(rs.getString("sjxsl"),""));
channel.setDm_dm(tu.zhuanhuan(rs.getString("dm_dm"),""));
channel.setDm(tu.zhuanhuan(rs.getString("dm"),""));
channel.setYhlc(tu.zhuanhuan(rs.getString("yhlc"),""));
channel.setKlhlc(tu.zhuanhuan(rs.getString("klhlc"),""));
channel.setYlhlc(tu.zhuanhuan(rs.getString("ylhlc"),""));
channel.setKgrq(tu.zhuanhuan(rs.getString("kgrq"),""));
channel.setJgrq(tu.zhuanhuan(rs.getString("jgrq"),""));
channel.setTcrq(tu.zhuanhuan(rs.getString("tcrq"),""));
channel.setBgrq(tu.zhuanhuan(rs.getString("bgrq"),""));
channel.setPqxbj(tu.zhuanhuan(rs.getString("pqxbj"),""));
channel.setZdzp(tu.zhuanhuan(rs.getString("zdzp"),""));
return channel;
}
/**
*
* @功能描述 添加新路段数据
* @输入参数 list
* @反馈值 无
*/
public void addChannel(List<Channel> list){
con = LinkSQLServerBean.getConnection();// 获取数据库连接
String sql = "insert into channel values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
try{
con.setAutoCommit(false);//开始事务
ps = con.prepareStatement(sql);
Iterator<Channel> it=list.iterator();
// long start = System.currentTimeMillis();
while(it.hasNext()){
Channel channel=(Channel)it.next();
ps.setString(1,channel.getLxdm() );
ps.setString(2,channel.getLxjc());
ps.setString(3,channel.getGldw_dm());
ps.setString(4,channel.getGldw());
ps.setString(5,channel.getLdbh());
ps.setString(6,channel.getQdzh());
ps.setString(7,channel.getZdzh());
ps.setString(8,channel.getLc());
ps.setString(9,channel.getYhdw());
ps.setString(10,channel.getXzqh_dm());
ps.setString(11,channel.getXzqh() );
ps.setString(12,channel.getSfcgld());
ps.setString(13,channel.getJsdj_dm());
if("高速".equals(channel.getJsdj())){
ps.setString(14,"高速公路");
}else if("一级".equals(channel.getJsdj())){
ps.setString(14,"一级公路");
}else if("二级".equals(channel.getJsdj())){
ps.setString(14,"二级公路");
}else if("三级".equals(channel.getJsdj())){
ps.setString(14,"三级公路");
}else if("四级".equals(channel.getJsdj())){
ps.setString(14,"四级公路");
}else{
ps.setString(14,"四级公路");
}
ps.setString(15,channel.getCdfl_dm());
ps.setString(16,channel.getCdfl());
ps.setString(17,channel.getMclx_dm());
if("水泥混凝土".equals(channel.getMclx())){
ps.setString(18,"水泥路面");
}else if("沥青混凝土".equals(channel.getMclx())){
ps.setString(18,"沥青路面");
}else{
ps.setString(18,"砂石路面");
}
ps.setString(19,channel.getLjkd());
ps.setString(20,channel.getLmkd());
ps.setString(21,channel.getSjss() );
ps.setString(22,channel.getSjxsl());
ps.setString(23,channel.getDm_dm());
ps.setString(24,channel.getDm());
ps.setString(25,channel.getYhlc());
ps.setString(26,channel.getKlhlc());
ps.setString(27,channel.getYlhlc());
ps.setString(28,channel.getKgrq());
ps.setString(29,channel.getJgrq());
ps.setString(30,channel.getTcrq());
ps.setString(31,channel.getBgrq());
ps.setString(32,channel.getPqxbj());
ps.setString(33,channel.getZdzp());
ps.addBatch(); //因为我用到的数据量比较大,所以需要批处理语句。
}
// long end = System.currentTimeMillis();
// System.out.println("addBatch耗时:"+(end - start)+"ms");
ps.executeBatch();
// long end2 = System.currentTimeMillis();
// System.out.println("executeBatch耗时:"+(end2 - end)+"ms");
con.commit();//提交事务
ps.clearBatch();
}catch(RuntimeException e){
try{
con.rollback();
}catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}catch(Exception e){
try{
con.rollback();
}catch(SQLException e1){
e1.printStackTrace();
}
e.printStackTrace();
}finally{
LinkSQLServerBean.ReleaseDatabase(ps);
LinkSQLServerBean.ReleaseDatabase(con);
}
}
/**
*
* @功能描述 删除新路段表数据
* @输入参数 无
* @反馈值 无
*/
public void deleteAllChannel(){
con = LinkSQLServerBean.getConnection();// 获取数据库连接
String sql="delete from channel";
try{
con.setAutoCommit(false);//开始事务
ps = con.prepareStatement(sql);
ps.execute();
con.commit();//提交事务
}catch(RuntimeException e){
try{
con.rollback();
}catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}catch(Exception e){
try{
con.rollback();
}catch(SQLException e1){
e1.printStackTrace();
}
e.printStackTrace();
}finally{
LinkSQLServerBean.ReleaseDatabase(ps);
LinkSQLServerBean.ReleaseDatabase(con);
}
}
}
5.LinkSQLServerBean.java类,也放在util包下,该类用来连接SQL2005数据库,这里用到Tomcat的连接池,代码如下:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class LinkSQLServerBean
{
static Context ctx = null;
static DataSource ds = null;
static
{
try
{
ctx = new InitialContext();
ds = (DataSource) ctx.lookup("java:/comp/env/jdbc/rtes");
}
catch(Exception e){ e.printStackTrace();}
}
/**
*
* @Function getConnection()
* @Description 获取数据库连接
* @Return 返回数据库连接的对象,返回值类型-Connection
*/
public static Connection getConnection()
{
Connection conn = null;
try
{
conn = ds.getConnection();
}
catch(Exception e){ e.printStackTrace();}
return conn;
}
/**
*
* @Function ReleaseDatabase(Object o)
* @Description 释放数据库连接||关闭Statement||关闭PreparedStatement||关闭ResultSet
* @Input Connection||Statement||PreparedStatement||ResultSet
*/
public static void ReleaseDatabase(Object o)
{
try
{
if(o instanceof ResultSet)
{
((ResultSet)o).close();
}
else if(o instanceof Statement)
{
((Statement)o).close();
}
else if(o instanceof PreparedStatement)
{
((PreparedStatement)o).close();
}
else if(o instanceof Connection)
{
((Connection)o).close();
}
}catch(Exception e)
{
e.printStackTrace();
}
}
}
6.连接池配置文件为:首打开tomcat下的conf文件,然后打开context.xml文件,填写如下代码:
<Resource name="jdbc/rtes"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://192.168.0.47:1433;DataBaseName=rtes"
username="sa"
password="xtlh"
maxIdle="10"
maxWait="5000"
maxActive="200" />
关闭该文件,重启Tomcat,这样就把连接池配置成功了。
- jdom.jar (149.2 KB)
- 下载次数: 4
相关推荐
要读取XML文件,Java提供了多种方法。以下是四种常用的方法,每种都有其适用场景和特点: 1. **DOM解析器(Document Object Model)** DOM解析器将整个XML文件加载到内存中,创建一个树形结构,允许我们通过节点...
本文将详细介绍如何使用Java来读取和修改XML文件,主要涉及以下几个核心知识点: 1. **DOM解析器**: Document Object Model(DOM)是一种将XML文档转换为内存中的树形结构的方法,使得可以遍历和修改XML文件。...
### Java读写XML文件知识点详解 #### 一、概述 在Java编程中,对XML文件进行读取与写入是一项非常常见的任务。XML(可扩展标记语言)是一种用于标记数据的语言,非常适合用来存储和传输数据。Java提供了多种API来...
Java 读取 XML 文件是 Java 开发中常见的一项任务,XML(eXtensible Markup Language)作为一种可扩展标记语言,广泛用于数据交换、配置存储等领域。本教程将深入讲解如何在 Java 中处理 XML 文件,同时涉及 XML 的 ...
以下是一个基本的Java代码示例,演示了如何读取XML文件: ```java import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import org.w3c....
在Java编程语言中,XML(eXtensible Markup Language)是一种重要的数据交换格式,用于存储和...在提供的"在java中读写XML文件.ppt"和"源码"中,可能包含了更多详细的步骤和示例代码,可以帮助你进一步理解这个主题。
### Java读写XML文件操作详解 在现代软件开发中,XML(可扩展标记语言)是一种广泛使用的数据交换格式,尤其在处理配置文件、数据存储以及跨平台数据交换时显得尤为重要。Java提供了多种读写XML文件的方法,包括SAX...
在Java编程中,XML...根据实际需求,可以选择最适合的解析方式来读取和操作XML文件。在处理大量数据或内存有限的情况下,推荐使用SAX或StAX,以减少内存占用;对于小型或中型的XML文件,DOM解析可能更为方便。
二、Java读取XML文件 1. 使用DOM解析: 读取XML文件时,首先会将整个XML文档加载到内存中的DOM树,然后通过API遍历和访问各个节点。 示例代码: ```java import javax.xml.parsers.DocumentBuilder; import javax....
在Java中,处理XML文件主要有四种方式:DOM(Document Object Model)、SAX(Simple API for XML)、StAX(Streaming API for XML)以及JAXB(Java Architecture for XML Binding)。下面将详细介绍这四种方法。 1....
例如,如果知道每个XML文件包含特定的元素,可以编写代码直接查找并处理这些元素,而不是遍历整个文档。 总的来说,Java提供了强大的工具集来处理XML文件。无论是导入还是导出,选择合适的解析器和API能有效提高...
### Java读写XML文件的方法详解 #### 一、概述 在Java编程中,XML(Extensible Markup Language,可扩展标记语言)是一种广泛使用的数据交换格式。由于其良好的跨平台特性和自描述性,使得XML成为了许多应用程序...
Java 读取 XML 文件的四种方法 在 Java 中读取 XML 文件有多种方法,本文将介绍四种常用的方法:DOM 实现方法、DOM4J 实现方法、JDOM 实现方法和SAX 实现方法。 DOM 实现方法 DOM(Document Object Model)是 W3C...
本项目“java实现Xml文件读写”提供了一个完整的工程实例,包含了对XML文件进行添加、修改和读取的基本操作。 首先,要实现XML文件的读取,Java提供了`javax.xml.parsers`和`org.w3c.dom`这两个核心包。其中,`...
为了深入理解这些概念,你可以参考Java的官方文档,学习每个API的用法,并通过实践编写代码来操作XML文件,例如,创建XML文件,读取XML文件,添加、删除和修改元素,验证XML结构等。同时,也可以查阅DOM4J、JDOM等第...
Java 读取 XML 文件的四种方法 在 Java 中读取 XML 文件有多种方法,本文将介绍四种常见的方法,分别使用 DOM、DOM4J、JDOM 和 SAX 解析器。 第一种方法:使用 DOM DOM(Document Object Model)是一种树形结构,...
### Java操作XML文件读写与树型...通过上述分析,我们不仅了解了如何使用Java和JDOM库读写XML文件,还探讨了基于XML数据生成树型菜单的基本思路。这对于开发需要处理复杂结构化数据的应用程序来说是非常有用的技能。
总结起来,Java读取本地XML文件涉及的主要步骤包括创建`DocumentBuilderFactory`,构建`DocumentBuilder`,解析XML文件为`Document`对象,然后通过`Document`对象访问和操作XML结构。对于复杂需求,XPath可以提供更...