您的位置:首页 > 数据库

baseDao操作数据库的表字段(通用)

2016-07-27 00:00 190 查看
package com.dao;

import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

public class BaseDao {
private static Logger logger = Logger.getLogger(BaseDao.class);
// protected final Log logger = (Log) LogFactory.getLog(getClass());
private String driverName = "oracle.jdbc.driver.OracleDriver";
private String dbURL = "jdbc:oracle:thin:@192.168.8.15:1521:susdata";
private String userName = "sa";
private String userPwd = "sa";

private Connection con;
private PreparedStatement ps;
private ResultSet rs;

/**
* 构造函数
*/
public BaseDao() {
}

/**
* 构造函数
*
* @param DriverName
* @param DbURL
* @param UserName
* @param UserPwd
*/
public BaseDao(String DriverName, String DbURL, String UserName,
String UserPwd) {
this.driverName = DriverName;
this.dbURL = DbURL;
this.userName = UserName;
this.userPwd = UserPwd;
}

/**
* 打开数据连接sa
*
* @throws ClassNotFoundException
* @throws SQLException
*/
public void GetConnection() {

// try {
// Class.forName(driverName);
// } catch (ClassNotFoundException e) {
// e.printStackTrace();
// }
// try {
// con = DriverManager.getConnection(dbURL, userName, userPwd);
// } catch (SQLException e) { // TODO Auto-generated catch block
// System.out.println("连接数据库失败!");
// e.printStackTrace();
// }

try {
// 初始化查找命名空间
Context initContext = new InitialContext();
// 找到DataSource
DataSource ds = (DataSource) initContext
.lookup("java:/comp/env/jdbc/oracleDb");
try {
con = ds.getConnection();
} catch (SQLException e) {
SimpleDateFormat formatter = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
logger.error("-------" + formatter.format(new Date()));
logger.error("getConnection 连接数据失败:" + e.toString());
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

/**
* 关闭数据连接
*
*/
private void CloseConnection() {
if (null != rs) {
try {
rs.close();
} catch (SQLException e) {
rs = null;
e.printStackTrace();
}
}
if (null != ps) {
try {
ps.close();
} catch (SQLException e) {
ps = null;
e.printStackTrace();
}
}
if (null != con) {
try {
con.close();
} catch (SQLException e) {
con = null;
e.printStackTrace();
}
}
}

/**
* ִ执行SQL新增,修改,删除
*
* @param sql
* @return
* @throws ClassNotFoundException
* @throws SQLException
*/
public Boolean ExecuteNoQuery(String sql) throws ClassNotFoundException,
SQLException {
Boolean _bool = false;
try {
GetConnection();
ps = con.prepareStatement(sql);
if (0 < ps.executeUpdate()) {
con.commit();
_bool = true;
} else
_bool = false;

} catch (SQLException e) {
SimpleDateFormat formatter = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
logger.error("-------" + formatter.format(new Date()));
logger.error("sql 执行失败:" + e.toString());
logger.error("sql 语句:" + sql);
e.printStackTrace();
con.rollback();
_bool = false;
} finally {
CloseConnection();
}
return _bool;
}

/**
* 根据键值从数据库取数据
*
* @param tableName
* @param key
* @param value
* @return
* @throws DocumentException
*/
public List GetList(String SqlString) throws DocumentException {
List list = new ArrayList();
try {
GetConnection();
ps = con.prepareStatement(SqlString);
rs = ps.executeQuery();
// 有关这个数据库的信息:表名,表的索引,数据库产品的名称和版本,数据库支持的操作
ResultSetMetaData rsmd = rs.getMetaData();
int cols = rsmd.getColumnCount();
while (rs.next()) {
Map map = new HashMap();
for (int i = 1; i <= cols; i++) {
String key = rsmd.getColumnName(i);
int type = rsmd.getColumnType(i);
if (type == 2)// number
{
Double value = rs.getDouble(i);
map.put(key, value == null ? 0 : value.doubleValue());
} else {
String value = rs.getString(i);
map.put(key, value == null ? "" : value.trim());
}
}
list.add(map);
}
} catch (Exception e) {
SimpleDateFormat formatter = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
logger.error("-------" + formatter.format(new Date()));
logger.error("sql 查询失败:" + e.toString());
logger.error("sql 语句:" + SqlString);
e.printStackTrace();
} finally {
CloseConnection();
}

/*
* xml_reader try { GetConnection();
*
* String xmlString = QueryToXml(SqlString, "tmp");
*
* Document document = DocumentHelper.parseText(xmlString); Element el_a
* = document.getRootElement(); for (Iterator nodes =
* el_a.elementIterator(); nodes.hasNext();) {
*
* Element el_2 = (Element) nodes.next(); Map map = new HashMap(); for
* (Iterator node = el_2.elementIterator(); node.hasNext();) {
*
* Element nd = (Element) node.next(); map.put(nd.getName(),
* nd.getTextTrim()); } list.add(map); } } catch (ClassNotFoundException
* e) { // TODO Auto-generated catch block e.printStackTrace(); } catch
* (SQLException e) { // TODO Auto-generated catch block
* e.printStackTrace(); } finally { CloseConnection(); }
*/
return list;
}

/**
* 单笔数据的增删改
*
* @param tableName
* 表名
* @param type
* insert/update/delete
* @param key
* 主键名
* @param value
* 键值ֵ
* @param map
*/
public Boolean DataBaseHandle(String tableName, String type, String key,
String value, Map map) {
Boolean _bool = false;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String sql = "";
try {
// 新增
if (type.toLowerCase().equals("insert")) {
String colName = "";
String valueName = "";
for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) {
Map.Entry el = (Map.Entry) iter.next();
// column
String _Key = (String) el.getKey();
colName += "," + _Key;
// value
String types = el.getValue().getClass().getName();
if (types.equals("java.util.Date")) {
Date dt = (Date) el.getValue();
valueName += "," + "to_date('" + sdf.format(dt)
+ "','yyyy-mm-dd hh24:mi:ss')";
} else {
if(el.getValue().toString().trim().indexOf("SEQ_")!=-1||el.getValue().toString().trim().indexOf("seq_")!=-1)
valueName += "," + el.getValue().toString().trim();
else
valueName += ",'" + el.getValue().toString().trim() + "'";
}
}
sql += "insert into " + tableName + "(" + colName.substring(1)
+ ") values(" + valueName.substring(1) + ")";
}
// 修改
if (type.toLowerCase().equals("update")) {
String sqlTemp = "";
for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) {
Map.Entry el = (Map.Entry) iter.next();
String _Key = (String) el.getKey();
String _value = "";
String types = el.getValue().getClass().getName();
if (types.equals("java.util.Date")) {
Date dt = (Date) el.getValue();
_value += "to_date('" + sdf.format(dt)
+ "','yyyy-mm-dd hh24:mi:ss')";
} else {
_value += "'" + el.getValue().toString().trim() + "'";
}
sqlTemp += "," + _Key + "=" + _value;
}
sql += "update " + tableName + " set " + sqlTemp.substring(1)
+ " where " + key + "='" + value + "'";
;
}
// 删除
if (type.toLowerCase().equals("delete")) {
sql += "delete from " + tableName + " where " + key + " ='"
+ value + "'";
}
_bool = ExecuteNoQuery(sql);
} catch (Exception e) {
e.printStackTrace();
} finally {
CloseConnection();
}
return _bool;
}

/**
* 根据查询的SQL返回XML
*
* @param sql
* @param tableName
* @return
* @throws ClassNotFoundException
* @throws SQLException
*/
public String QueryToXml(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));

@SuppressWarnings("unused")
int type = rsmd.getColumnType(i);
if (type == 2)// number
{
Double rvalue = rs.getDouble(i);
element.setText(rvalue.toString());
} else {
element.setText(rs.getString(i) == null ? "" : rs
.getString(i));
}

}
}

