⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbcon.java

📁 这是一个网上购物店的源码
💻 JAVA
字号:
package org.digitstore.util;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * 类功能 :提供数据库操作功能 建立人 :郑严 <br>
 * 修改日期:2003-9-22 <br>
 * 修改原因:如果结果集为空,元数据不能采集 <br>
 * 修改人 :郑严 <br>
 */
public class DBCon {
	private String name = "default";

	protected Connection conn = null; //数据库连接

	protected PreparedStatement pstmt = null; //语句

	protected Statement stmt = null;

	Log logger = LogFactory.getLog(this.getClass());

	public DBCon() {
	}

	public DBCon(String name) {
		this.name = name;
	}

	/**
	 * DBCon的使用方法 首先声明一个DBCon对象,构造函数的参数名为数据库名,数据库的连接配置请见config\db.properties文件
	 * 然后执行SQL语句 最后调用close()方法,关闭(释放)连接。
	 * 
	 * 如果执行的是查询语句,则查询结果是一个DBSet结果集, DBSet的使用方法是调用get(row,column);函数
	 * 其中row是结果集的行数(从零开始) column是结果集的列数或者列名(字段名)。
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		DBCon conn = new DBCon("olympics");

		System.out.println(System.getProperty("user.dir"));

		try {
			conn.prepare("SELECT * FROM user_info");
			/// conn.setString(1, "pk");
			DBSet rs = conn.executeQuery();
			//	rs.get(0, 0);
			//	rs.get(0, "pk");
		} catch (Throwable e) {
			e.printStackTrace();
		} finally {
			conn.close();
		}
	}

	/**
	 * 方法功能: 准备PreparedStatement语句 <br>
	 * 建立日期: (00-4-6 15:37:32) <br>
	 * 
	 * @param: sql语句---参数以?代替 <br>
	 *          建立人 :郑严 <br>
	 *          修改日期: <br>
	 *          修改原因: <br>
	 *          修改人 :<br>
	 */
	public void prepare(String sql) throws SQLException {

		if ((conn == null) || conn.isClosed()) {
			getConnection();
		}

		try {
			if (pstmt != null) {
				pstmt.close();
			}
		} catch (Throwable e) {
		}

		try {
			logger.debug("prepare:" + sql);
			pstmt = getConnection().prepareStatement(sql);

			//pstmt.setMaxRows(1000);
		} catch (SQLException e) {
			logger.debug(e);
			throw e;
		}
	}

	/**
	 * 给参数赋值
	 */
	public void setObject(int index, Object parameter) throws SQLException {
		logger.debug("index=" + index + ",parameter=" + parameter);

		if (!(parameter instanceof java.sql.Date)) {
			parameter = (parameter == null) ? "" : parameter.toString().trim();
		}

		//pstmt.setObject(index, Tools.encodeISO(parameter.toString()));
		pstmt.setObject(index, parameter.toString());
	}

	/**
	 * 给参数赋值
	 */
	public void setString(int index, Object parameter) throws SQLException {
		logger.debug("index=" + index + ",parameter=" + parameter);

		parameter = (parameter == null) ? "" : parameter.toString().trim();
		//pstmt.setString(index, Tools.encodeISO(parameter.toString()));

		pstmt.setString(index, parameter.toString());
	}

	/**
	 * 给参数赋值
	 */
	public void setInt(int index, int parameter) throws SQLException {
		logger.debug("index=" + index + ",parameter=" + parameter);
		pstmt.setInt(index, parameter);
	}

	/**
	 * 给参数赋值
	 */
	public void setBoolean(int index, boolean parameter) throws SQLException {
		logger.debug("index=" + index + ",parameter=" + parameter);
		pstmt.setBoolean(index, parameter);
	}

	/**
	 * 给参数赋值
	 */
	public void setDouble(int index, double parameter) throws SQLException {
		logger.debug("index=" + index + ",parameter=" + parameter);
		pstmt.setDouble(index, parameter);
	}

	/**
	 * 写入比较长的字符串 建议在500个字符以上使用
	 * 
	 * @param index
	 * @param parameter
	 * @throws SQLException
	 */
	public void setBigString(int index, String parameter) throws SQLException {
		logger.debug("index=" + index + ",parameter=" + parameter);

		java.io.Reader reader = new java.io.StringReader(parameter);
		int length = (parameter == null) ? 0 : parameter.length();
		pstmt.setCharacterStream(index, reader, length);
	}

	/**
	 * 写入字符流
	 * 
	 * @param index
	 * @param reader
	 * @param length
	 * @throws SQLException
	 */
	public void setCharacterStream(int index, java.io.Reader reader, int length)
			throws SQLException {
		logger.debug("index=" + index + ",parameter=" + reader);
		pstmt.setCharacterStream(index, reader, length);
	}

