存储机制的研究

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);
	}
}
相关文章
相关标签/搜索