Dom4j 解析及遍历XML 解决SQL硬编码

   在进行应用程序开发特别是一些主要以查询数据库为主的应用时,用很多SQL语句是必须的,这时,如果全把SQL语句写在程序代码中,很不利于维护代码,对于这种硬编码,我们自然可以通过将SQL语句保存到XML中,在程序中主要通过解析XML,然后找到对应的SQL语句,如果要修改或添加,我们也只需要按照自己定义的规则修改或添加,这样维护代码很容易。

 

  下面我写一个我自己常用的解决办法:

   我的思路是将SQL语句按照:

   <SqlData>

   <ClassName></ClassName>

   <Index></Index>

   <Sql>

  select * from table .....

                </Sql>

   </SqlData>

    ....

    ....

   的格式在xml进行存储,然后通过对应的className及Index号来进行查询,这样可以很方面的进行管理

   关于解析XML,我也提一下,我们知道常见的解析XML的方法有四种,分别是DOM,SAX,DOM4J和JDOM

   关于他们之间的具体区别和联系,可以参见下面的链接:http://developer.51cto.com/art/200903/117512.htm

   这里我分享一下通过DOM4J来进行我想要的XML解析:

   DOM4J解析XML相对比较简单,而且效率很高,但是需要外添加包dom4j-1.6.1.jar

   import java.io.File;

import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class SqlXmlPrase {
	
	String classFullName ;
	int index ;
	File file ;
	
	public SqlXmlPrase(String XmlPath){
		file = new File(XmlPath);
	}
	
	public String getSql(String classFullName,int index){
		String className = new Throwable().getStackTrace()[1].getClassName();//反射机制,得到当前类名,此处没有用到
		try {
			SAXReader saxReader = new SAXReader();//使用 SAXReader 解析 XML文档
			Document document = saxReader.read(file);
			Element root = document.getRootElement();//得到Root元素
			for(Iterator iterator = root.elementIterator();iterator.hasNext();)//依次进行迭代查询
			{
				Element element = (Element)iterator.next();
				String name= element.element("ClassName").getText();//查询ClassName
				int curIndex = Integer.parseInt(element.element("Index").getText());//查询Index
				if(name.equals(classFullName)&& index == curIndex)//进行比较,判断是否是自己需要的
				return element.element("Sql").getText();//如果是,返回
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		return null;
	}
	
	public static void main(String[] argv){
		  SqlXmlPrase dom4jParser=new SqlXmlPrase("c:\\sqlconfig.xml");
		  System.out.println(dom4jParser.getSql("**想查的类名***", 2));
	}
		   
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值