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); } }