<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開獎
    主站蜘蛛池模板: 国产成人在线观看免费网站| 91精品国产免费入口| 国产福利免费观看| 亚洲精品国产国语| 97性无码区免费| 亚洲国产成人精品久久| 114一级毛片免费| 亚洲区视频在线观看| 久久精品女人天堂AV免费观看| 亚洲色图黄色小说| 91免费资源网站入口| 亚洲另类春色国产精品| 99久久免费精品国产72精品九九| 亚洲1234区乱码| 国产免费私拍一区二区三区| 边摸边吃奶边做爽免费视频99| 免费观看国产小粉嫩喷水| 一级免费黄色大片| 久久亚洲精品视频| 免费v片在线观看视频网站| 亚洲一久久久久久久久| 午夜国产羞羞视频免费网站| 中文字幕a∨在线乱码免费看| 亚洲av日韩av激情亚洲| 国国内清清草原免费视频99| 亚洲a∨国产av综合av下载| 国产综合亚洲专区在线| 最近中文字幕免费完整| 亚洲第一第二第三第四第五第六| 亚洲黄片毛片在线观看| 日韩午夜理论免费TV影院| 亚洲一区二区观看播放| 91麻豆精品国产自产在线观看亚洲| 91av视频免费在线观看| 亚洲avav天堂av在线网毛片| 4338×亚洲全国最大色成网站| 日韩免费无码视频一区二区三区| 亚洲国产综合精品中文第一| 亚洲精品亚洲人成在线观看下载| 99久久精品国产免费| 久久精品熟女亚洲av麻豆|