在进行应用程序开发特别是一些主要以查询数据库为主的应用时,用很多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));
}
}