	/**
	 * 方法功能:执行sql返回结果--两维向量 <br>
	 * <b>不推荐使用 <b><br>
	 * 建立日期: <br>
	 * 
	 * @param: sql 语句 <br>
	 * @return :查询返回两维Vector[[aaa,bbb],[ccc,ddd]], (未查到结果时返回[],程序中
	 *         应以((java.util.Vector)ret).size()判断@return是否为空 <br>
	 *         建立人 :郑严 <br>
	 *         修改日期: <br>
	 *         修改原因: <br>
	 *         修改人 :<br>
	 *  
	 */
	public DBSet executeQuery(String sql) throws SQLException {
		java.sql.ResultSet rs = null;
		DBSet vResult = null;
		try {
			logger.debug("executeQuery:" + sql);
			stmt = getConnection().createStatement();
			rs = stmt.executeQuery(sql);
			vResult = resultset2Vector(rs);
		} catch (SQLException e) {
			throw e;
		} finally {
			try {
				if (rs != null) {
					rs.close();
				}
				if (stmt != null) {
					stmt.close();
				}
			} catch (Throwable e1) {
			}
			//			closeStmt();
		}
		return vResult;
	}

	/**
	 * 方法功能:执行sql返回结果--两维向量 <br>
	 * 建立日期:(00-3-27 9:13:28) <br>
	 * 
	 * @param: <br>
	 * @return :查询返回两维Vector[[aaa,bbb],[ccc,ddd]], (未查到结果时返回[],程序中
	 *         应以((java.util.Vector)ret).size()判断@return是否为空 <br>
	 *         建立人 :郑严 <br>
	 *         修改日期: <br>
	 *         修改原因: <br>
	 *         修改人 :<br>
	 *  
	 */
	public DBSet executeQuery() throws SQLException {
		java.sql.ResultSet rs = null;
		DBSet vResult = null;

		try {
			if (pstmt == null) {
				logger.debug("注意:你忘了调用perpare方法了");
			}

			rs = pstmt.executeQuery();
			vResult = resultset2Vector(rs);
		} catch (SQLException e) {
			logger.debug(e);
			throw e;
		} finally {
			try {
				if (rs != null) {
					rs.close(); //关闭语句
				}
			} catch (Throwable e1) {
			}
			//			closeStmt();
			//			
		}
		return vResult;
	}

	/**
	 * 方法功能:执行sql返回结果 <br>
	 * <b>不推荐使用 </b> <br>
	 * 
	 * @return :操作影响的纪录数 <br>
	 *         建立人 :郑严 <br>
	 *         修改日期: <br>
	 *         修改原因: <br>
	 *         修改人 :<br>
	 */
	public int executeUpdate(String sql) throws SQLException {
		try {
			logger.debug("executeUpdate:" + sql);
			stmt = getConnection().createStatement();
			return stmt.executeUpdate(sql);
		} catch (Exception e) {
			logger.debug("executeUpdate(String sql) ERROR:" + e.getMessage());
			return -1;
		} finally {
			try {
				if (stmt != null) {
					stmt.close();
				}
			} catch (Exception e) {

			}
		}
	}

	/**
	 * 方法功能:执行sql返回结果 <br>
	 * 
	 * @return :操作影响的纪录数 <br>
	 *         建立人 :郑严 <br>
	 *         修改日期: <br>
	 *         修改原因: <br>
	 *         修改人 :<br>
	 */
	public int executeUpdate() throws SQLException {
		try {
			if (pstmt == null) {
				logger.error("注意:你忘了调用perpare方法了");
			}
			return pstmt.executeUpdate();
		} catch (NullPointerException e) {
			logger.debug(e);
			throw new SQLException("空指针异常在excuteUpdate中,请查看系统日志!");
		} finally {
			//			closeStmt();
		}
	}

	/**
	 * 方法功能:释放连接, 强烈建议显式调用 <br>
	 * 建立日期:(00-4-6 15:37:32) <br>
	 * 建立人 :郑严 <br>
	 * 
	 * @return <br>
	 */
	public void close() {
		//先关闭statement
		closeStmt();
		if (conn != null) {
			try {
				conn.setAutoCommit(true);
			} catch (SQLException e) {

				logger.debug(e);
			}
			DBPool.getInstance(name).free(conn);
			logger.debug("free connection");

			conn = null;
		}
	}

