1. 程式人生 > >JDBC例子之Oracle篇

JDBC例子之Oracle篇

package util;

import java.io.Serializable;
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.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;


/**
 * @author Administrator
 * param1:driver type:String
 * param2:url type:String
 * param3:user type:String
 * param4:pw type:String
 * param5:con type:Connection
 * param6:pstmt type:PreparedStatememt
 * param7:rs type:ResultSet
 * param8:sql type:String
 * 步驟一:
 * 設定常量
 * 二:
 * 載入驅動,得到與資料庫的連線物件
 * 三:
 * 宣告sql語句,得到語句物件
 * 四:
 * 執行sql語句
 * 五:
 * 返回執行結果
 * 六:
 * 處理返回結果
 * while(rs.next()){
 * 		String user = rs.getString(1);
 * 		String pw = rs.getString(2);
 * }
 * 七:
 * 關閉物件,依次為rs,pstmt,con
 * 
 */
public class DBUtil implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private static String DRIVER = "oracle.jdbc.dirver.OracleDirver";
	private static String URL = "jdbc:oracle:thin:@localhost:1521:MyDataBase";
	private static String USER = "scott";
	private static String PASSWORD = "tiger";
	
    Connection con = null;
	PreparedStatement pstmt = null;
	ResultSet rs = null;
	
	public void setDriver(String driver){
		DBUtil.DRIVER = driver;
	}
	public void setURL(String url){
		DBUtil.URL = url;
	}
	public void setUser(String user){
		DBUtil.USER = user;
	}
	public void setPassword(String password){
		DBUtil.PASSWORD = password;
	}
	
	static{
		try {
			Class.forName(DRIVER);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	private Connection getConnection(){
		try {
			con = DriverManager.getConnection(URL,USER,PASSWORD);
		} catch (SQLException e){
			e.printStackTrace();
		}
		return con;
	}
	//獲取語句物件
	private PreparedStatement getPrepareStatement(String sql){
		try {
			pstmt = getConnection().prepareStatement(sql);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return pstmt;
	}
	//給pstmt的sql語句設定引數
	private void setParams(String sql,Object...params){
		pstmt = getPrepareStatement(sql) ;
		for(int i = 0; i<params.length; i++){
			try {
				pstmt.setObject(i+1,params[i]);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	//執行資料查詢操作時,將返回的結果封裝到List物件中
	public List<Map<String,String>> getList(String sql,Object...params){
		List<Map<String,String>> list = new ArrayList<Map<String,String>>();
		try{
			setParams(sql,params);
			rs = pstmt.executeQuery();
			ResultSetMetaData rsmd = rs.getMetaData();
			while(rs.next()){
			
			Map<String,String> m = new HashMap<String,String>();
				for(int i = 0;i<rsmd.getColumnCount(); i++){
					String colName = rsmd.getColumnName(i+1);
					m.put(colName,rs.getString(colName));
				}
				list.add(m);
			}
		}catch(SQLException e){
			e.printStackTrace();
		}finally{
			close();
		}
		return list;
		
	}
	//執行資料庫查詢操作時,將返回的結果封裝到List物件
	public Map<String,String> getMap(String sql,Object...params){
		List<Map<String,String>> list = getList(sql,params);
		if(list.isEmpty()){
			return null;
		}else{
			return (Map<String,String>)list.get(0);
		}
	}
	public int update(String sql,Object...params){
		int recNo = 0;
		try{
			setParams(sql,params);
			recNo = pstmt.executeUpdate();
		}catch(SQLException e){
			e.printStackTrace();
		}finally{
			close();
		}
		return recNo;
	}
	
	private void close(){
		try{
			if(rs!=null){
				rs.close();
			}
			if(pstmt!=null){
				pstmt.close();
			}
			if(con!=null){
				con.close();
			}
		}catch(SQLException e){
			e.printStackTrace();
		}
	}

}