// 下面供测试,创建outputStream对象,设置格式和是否换行
OutputFormat format = new OutputFormat();
format.setEncoding("gb2312");
format.setNewlines(true);
XMLWriter write = new XMLWriter(new FileWriter("c://f.xml"), format);
write.write(document);
write.close();

} catch (Exception e) {
e.printStackTrace();
} finally {
CloseConnection();
}
return root.asXML();
}

/**
* 增删改,由XML写到数据库。说明:三个属性必须要统一即:TableName="表名"
* CommandType="Insert/Update/Delete" KeyName="唯一主键,不支持联合主键" KeyValue="主键值ֵ"
*
* @param XmlString
* @return
* @throws DocumentException
*/
public Boolean ExecuteXmlToDataBase(String XmlString)
throws DocumentException {
Boolean _bool = false;
try {
Document document = DocumentHelper.parseText(XmlString);
// 每个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").toLowerCase()
.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").toLowerCase()
.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").toLowerCase()
.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);
_bool = ExecuteNoQuery(sql);
} catch (Exception e) {
e.printStackTrace();
} finally {
CloseConnection();
}
return _bool;
}

/**
* 根据数据集(单笔)Map批量产生XMl,并存入数据库
*
* @param tableName
* 表名
* @param type
* insert/update/delete
* @param key
* 主键名
* @param value
* 键值ֵ
* @param map
*/
public Boolean CreateXMl(String tableName, String type, String key,
String value, Map map) {

Boolean _done = false;
Document document = DocumentHelper.createDocument();
document.setXMLEncoding("utf-8");
Element root = (Element) document.addElement("TableNodes");
Element el = root.addElement("TableNode");
el.addAttribute("TableName", tableName);
el.addAttribute("CommandType", type);
el.addAttribute("KeyName", key);
el.addAttribute("KeyValue", value);

try {
Set set = map.entrySet();
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
Map.Entry mapentry = (Map.Entry) iterator.next();

String _key = (String) mapentry.getKey();
String _value = (String) mapentry.getValue();
Element element = el.addElement(_key);
element.setText(_value);
}

// 下面供测试,创建outputStream对象,设置格式和是否换行
// OutputFormat format = new OutputFormat();
// format.setEncoding("gb2312");
// format.setNewlines(true);
// XMLWriter write = new XMLWriter(new FileWriter("c://f.xml"),
// format);
// write.write(document);
// write.close();

// 新增一笔数据
String asd = root.asXML();
_done = ExecuteXmlToDataBase(root.asXML());
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
CloseConnection();
}
return _done;
}
/**
* 向数据库中新增blob字段
* @param sqlString
* @param blobUrl
* @param pkId01
* @param pkId02
* @return
*/
private Statement pstmt = null;
public Boolean updateBlobDate(String insertSql, String updateSql, String blobUrl) {
Boolean _bool = true;
try {
GetConnection();
pstmt = con.createStatement();
con.setAutoCommit(false);
OutputStream os = null;
//插入一个空的empty_blob
pstmt.executeUpdate(insertSql);
// 锁定数据行进行更新,注意"for update"语句
rs = pstmt.executeQuery(updateSql);
if (rs.next()) {
// 得到java.sql.Blob对象后强制转换为oracle.sql.BLOB
oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("IMG");

// 通过getBinaryOutputStream()方法获得向数据库中插入图片的"管道"
os = blob.getBinaryOutputStream();

// 读取想要存储的图片文件
InputStream is = new FileInputStream(blobUrl);

// 依次读取流字节,并输出到已定义好的数据库字段中.
int i = 0;
while ((i = is.read()) != -1) {
os.write(i);
}
is.close();
}
os.flush();
os.close();
con.commit();
con.setAutoCommit(true);// 恢复现场
} catch (Exception e) {
e.printStackTrace();
try {
con.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
_bool = false;
} finally {
CloseConnection();
}
return _bool;
}
/**
* 读取Oracle中Blob字段
* @param querySql
* @param string
* @return
*/
public byte[] getBlobByteArray(String sql, String colName){
Blob blob = null;
byte[] data = null;
try {
GetConnection();
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
StringBuffer myStringBuffer = new StringBuffer();
while (rs.next()) {
Map map = new HashMap();
blob = rs.getBlob(colName);
}
InputStream inStream = blob.getBinaryStream();
long nLen = blob.length();
int nSize = (int) nLen;
//System.out.println("img data size is :" + nSize);
data = new byte[nSize];
inStream.read(data);
inStream.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
CloseConnection();
}
return data;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: