package com.founderdpt.comm.xworld.db.basex; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import javax.xml.namespace.QName; import javax.xml.xquery.XQConnection; import javax.xml.xquery.XQException; import javax.xml.xquery.XQPreparedExpression; import javax.xml.xquery.XQSequence; import org.apache.log4j.Logger; import com.founderdpt.comm.xworld.db.IXQSession; import com.founderdpt.comm.xworld.util.config.ProperConfigUtil; public class XQSession implements IXQSession { private static Logger log = Logger.getLogger(XQSession.class); private XQConnection xqConnection; public XQSession(XQConnection connection) { this.xqConnection = connection; } public XQConnection getXqConnection() { return xqConnection; } public void setXqConnection(XQConnection xqConnection) { this.xqConnection = xqConnection; } public List<String> executeCmd(String command) throws XQException { //XDBExecuteCmd cmd = new XDBExecuteCmd((XDBConnection) xqConnection); return null; } public String executeQuery(String query) throws XQException{ log.debug("语句执行begin:"+query); XQConnection connection= this.getXqConnection(); String result = connection.createExpression().executeQuery(query).getSequenceAsString(null); log.debug("语句执行end:"+result); return result; } public XQSequence executeQuerySequence(String query) throws XQException{ log.debug("sequence语句执行begin:"+query); XQConnection connection= this.getXqConnection(); XQSequence sequence = connection.createExpression().executeQuery(query); log.debug("sequence语句执行end"); return sequence; } /** * 增加文档基于字符串 * @param command * @return * @throws XQException */ public void addDOCByString(String collection,String doc_name,String str) throws XQException { /*XDBConnection con = (XDBConnection) xqConnection; CommandExecute ce = con.getExecute(); List<String> list= new ArrayList<String>(); list.add(collection); list.add(doc_name); list.add("-s"); list.add(str); ce.cmdAddDoc(list);*/ String dbname = ProperConfigUtil.getConfigByKey("DBNAME"); String path = collection+"/"+doc_name; this.executeQuerySequence("db:add(\""+dbname+"\", \""+str+"\", \""+path+"\")"); } /** * 开始事务 * * @throws XQException */ public void beginTransaction() throws XQException { } /** *回滚事务 * * @throws XQException */ public void rollBack() throws XQException { // executeCmd("rollBack"); } /** * 结束事务 * * @throws XQException */ public void commit() throws XQException { //executeCmd("commit"); } /** * 查询是否关闭 * @return */ public boolean isClosed() { return xqConnection.isClosed(); } /** * 关闭 * @throws XQException */ public void close() throws XQException { xqConnection.close(); } @Override public XQSequence executeQuerySequence(String query, Map bind_map) throws XQException { XQSequence sequence = null; XQConnection connection = this.getXqConnection(); if (bind_map != null && !bind_map.isEmpty()) { // bind if (bind_map != null && !bind_map.isEmpty()) { XQPreparedExpression expression = connection .prepareExpression(query); Set<Map.Entry> set = bind_map.entrySet(); for (Iterator<Map.Entry> it = set.iterator(); it.hasNext();) { Map.Entry entry = (Map.Entry) it.next(); String value = (String) entry.getValue(); if(value!=null){ expression.bindString(new QName((String) entry.getKey()), value, null); } } sequence = expression.executeQuery(); } else { sequence = connection.createExpression().executeQuery(query); } } else { sequence = connection.createExpression().executeQuery(query); } return sequence; } }