存儲機制的研究

package com.zhao.practice730_2;

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

/**
 * 數據庫操做類
 * 
 * @author  Administrator
 * 
 */
public class DBHelper {
	/**
	 * 加載字符串
	 */
	private static final String DRIVERNAME = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
	/**
	 * SqlServer的url字符串
	 */
	private static final String URL = "jdbc:sqlserver://localhost:1433; DatabaseName=Northwind";
	/**
	 * 用戶名字符串
	 */
	private static final String USERNAME = "sa";
	/**
	 * 密碼字符串
	 */
	private static final String PASSWORD = "3221682";
	/**
	 * 鏈接數據庫
	 */
	Connection conn = null;
	/**
	 * PreparedStatement
	 */
	PreparedStatement pstat = null;
	/**
	 * CallableStatement
	 */
	CallableStatement cst = null;
	/**
	 * 結果集ResultSet
	 */
	ResultSet rs = null;

	static {
		try {
			Class.forName(DRIVERNAME);
		} catch (ClassNotFoundException e) {

			e.printStackTrace();
		}
	}

	/**
	 * 取得鏈接
	 * 
	 * @return 
	 */
	private Connection getConnection() {
		try {
			conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return conn;
	}

	/**
	 * 取得PreparedStatement
	 */
	private PreparedStatement getPreparedStatement(String sql) {

		try {
			pstat = getConnection().prepareStatement(sql);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return pstat;
	}

	/**
	 * 取得結果集
	 * 
	 * @param sql
	 *            sql語句
	 * @param arrays
	 *            傳入數組
	 * @return  List
	 */
	public  List getResultSet(String sql, Object[] arrays) {
		List list = new ArrayList();
		pstat = getPreparedStatement(sql);
		try {
			// 設置對應?上的值
			for (int i = 0; i < arrays.length; i++) {
				pstat.setObject(i + 1, arrays[i]);

			}
			// 取得結果集
			rs = pstat.executeQuery();
			// 結果集元數據
			ResultSetMetaData rsmd;

			// 列數
			int columnCount = 0;

			Map map = null;
			// 遍歷每一行
			while (rs.next()) {
				map = new HashMap();

				rsmd = rs.getMetaData();
				columnCount = rsmd.getColumnCount();
				for (int i = 1; i <= columnCount; i++) {
					map.put(rsmd.getColumnName(i), rs.getObject(i));

				}
				list.add(map);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			close();
		}
		return list;
	}
	
	
	/**
	 * 取得存儲結果集
	 * @param sql sql語句
	 * @param arrays 傳入數組
	 * @return  callableStatement結果集
	 */
	
	public  List getResultSetByCallable(String sql, Object[] arrays) {
		List list = new ArrayList();
		
		try {
			cst = getConnection().prepareCall(sql);
			// 設置對應?上的值
			for (int i = 0; i < arrays.length; i++) {
				cst.setObject(i + 1, arrays[i]);

			}
			// 取得結果集
			rs = cst.executeQuery();
			// 結果集元數據
			ResultSetMetaData rsmd;

			// 列數
			int columnCount = 0;

			Map map = null;
			// 遍歷每一行
			while (rs.next()) {
				map = new HashMap();

				rsmd = rs.getMetaData();
				columnCount = rsmd.getColumnCount();
				for (int i = 1; i <= columnCount; i++) {
					map.put(rsmd.getColumnName(i), rs.getObject(i));

				}
				list.add(map);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			close();
		}
		return list;
	}
	/**
	 * 增刪改查的操做
	 * 
	 * @param sql
	 *            sql語句
	 * @param arrays
	 *            傳入的參數數組
	 * @return  int
	 */
	public int getDataByUpdate(String sql, Object[] arrays) {
		pstat = getPreparedStatement(sql);

		try {
			// 設置參數
			for (int i = 0; i < arrays.length; i++) {
				pstat.setObject(i + 1, arrays[i]);
			}
			// 開始增刪改查操做
			int i = pstat.executeUpdate();
			return i;
		} catch (SQLException e) {

			e.printStackTrace();
		}finally{
			close();
		}
		return 0;
	}

	/**
	 * 執行execute語句
	 */
	public Object getDataByExecute(String sql, Object[] arrays) {
		int line = 0;
		boolean hasResultSet = false;
		pstat = getPreparedStatement(sql);
		try {
			// 設置參數
			for (int i = 0; i < arrays.length; i++) {
				pstat.setObject(i + 1, arrays[i]);
			}
			// 開始查詢
			hasResultSet = pstat.execute();

			if (hasResultSet) {
				return getResultSet(sql, arrays);
			} else {
				line = pstat.getUpdateCount();
				return line;
			}

		} catch (SQLException e) {

			e.printStackTrace();
		}

		return null;
	}

	/**
	 * 關閉全部打開的數據庫鏈接
	 */
	public void close() {
		try {
			if (rs != null) {
				rs.close();
			}
		}catch (SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				if (pstat != null) {
					pstat.close();
				}

			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				try {
					if (conn != null) {
						conn.close();
					}
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

package com.zhao.practice730_2;

import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
 * 編寫一個存儲過程,實現傳入訂單編號,輸出該訂單下的商品列表
 * @author  Administrator
 *
 */
public class Test2 {
	private void method2(Orders order){
//		Product prod = new Product();
		String sql = "{call sp_productsInfo3(?)}";
		
		DBHelper db = new DBHelper();
		
		Object[] arrays = {order.getOrderID()};
		List list = db.getResultSetByCallable(sql, arrays);
		
		for (Object obj : list) {
			Map map = (Map)obj;
			Iterator it = map.keySet().iterator();
			while(it.hasNext()){
				String key =  (String) it.next();
				String value = ""+ map.get(key);
				System.out.println(key +"    "+value);
			}
			
		}
	}
	
	public static void main(String[] args) {
		Orders order = new Orders();
		order.setOrderID(10248);
		Test2 test = new Test2();
		test.method2(order);
	}
}
相關文章
相關標籤/搜索