JDBC BaseDao.java

package cn.com.cloud.utils;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import javax.servlet.jsp.jstl.sql.Result;
import javax.servlet.jsp.jstl.sql.ResultSupport;

import org.apache.log4j.Logger;

import cn.com.agree.web.tapestry.util.SystemConfigUtil;

/**
 * <DL>
 * <DT>dao
 * @author HenryLee
 * @version 1.0.0
 * @date 2011-6-20 下午02:55:59
 */
public class BaseDao {
//	public static void main(String[] args) {
//		loadProperties();
//	}
	/**
     * Logger
     */
    static Logger logger = Logger.getLogger(SystemConfigUtil.class);
    
	private static String driverName=null;
	private static String url=null;
	private static String userName=null;
	private static String pwd=null;
	
	/**
	 * 通過靜態塊加載驅動
	 */
	static
	{
		if (driverName==null || url==null || userName==null || pwd==null) {
			loadProperties();
		}
		loadDriver();
	}
	/**
	 * 加載配置
	 */
	public static void loadProperties()
	{
		logger.error("-----"+BaseDao.class+"正在加載jdbc.properties配置");
		Properties properties=new Properties();
		//讀取jdbc.properties配置文件
		InputStream inStream=null;
		String appclassPath = BaseDao.class.getResource("/").getPath();
		appclassPath = appclassPath.replaceAll("%20", " ");
		logger.debug("-----appclassPath:"+appclassPath);
		String path=appclassPath+"..\\conf\\jdbc.properties";
		logger.debug("-----path:"+path);
		
		try {
			inStream=new FileInputStream(path);
		} catch (FileNotFoundException e1) {
			e1.printStackTrace();
		}
		
		try {
			properties.load(inStream);
		} catch (IOException e) {
			e.printStackTrace();
			return;
		}
		
		driverName=properties.getProperty("jdbc.driverClassName");
		url=properties.getProperty("jdbc.url");
		userName=properties.getProperty("jdbc.username");
		pwd=properties.getProperty("jdbc.password");
		
		logger.debug("-----"+BaseDao.class.getName()+"已讀取jdbc.properties配置爲:"+
				"\n"+"driverName:"+driverName+
				"\n"+"url:"+url+
				"\n"+"userName:"+userName+
				"\n"+"pwd:"+pwd);
	}
	/**
	 * 加載驅動
	 */
	private static void loadDriver()
	{
		try {
			Class.forName(driverName);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 獲取連接
	 * @return Connection
	 * @throws SQLException
	 */
	public static Connection getConn() throws SQLException
	{
		return DriverManager.getConnection(url, userName, pwd);
	}
	
	/**
	 * 執行增刪改
	 * @param sql
	 * @param args
	 * @return boolean
	 */
	public static boolean executeSql(String sql,Object[] args)
	{
		boolean sign=false;
		Connection conn=null;
		PreparedStatement state=null;
		
		try {
			conn=getConn();
			state=conn.prepareStatement(sql);
			if(args!=null && args.length>0)
			{
				for (int i = 0; i < args.length; i++) {
					state.setObject(i+1, args[i]);
				}
			}
			int rows=state.executeUpdate();
			if(rows>0)
				sign=true;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		finally
		{
			closeAll(null, state, conn);
		}
		return sign;
	}		
	
	/**
	 * 執行查詢
	 * @param sql
	 * @param args
	 * @return javax.servlet.jsp.jstl.sql.Result;
	 */
	public static Result executeQuery(String sql,Object[] args)
	{
		//JSTL中提供的類,因此要導入JSTL的兩個jar包
		Result result=null;
		Connection conn=null;
		PreparedStatement state=null;
		ResultSet rs=null;
		
		
		try {
			conn=getConn();
			state=conn.prepareStatement(sql);
			if(args!=null && args.length>0)
			{
				for (int i = 0; i < args.length; i++) {
					state.setObject(i+1, args[i]);
				}
			}
			rs= state.executeQuery();
			result=ResultSupport.toResult(rs);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		finally
		{
			closeAll(rs, state, conn);
		}
		return result;
	}
	
	/**
	 * 關閉資源
	 * @param rs
	 * @param state
	 * @param conn
	 */
	public static void closeAll(ResultSet rs,Statement state,Connection conn)
	{
		try {
			if(rs!=null)
				rs.close();
			if(state!=null)
				state.close();
			if(conn!=null && conn.isClosed())
				conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

 
發佈了84 篇原創文章 · 獲贊 9 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章