📄 qdbconfig.java
字号:
package com.cloudwebsoft.framework.base;
import java.io.FileInputStream;
import java.net.URL;
import org.jdom.Document;
import java.io.FileOutputStream;
import org.jdom.output.XMLOutputter;
import org.jdom.input.SAXBuilder;
import org.jdom.Element;
import org.apache.log4j.Logger;
import java.util.List;
import java.util.Iterator;
import cn.js.fan.db.PrimaryKey;
import cn.js.fan.db.KeyUnit;
import java.util.HashMap;
import cn.js.fan.base.ObjectCache;
import org.jdom.output.Format;
import java.net.URLDecoder;
import cn.js.fan.util.StrUtil;
import cn.js.fan.web.Global;
import com.cloudwebsoft.framework.util.LogUtil;
/**
*
* <p>Title: 从configDB.xml中读取表、主键、SQL语句等的信息</p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2005</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class QDBConfig {
final String cacheGroup = "QDBConfig";
public String fileName = "config_db.xml";
public static final String FORM_VALIDATOR_FILE = "form_checker.xml";
public static Document doc = null;
public static Element root = null;
public static String xmlPath;
public static boolean isInited = false;
public static URL confURL;
public QDBConfig() {
}
public QDBConfig(String fileName) {
this.fileName = fileName;
}
public void init() {
confURL = getClass().getClassLoader().getResource(fileName);
if (!isInited) {
xmlPath = confURL.getFile();
xmlPath = URLDecoder.decode(xmlPath);
SAXBuilder sb = new SAXBuilder();
try {
FileInputStream fin = new FileInputStream(xmlPath);
doc = sb.build(fin);
root = doc.getRootElement();
fin.close();
isInited = true;
} catch (org.jdom.JDOMException e) {
LogUtil.getLog(this.getClass().getName()).error(e.getMessage());
} catch (java.io.IOException e) {
LogUtil.getLog(this.getClass().getName()).error(e.getMessage());
}
}
}
public Element getRootElement() {
return root;
}
public void reload() {
isInited = false;
try {
QCache.getInstance().invalidateGroup(cacheGroup);
}
catch (Exception e) {
LogUtil.getLog(this.getClass().getName()).error(e.getMessage());
}
}
/**
* 取得表的配置信息
* @param objectName String
* @return DBTable
*/
public QDBTable getQDBTable(String objectName) {
QDBTable dt = null;
try {
dt = (QDBTable)QCache.getInstance().getFromGroup(objectName, cacheGroup);
}
catch (Exception e) {
LogUtil.getLog(getClass()).error("getQDBTable1:" + e.getMessage());
}
if (dt==null) {
init();
Element tables = root.getChild("tables");
List list = tables.getChildren();
if (list != null) {
Iterator ir = list.iterator();
while (ir.hasNext()) {
Element child = (Element) ir.next();
String objName = child.getAttributeValue("objName");
// LogUtil.getLog(getClass()).info("getQDBTable: objName=" + objName + " objectName=" + objectName);
if (objName.equals(objectName)) {
String name = child.getAttributeValue("name");
String create = child.getChildText("create");
String load = child.getChildText("load");
String queryList = child.getChildText("list");
String save = child.getChildText("save");
String del = child.getChildText("del");
String connName = StrUtil.getNullStr(child.getChildText("connName"));
if (connName.equals("")) {
connName = Global.defaultDB;
}
String sBlockSize = StrUtil.getNullStr(child.getChildText("blockSize"));
int blockSize;
try {
blockSize = Integer.parseInt(sBlockSize);
}
catch (Exception e) {
System.out.println(this.getClass().getName() + " getQDBTable:" + e.getMessage());
blockSize = 100;
}
String formValidatorFile = StrUtil.getNullStr(child.getChildText("formValidatorFile"));
if (formValidatorFile.equals(""))
formValidatorFile = FORM_VALIDATOR_FILE;
boolean objCachable = !StrUtil.getNullStr(child.getChildText("objCachable")).equals("false");
boolean listCachable = !StrUtil.getNullStr(child.getChildText("listCachable")).equals("false");
dt = new QDBTable(name, objName);
dt.setQueryCreate(create);
dt.setQueryLoad(load);
dt.setQueryList(queryList);
dt.setQuerySave(save);
dt.setQueryDel(del);
dt.setConnName(connName);
dt.setBlockSize(blockSize);
dt.setFormValidatorFile(formValidatorFile);
dt.setObjCachable(objCachable);
dt.setListCachable(listCachable);
Element pk = child.getChild("primaryKey");
String pkType = pk.getAttributeValue("type");
if (pkType.equalsIgnoreCase("String")) {
Element unit = pk.getChild("unit");
String pkName = unit.getChildText("name");
dt.setPrimaryKey(new PrimaryKey(pkName, PrimaryKey.TYPE_STRING));
} else if (pkType.equals("int")) {
Element unit = pk.getChild("unit");
String pkName = unit.getChildText("name");
dt.setPrimaryKey(new PrimaryKey(pkName, PrimaryKey.TYPE_INT));
} else if (pkType.equals("long")) {
Element unit = pk.getChild("unit");
String pkName = unit.getChildText("name");
dt.setPrimaryKey(new PrimaryKey(pkName, PrimaryKey.TYPE_LONG));
} else if (pkType.equals("compound")) {
List listpmk = pk.getChildren("unit");
Iterator irunit = listpmk.iterator();
HashMap key = new HashMap();
int orders = 0;
while (irunit.hasNext()) {
Element e = (Element) irunit.next();
String keyName = e.getChildTextTrim("name");
String keyType = e.getChildTextTrim("type");
if (keyType.equalsIgnoreCase("String"))
key.put(keyName,
new KeyUnit(PrimaryKey.TYPE_STRING, orders));
else if (keyType.equals("int"))
key.put(keyName, new KeyUnit(PrimaryKey.TYPE_INT, orders));
else if (keyType.equals("long"))
key.put(keyName, new KeyUnit(PrimaryKey.TYPE_LONG, orders));
else
LogUtil.getLog(getClass()).info("getDBTable: 解析表" + name + "的主键时,type=" + keyType + " 未知!");
orders++;
}
dt.primaryKey = new PrimaryKey(key);
} else
LogUtil.getLog(getClass()).info("getDBTable: 解析表" + name + "的主键时,type=" + pkType + " 未知!");
try {
QCache.getInstance().putInGroup(objName, cacheGroup,
dt);
} catch (Exception e) {
LogUtil.getLog(getClass()).error("getDBTable:" + e.getMessage());
}
}
}
}
}
return dt;
}
public void writemodify() {
String indent = " ";
Format format = Format.getPrettyFormat();
format.setIndent(indent);
format.setEncoding("utf-8");
XMLOutputter outp = new XMLOutputter(format);
try {
FileOutputStream fout = new FileOutputStream(xmlPath);
outp.output(doc, fout);
fout.close();
} catch (java.io.IOException e) {}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -