<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    中文JAVA技術平等自由協作創造

    Java專題文章博客和開源

    常用鏈接

    統計

    最新評論

    JAVA操作數據庫的模板方法

     關于用操作數據庫模板方法如下代碼:
    [java]
    jdbc.properties
    url=jdbc:mysql://localhost:3306/cfms
    user=root
    password=123456
    driverClass=com.mysql.jdbc.Driver
    package cn.edu.hactcm.base.utils;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
    /**
    [java] view plaincopyprint?
    * CFMS :Computer files management system
    * version :1.0 2013-2-19 上午08:44:27
    *
    * 操作JDBC的工具類
    */
    public class JdbcUtils {
    private JdbcUtils() {
    }
    private static String url;
    private static String user;
    private static String password;
    /*
    * 靜態代碼塊
    */
    static {
    try {
    // 讀取配置文件,通過類加載器的方式讀取屬性文件
    InputStream in = JdbcUtils.class.getClassLoader()
    .getResourceAsStream("jdbc.properties");
    Properties prop = new Properties();
    prop.load(in);
    url = prop.getProperty("url");
    user = prop.getProperty("user");
    password = prop.getProperty("password");
    // 注冊驅動
    String driverClass = prop.getProperty("driverClass");
    Class.forName(driverClass);
    in.close();
    in = null;
    } catch (Exception e) {
    throw new ExceptionInInitializerError(e);
    }
    }
    /**
    * @return 獲取與指定數據庫的連接
    * @throws SQLException
    */
    public static Connection getConnection() throws SQLException {
    // url,user,password可以直接使用是因為上面定義成靜態的了。
    Connection connection = DriverManager
    .getConnection(url, user, password);
    return connection;
    }
    /**
    * @param rs :結果集
    * @param stmt:在程序中將使用PrepareStatement,其中Statement是其父類
    * @param conn:數據庫連接
    */
    public static void release(ResultSet rs, Statement stmt, Connection conn) {
    // 判斷結果集是否為空,如果不為空,關閉清空
    if (rs != null) {
    try {
    rs.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    rs = null;
    }
    // 判斷聲明是否為空,如果不為空,關閉清空
    if (stmt != null) {
    try {
    stmt.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    stmt = null;
    }
    // 判斷連接是否為空,如果不為空,關閉清空
    if (conn != null) {
    try {
    conn.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    conn = null;
    }
    }
    }
    package cn.edu.hactcm.base.dao;
    import java.sql.ResultSet;
    /**
    * CFMS :Computer files management system
    * version :1.0 2013-2-19 上午10:02:31
    */
    public interface ResultSetHandler {
    //處理結果集的方法
    public Object handle(ResultSet rs);
    }
    /**
    *
    */
    package cn.edu.hactcm.base.dao.impl;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import cn.edu.hactcm.base.dao.ResultSetHandler;
    /**
    * CFMS :Computer files management system
    * version :1.0 2013-2-19 上午10:38:37
    *
    * 取出第一行的所有記錄存入一個Object數組
    */
    @SuppressWarnings( { "unchecked", "unused" })
    public class ArrayHandler implements ResultSetHandler {
    private Class clazz;
    public ArrayHandler(Class clazz) {
    this.clazz = clazz;
    }
    public Object handle(ResultSet rs) {
    try {
    if (rs.next()) {
    // 指向了第一行的記錄
    // 獲得元數據
    ResultSetMetaData metaData = rs.getMetaData();
    // 獲得用于查詢的sql中的字段列數
    int count = metaData.getColumnCount();
    // 創建數組

    Object[] arr = new Object[count];
    // 迭代所有列的值,存入數組
    for (int i = 1; i <= count; i++) {
    Object value = rs.getObject(i); // 獲得指定列的值
    arr[i - 1] = value;
    }
    return arr;
    }
    return null;
    } catch (Exception e) {
    throw new RuntimeException(e);
    }
    }
    }
    /**
    *
    */
    package cn.edu.hactcm.base.dao.impl;
    import java.lang.reflect.Field;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import cn.edu.hactcm.base.dao.ResultSetHandler;
    /**
    * CFMS :Computer files management system
    * version :1.0 2013-2-19 上午10:38:37
    *
    * 此助手類用于取得結果集中的第一條記錄
    */
    @SuppressWarnings("unchecked")
    public class BeanHandler implements ResultSetHandler {
    private Class clazz;
    public BeanHandler(Class clazz) {
    this.clazz = clazz;
    }
    public Object handle(ResultSet rs) {
    // 不知道有幾列數據,不知道列名,不知道封裝到什么樣的bean
    // 表的列明和javabean的字段名一致
    try {
    if(rs.next()) {
    // 創建bean
    Object bean = clazz.newInstance();
    // 封裝數據
    // 獲得結果集的元數據
    ResultSetMetaData metaData = rs.getMetaData();
    int count = metaData.getColumnCount();
    // 迭代取每一列的數據
    for(int i=1; i<=count; i++) {
    // 獲得列名 username
    String columnName = metaData.getColumnName(i);
    // 獲得數據 ddd
    Object value = rs.getObject(columnName);
    // 根據列名反射出映射的屬性 username
    Field field = clazz.getDeclaredField(columnName);
    // 為屬性賦值
    field.setAccessible(true);
    field.set(bean, value);
    }
    return bean;
    }
    return null;
    } catch (Exception e) {
    throw new RuntimeException(e);
    }
    }
    }
    package cn.edu.hactcm.base.dao.impl;
    import java.lang.reflect.Field;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.util.ArrayList;
    import java.util.List;
    import cn.edu.hactcm.base.dao.ResultSetHandler;
    /**
    * CFMS :Computer files management system
    * version :1.0 2013-2-19 上午10:07:19
    *
    * 此助手類用于取得結果集中的記錄的list列表集合,集合中的每個元素是數據庫中的一條記錄 www.wx-jr.com
    */
    @SuppressWarnings("unchecked")
    public class BeanListHandler implements ResultSetHandler {
    private Class clazz;
    public BeanListHandler(Class clazz) {
    this.clazz = clazz;
    }
    public Object handle(ResultSet rs) {
    try {
    // 取出結果集所有的記錄,封裝到bean,存入list返回
    List list = new ArrayList();
    while (rs.next()) {
    Object bean = clazz.newInstance();
    // 獲得元數據
    ResultSetMetaData metaData = rs.getMetaData();
    // 獲得列的數量
    int count = metaData.getColumnCount();
    // 遍歷列
    for (int i = 1; i <= count; i++) {
    // 取列名
    String columnName = metaData.getColumnName(i);
    // 取這列的值
    Object value = rs.getObject(columnName);
    // 反射出屬性
    Field field = clazz.getDeclaredField(columnName);
    // 設置屬性
    field.setAccessible(true);
    field.set(bean, value);
    }
    // 加入list
    list.add(bean);
    }
    return list;
    } catch (Exception e) {
    throw new RuntimeException(e);
    }
    }
    }
    package cn.edu.hactcm.base.dao.impl;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import cn.edu.hactcm.base.dao.ResultSetHandler;
    import cn.edu.hactcm.base.utils.JdbcUtils;
    public class GenericDaoImpl {
    /**
    * 用于處理公共的insert,update,delete操縱雅思答案
    * @param sql :這里是傳入的sql語句
    * @param params :這里是參數數組
    * @return
    * @throws SQLException
    */
    public static int update(String sql, Object[] params) throws SQLException {
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    try {
    conn = JdbcUtils.getConnection();
    //預編譯sql
    pstmt = conn.prepareStatement(sql);
    //將參數設置進去
    for (int i = 0; i < params.length; i++) {
    pstmt.setObject(i+1, params[i]);
    }
    //發送sql
    int num = pstmt.executeUpdate();
    return num;
    } finally {
    JdbcUtils.release(rs, pstmt, conn);
    }
    }
    /**
    * 用于處理公共"查詢所有"的操作
    * @param sql :查詢參數
    * @param params :出入的id值
    * @param rsh :表示要實現那個結果封裝類
    * @return
    * @throws SQLException
    */
    public static Object query(String sql,Object[] params,ResultSetHandler rsh) throws SQLException{
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    try {
    //獲得連接
    conn = JdbcUtils.getConnection();
    //預編譯sql
    pstmt = conn.prepareStatement(sql);
    //將參數設置進去
    for (int i = 0; params != null && i < params.length; i++) {
    pstmt.setObject(i+1, params[i]);
    }
    //發送sql
    rs = pstmt.executeQuery();
    //不知道別人想如何處理結果集
    //干脆想別人所要一個結果集的處理器
    //為了讓當前代碼繼續,定義一個結果集處理器接口
    //策略模式,規定算法,具體的算法留給將來的調用者實現 www.dakaoedu.com
    Object obj = rsh.handle(rs);
    return obj;
    } finally {
    //釋放資源
    JdbcUtils.release(rs, pstmt, conn);
    }
    }
    }
     

    posted on 2013-08-17 09:50 好不容易 閱讀(295) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    PK10開獎 PK10開獎
    主站蜘蛛池模板: 亚洲色中文字幕在线播放| 亚洲欧洲日本国产| 全黄A免费一级毛片| 日韩免费观看的一级毛片| 色天使亚洲综合在线观看| 亚洲三级高清免费| 亚洲国产美女视频| 毛片a级毛片免费观看免下载| 亚洲高清中文字幕免费| 成年男女免费视频网站| 国产精品亚洲专区无码不卡| 亚洲第一页日韩专区| 一级毛片正片免费视频手机看| 亚洲免费一区二区| a毛片免费播放全部完整| 亚洲自偷自偷精品| 成人午夜18免费看| 免费一级全黄少妇性色生活片 | 四虎影视永久在线精品免费| 免费成人午夜视频| 国产一区二区三区免费观在线| 亚洲AV无码成人精品区蜜桃| 日本免费人成视频在线观看| 狠狠色香婷婷久久亚洲精品| 午夜免费福利在线| 二区久久国产乱子伦免费精品| 亚洲激情在线视频| 午夜无遮挡羞羞漫画免费| 一级做受视频免费是看美女| 亚洲av激情无码专区在线播放 | 日本在线看片免费人成视频1000| 亚洲午夜久久久精品电影院| 青青草国产免费久久久下载| 精品97国产免费人成视频 | 亚洲一区二区成人| 国产一级一片免费播放i| 久艹视频在线免费观看| 亚洲熟妇少妇任你躁在线观看| 亚洲午夜精品久久久久久浪潮| 亚洲黄色免费网站| a级毛片免费网站|