今天貼一個數據庫通用類

通過Orcal和MySql測試過,可行


package com.util;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.Date;
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.ArrayList;
import java.util.HashMap;

/**
 * <dl>
 * <dt><b>類機能概要:</b></dt><dd>
 * 
 * </dd>
 * </dl>
 * @copyright :Copyright 2010, IBM ETP. All right reserved.
 *【Update History】
 * Version	Date		Company		Name			Anken-No	Anken-Name
 * -------	----------	----------	--------------	----------	------------
 * 1.00		2010-9-28	IBM			Peng						create
 */
public class DBConnection {
	private final static String DRIVER_CLASS = "oracle.jdbc.driver.OracleDriver";
	private final static String URL = "jdbc:oracle:thin:@localhost:1521:XE";
	private final static String USERID = "talk";
	private final static String PWD = "sa";
	private Connection conn;
	private PreparedStatement prepstmt;
	private Statement stmt;

	/**
	 * <dl>
	 * <dt><b>Method機能概要:</b></dt>
	 * <dd>構造方法,默認創建一個數據庫連接<br>
	 * 並在內部生成一個Statement對象</dd>
	 * </dl>
	 */
	public DBConnection() {
		getConn();
		try {
			stmt = conn.createStatement();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	/**
	 * <dl>
	 * <dt><b>Method機能概要:</b></dt>
	 * <dd>構造方法,默認創建一個數據庫連接<br>
	 * 並使用參數傳入的SQL語句,創建一個PreparedStatement對象
	 * </dd>
	 * </dl>
	 * @param sql
	 */
	public DBConnection(String sql) {
		getConn();
		try {
			prepareStatement(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	/**
	 * <dl>
	 * <dt><b>Method機能概要:</b></dt>
	 * <dd>私有方法,創建一個數據庫連接
	 * 並設置回滾點</dd>
	 * </dl>
	 */
	private void getConn() {
		try {
			Class.forName(DRIVER_CLASS);
			conn = DriverManager.getConnection(URL, USERID, PWD);
			// 禁止自動提交
			conn.setAutoCommit(false);
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	/**
	 * <dl>
	 * <dt><b>Method機能概要:</b></dt>
	 * <dd>得到Connection對象</dd>
	 * </dl>
	 * @return Connection
	 */
	public Connection getConnection() {
		return conn;
	}
	
	/**
	 * <dl>
	 * <dt><b>Method機能概要:</b></dt>
	 * <dd>向數據庫提交所有改變</dd>
	 * </dl>
	 * @throws SQLException
	 */
	public void commit() throws SQLException {
		conn.commit();
	}
	
	/**
	 * <dl>
	 * <dt><b>Method機能概要:</b></dt>
	 * <dd>回滾到初始狀態</dd>
	 * </dl>
	 * @throws SQLException
	 */
	public void rollback() throws SQLException {
		conn.rollback();
	}

	/**
	 * <dl>
	 * <dt><b>Method機能概要:</b></dt>
	 * <dd>使用PreparedStatement對象處理傳入的SQL語句</dd>
	 * </dl>
	 * @param sql
	 * @throws SQLException
	 */
	public void prepareStatement(String sql) throws SQLException {
		prepstmt = conn.prepareStatement(sql);
	}

	public void setString(int index, String value) throws SQLException {
		prepstmt.setString(index, value);
	}

	public void setInt(int index, int value) throws SQLException {
		prepstmt.setInt(index, value);
	}

	public void setBoolean(int index, boolean value) throws SQLException {
		prepstmt.setBoolean(index, value);
	}

	public void setDate(int index, Date value) throws SQLException {
		prepstmt.setDate(index, value);
	}

	public void setLong(int index, long value) throws SQLException {
		prepstmt.setLong(index, value);
	}

	public void setFloat(int index, float value) throws SQLException {
		prepstmt.setFloat(index, value);
	}

	public void setBinaryStream(int index, InputStream in, int length)
			throws SQLException {
		prepstmt.setBinaryStream(index, in, length);
	}

	public void clearParameters() throws SQLException {
		prepstmt.clearParameters();
	}

	public PreparedStatement getPreparedStatement() {
		return prepstmt;
	}

	public Statement getStatement() {
		return stmt;
	}

	/**
	 * 執行Statement查詢語句
	 * 
	 * @param sql
	 * @return ArrayList
	 * @throws Exception
	 */
	public ArrayList<HashMap<Object, Object>> executeQuery(String sql) throws Exception {
		if (stmt != null) {
			return this.convertResultSetToArrayList(stmt.executeQuery(sql));
		} else {
			return null;
		}
	}

	/**
	 * 執行PreparedStatement查詢語句
	 * 
	 * @return ArrayList
	 * @throws Exception
	 */
	public ArrayList<HashMap<Object, Object>> executeQuery() throws Exception {
		if (prepstmt != null) {
			return this.convertResultSetToArrayList(prepstmt.executeQuery());
		} else {
			return null;
		}
	}
	
	/**
	 * 執行PreparedStatement查詢語句
	 * 返回一個ResultSet對象
	 * 
	 * @return ResultSet
	 * @throws Exception
	 */
	public ResultSet executeQueryResultSet() {
		ResultSet resultSet = null;
		return resultSet;
	}

	/**
	 * 執行Statement更改語句
	 * 
	 * @param sql
	 * @throws SQLException
	 */
	public void executeUpdate(String sql) throws SQLException {
		if (stmt != null)
			stmt.executeUpdate(sql);
	}

	/**
	 * 執行PreparedStatement更改語句
	 * 
	 * @throws SQLException
	 */
	public void executeUpdate() throws SQLException {
		if (prepstmt != null)
			prepstmt.executeUpdate();
	}

	/**
	 * 轉換記錄集對象爲數組列表對象
	 * 
	 * @param rs
	 * @return ArrayList
	 * @throws Exception
	 */
	private ArrayList<HashMap<Object, Object>> convertResultSetToArrayList(
			ResultSet rs) throws Exception {
		// 獲取rs 集合信息對象
		ResultSetMetaData rsmd = rs.getMetaData();
		// 創建數組列表集合對象
		ArrayList<HashMap<Object, Object>> tempList = new ArrayList<HashMap<Object, Object>>();
		HashMap<Object, Object> tempHash = null;
		// 填充數組列表集合
		while (rs.next()) {
			// 創建鍵值對集合對象
			tempHash = new HashMap<Object, Object>();
			for (int i = 0; i < rsmd.getColumnCount(); i++) {
				// 遍歷每列數據,以鍵值形式存在對象tempHash中
				tempHash.put(rsmd.getColumnName(i + 1).toUpperCase(), rs
						.getString(rsmd.getColumnName(i + 1)));
			}
			// 第一個鍵值對,存儲在tempList列表集合對象中
			tempList.add(tempHash);
		}
		return tempList;// 返回填充完畢的數組列表集合對象
	}

	/**
	 * 關閉連接
	 */
	public void close() {
		try {
			if (stmt != null) {
				stmt.close();
				stmt = null;
			}
			if (prepstmt != null) {
				prepstmt.close();
				prepstmt = null;
			}
			conn.close();
			conn = null;
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


簡單點應用,回去查詢結果及List

package com.action;

import java.util.List;

import com.opensymphony.xwork2.ActionSupport;
import com.util.DBConnection;

public class GetListAction extends ActionSupport{
	private List list;
	public String execute() throws Exception {
		DBConnection con = new DBConnection();
		String sql ="select * from admin";
		list = con.executeQuery(sql);
		con.commit();
		con.close();
		return SUCCESS;
	}
	public List getList() {
		return list;
	}
	public void setList(List list) {
		this.list = list;
	}

}

通過JSTL標籤結合EL表達式,把結果集List顯示到前臺頁面(配置struts.xml就不寫了,注意導入JSTL所需要的架包jstl.jar  standard.jar)

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>NewList</title>
</head>
<body>
<table width="20%" border="1">
	<tr>
		<td>行號</td>
		<td>姓名</td>
		<td>密碼</td>
	</tr>
	<c:forEach items="${list}" var="list" varStatus="i">
		<tr>
		<td>${i.index+1 }</td>
			<td><a href="index.action?username=${list.USERNAME }&password=${list.PASSWORD }">${list.USERNAME }</a></td>
			<td>${list.PASSWORD }</td>
		</tr>
	</c:forEach>
</table>
</body>
</html>




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