package P.DataBase;
//耿宗国 写于:2011.10.30
//严禁任何形式转载,版权只归作者所有。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Iterator;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.VisitorSupport;
import org.omg.CORBA.PRIVATE_MEMBER;
public class ExcuteDataBase {
private String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; // 加载JDBC驱动
private String dbURL = "jdbc:sqlserver://192.168.8.105:1433; DatabaseName=EMPData"; // 连接服务器和数据库sample
private String userName = "kaka"; // 默认用户名
private String userPwd = "123"; // 密码
private Connection con;
private Statement stmt;
private PreparedStatement ps;
private ResultSet rs;
// private DBConnectionManager dcm = null;
public ExcuteDataBase(String DriverName, String DbURL, String UserName,
String UserPwd) {
this.driverName = DriverName;
this.dbURL = DbURL;
this.userName = UserName;
this.userPwd = UserPwd;
}
public ExcuteDataBase() {
}
private void GetConnection() throws ClassNotFoundException, SQLException {
Class.forName(driverName);
con = DriverManager.getConnection(dbURL, userName, userPwd);
}
/**
* @param sql
* @return
* @throws ClassNotFoundException
* @throws SQLException
*/
private Boolean ExecuteNoQuery(String sql) throws ClassNotFoundException,
SQLException {
GetConnection();
ps = con.prepareStatement(sql);
try {
if (0 < ps.executeUpdate()) {
CloseConnection();
con.commit();
return true;
} else
return false;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
con.rollback();
return false;
}
}
/**
* 增删改,由XML写到数据库。 说明:三个属性必须要统一即:TableName="表名"
* CommandType="Insert/Update/Delete" KeyName="唯一主键,不支持联合主键" KeyValue="主键值"
*
* @param doc
* @return
* @throws DocumentException
*/
public Boolean ExecuteXml(String doc) throws DocumentException {
try {
Document document = DocumentHelper.parseText(doc);
// 每个XML必须有CommandType属性指令集,Insert,Update,Delete
Element el = document.getRootElement();
String sql = "";
for (Iterator it = el.elementIterator(); it.hasNext();) {
Element TableNode = (Element) it.next();
if (TableNode.attributeValue("CommandType").equals("Insert")) {
String tableName = TableNode.attributeValue("TableName");
String colName = "";
String valueName = "";
for (Iterator iel = TableNode.elementIterator(); iel
.hasNext();) {
Element eel = (Element) iel.next();
colName += "," + eel.getName();
valueName += "," + "'" + eel.getTextTrim() + "'";
}
sql += ";insert into " + tableName + "("
+ colName.substring(1) + ") values("
+ valueName.substring(1) + ")";
}
if (TableNode.attributeValue("CommandType").equals("Update")) {
String KeyName = TableNode.attributeValue("KeyName");
String KeyValue = TableNode.attributeValue("KeyValue");
String tableName = TableNode.attributeValue("TableName");
String colName = "";
String valueName = "";
sql += ";update " + tableName + " set ";
String sqlTemp = "";
for (Iterator iel = TableNode.elementIterator(); iel
.hasNext();) {
Element eel = (Element) iel.next();
colName += "," + eel.getName();
valueName += "," + "'" + eel.getTextTrim() + "'";
sqlTemp += "," + eel.getName() + "=" + "'"
+ eel.getTextTrim() + "'";
}
sql += sqlTemp.substring(1) + " where " + KeyName + "='"
+ KeyValue + "'";
}
if (TableNode.attributeValue("CommandType").equals("Delete")) {
String KeyName = TableNode.attributeValue("KeyName");
String KeyValue = TableNode.attributeValue("KeyValue");
String tableName = TableNode.attributeValue("TableName");
sql += ";delete from " + tableName + " where " + KeyName
+ " ='" + KeyValue + "'";
}
}
sql = sql.substring(1);
return ExecuteNoQuery(sql);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* ExecuteSql return XMLString
*
* @param sql
* @param tableName
* @return Xml To String
* @throws ClassNotFoundException
* @throws SQLException
*/
public String ExecuteXml(String sql, String tableName)
throws ClassNotFoundException, SQLException {
Document document = DocumentHelper.createDocument();
Element root = (Element) document.addElement("TableNodes");
try {
GetConnection();
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int cols = rsmd.getColumnCount();
while (rs.next()) {
Element el = root.addElement("TableNode").addAttribute(
"TableName", tableName);
for (int i = 1; i < cols; i++) {
Element element = el.addElement(rsmd.getColumnName(i));
element.setText(rs.getString(i));
}
}
CloseConnection();
return root.asXML();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
CloseConnection();
return null;
}
}
private void CloseConnection() {
if (null != rs) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
rs = null;
e.printStackTrace();
}
}
if (null != ps) {
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
ps = null;
e.printStackTrace();
}
}
if (null != con) {
try {
con.close();
// dcm.freeConnection("mysql", con);
} catch (SQLException e) {
// TODO Auto-generated catch block
con = null;
e.printStackTrace();
}
}
}
}
?<?xml version="1.0" encoding="gb2312"?>
<Root> <TableNode TableName="tem01b" CommandType="Insert" KeyName="PKID" KeyValue="8"> <PKID>8</PKID> <type>2</type> <name>E区</name> </TableNode> <TableNode TableName="tem01p" CommandType="Insert" KeyName="PKID" KeyValue="8"> <PKID>8</PKID> <type>2</type> <name>E区</name> </TableNode> <TableNode TableName="tem01b" CommandType="Update" KeyName="PKID" KeyValue="8"> <PKID>8</PKID> <type>2</type> <name>E区</name> </TableNode> <TableNode TableName="tem01p" CommandType="Update" KeyName="PKID" KeyValue="8"> <PKID>8</PKID> <type>2</type> <name>E区</name> </TableNode> <TableNode TableName="tem01b" CommandType="Delete" KeyName="PKID" KeyValue="8"> <PKID>8</PKID> <type>2</type> <name>E区</name> </TableNode> <TableNode TableName="tem01p" CommandType="Delete" KeyName="PKID" KeyValue="8"> <PKID>8</PKID> <type>2</type> <name>E区</name> </TableNode> </Root>?