	/**
	 * 设置手动提交(事务处理)bAutoCommit=true 自动 else 手动 注意: 设置手动提交后一定要调用
	 * setAutoCommit(false) 建议显式调用setAutoCommit(true) <br>
	 * 建立日期:(00-3-29 10:46:08) <br>
	 * 
	 * @param:bAutoCommit=true 自动 else 手动 <br>
	 * @return :<br>
	 *         建立人 :郑严 <br>
	 *         修改日期: <br>
	 *         修改原因: <br>
	 *         修改人 :<br>
	 */
	public void setAutoCommit(boolean bAutoCommit) {
		try {
			getConnection().setAutoCommit(bAutoCommit);
		} catch (SQLException e) {
		}
	}

	/**
	 * 方法功能:事务提交 <br>
	 * 建立日期:(00-3-29 11:39:18) <br>
	 * 
	 * @param: <br>
	 * @return :<br>
	 *         建立人 :郑严 <br>
	 *         修改日期: <br>
	 *         修改原因: <br>
	 *         修改人 :<br>
	 */
	public void commit() throws java.sql.SQLException {
		try {
			conn.commit();
		} catch (java.sql.SQLException e) {
			logger.error("exception in commit() ", e);
		}
	}

	/**
	 * 方法功能:事务回滚 <br>
	 * 建立日期:(00-3-29 11:40:54) <br>
	 * 
	 * @param: <br>
	 * @return :<br>
	 *         建立人 :郑严 <br>
	 *         修改日期: <br>
	 *         修改原因: <br>
	 *         修改人 :<br>
	 * @exception java.sql.SQLException
	 *                异常描述。
	 */
	public void rollback() {
		try {
			conn.rollback();
		} catch (SQLException e) {
			logger.error("exception in rollbak() ", e);
		}
	}

	public Connection getConnection() throws SQLException {
		if (conn == null) {
			conn = DBPool.getInstance(name).getConnection();
			conn.setAutoCommit(false);
		}
		return conn;
		//		return newConnection();
	}

	/**
	 * 关闭语句句柄
	 */
	private void closeStmt() {
		try {
			if (stmt != null) {
				stmt.close();
				stmt = null;
			}
		} catch (Throwable e) {
		}
		try {
			if (pstmt != null) {
				pstmt.close();
				pstmt = null;
			}
		} catch (Throwable e) {
		}

	}

	/**
	 * 为防止数据库连接释放失败在析构时检查 protected void finalize() throws Throwable { try {
	 * if(conn == null) return; close(); } catch(Throwable e) { }
	 * super.finalize(); }
	 */
	private DBSet resultset2Vector(java.sql.ResultSet rs) throws SQLException {
		ResultSetMetaData meta = rs.getMetaData();
		int columnCount = meta.getColumnCount();
		DBSet vResult = new DBSet();

		//读取列 元数据
		for (int i = 0; i < columnCount; i++) {
			vResult.put(meta.getColumnName(i + 1).toUpperCase(), String
					.valueOf(i));
		}

		//循环取值
		while (rs.next()) {
			java.util.Vector vTemp = new Vector();

			for (int i = 0; i < columnCount; i++) {
				Object oTemp = rs.getObject(i + 1);
				String sTemp = (oTemp == null) ? "" : oTemp.toString();

				//vTemp.addElement(Tools.encodeGB(sTemp.trim()));
				vTemp.addElement(sTemp.trim());
			}

			vResult.addElement(vTemp);
		}

		if (!vResult.isEmpty()) {
			vResult.printColumnInfo();
			logger.debug(vResult);
		}

		return vResult;
	}

	/*
	 * public static boolean isSelect(String sql) { return
	 * sql.trim().toUpperCase().indexOf("SELECT") == 0; }
	 */

	/**
	 * 查询并关闭连接
	 * 
	 * @param sql
	 *            sql语句
	 * @param parameter
	 *            输入的参数组
	 * @return 查询结果
	 */
	public Vector query(String sql, Vector parameter) throws Exception {
		try {
			prepare(sql);

			for (int i = 0; i < parameter.size(); i++) {
				setObject(i + 1, parameter.elementAt(i));
			}

			return executeQuery();
		} catch (Exception e) {
			throw e;
		} finally {
			//			conn.close();
		}
	}

	/**
	 * 执行insert或update并关闭连接
	 * 
	 * @param sql
	 *            sql语句
	 * @param parameter
	 *            输入的参数组
	 * @return 执行结果
	 */
	public int insertUpdate(String sql, Vector parameter) throws Exception {
		try {
			prepare(sql);

			for (int i = 0; i < parameter.size(); i++) {
				setObject(i + 1, parameter.elementAt(i));
			}

			return executeUpdate();
		} catch (Exception e) {
			throw e;
		} finally {
			//			conn.close();
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -