例子
import java.io.IOException;
import java.io.InputStream;
public class SqlStatment {
/**
* 取得SQL情报
*
* @param fileName SQL文文件
* @param id SQL文ID
* @return SQL文
*/
public static StringBuffer getSql(String fileName, String id) {
StringBuffer strSql = null;
SqlDigester sqlDigester = new SqlDigester();
SqlXML sqlXml = null;
InputStream in = null;
try {
in = SqlDigester.class.getResourceAsStream("../../app/data/" +
fileName);
sqlXml = sqlDigester.load(in);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e1) {
}
}
}
if (sqlXml != null) {
Sql sql = sqlXml.getSql(id);
if (sql != null) {
strSql = new StringBuffer(sql.getStatement());
}
}
return strSql;
}
}
import org.apache.commons.digester.Digester;
import java.io.IOException;
import java.io.InputStream;
public class SqlDigester {
/**
* 分析规则制定
*
* @param digester 分析工具
*/
private void init(Digester digester) {
// 不进行XML与相应的DTD的合法性验证
digester.setValidating(false);
// 当遇到<session-bean-sql>时创建一个Sql对象,并将其放在栈顶
digester.addObjectCreate("session-bean-sql", SqlXML.class);
// 当遇到<session-bean-sql>的字元素<sql>时创建一个Sql对象,并将其放在栈顶
digester.addObjectCreate("session-bean-sql/sql", Sql.class);
// 根据<sql>元素的属性,对刚创建的sql对象的属性进行设置
digester.addSetProperties("session-bean-sql/sql", "id", "id");
// 当遇到<sql>的字元素<statement>將其放在sql對象的statement屬性中
digester.addBeanPropertySetter("session-bean-sql/sql/statement",
"statement");
// 当再次遇到<session-bean-sql>的子元素<sql>时创建一个Sql对象,并将其放在栈顶,同时调用第二栈顶元素(sqlXML对象)的addSql方法。
digester.addSetNext("session-bean-sql/sql", "addSql");
}
/**
* 分析
*
* @param in 分析文件
* @return SqlXML 结果
*/
public SqlXML load(InputStream in) throws Exception {
Digester dgstr = new Digester();
init(dgstr);
try {
return (SqlXML) dgstr.parse(in);
} catch (IOException e) {
throw new Exception("Error occured When loading data", e);
}
}
}
import java.util.HashMap;
public class SqlXML {
private HashMap map = new HashMap();
public void addSql(Sql sql) {
map.put(sql.getId(), sql);
}
public Sql getSql(String id) {
return (Sql) map.get(id);
}
}
public class Sql {
private String id = null;
private String statement = null;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getStatement() {
return statement;
}
public void setStatement(String statement) {
this.statement = statement;
}
}
xml文件
<?xml version="1.0" encoding="UTF-8"?>
<session-bean-sql>
<sql id="xxx">
<statement>
sql文
</statement>
</sql>
</session-bean-sql>