中文JAVA技術(shù)平等自由協(xié)作創(chuàng)造

          Java專題文章博客和開源

          常用鏈接

          統(tǒng)計

          最新評論

          JAVA操作數(shù)據(jù)庫的模板方法

           關(guān)于用操作數(shù)據(jù)庫模板方法如下代碼:
          [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;
          /*
          * 靜態(tài)代碼塊
          */
          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");
          // 注冊驅(qū)動
          String driverClass = prop.getProperty("driverClass");
          Class.forName(driverClass);
          in.close();
          in = null;
          } catch (Exception e) {
          throw new ExceptionInInitializerError(e);
          }
          }
          /**
          * @return 獲取與指定數(shù)據(jù)庫的連接
          * @throws SQLException
          */
          public static Connection getConnection() throws SQLException {
          // url,user,password可以直接使用是因為上面定義成靜態(tài)的了。
          Connection connection = DriverManager
          .getConnection(url, user, password);
          return connection;
          }
          /**
          * @param rs :結(jié)果集
          * @param stmt:在程序中將使用PrepareStatement,其中Statement是其父類
          * @param conn:數(shù)據(jù)庫連接
          */
          public static void release(ResultSet rs, Statement stmt, Connection conn) {
          // 判斷結(jié)果集是否為空,如果不為空,關(guān)閉清空
          if (rs != null) {
          try {
          rs.close();
          } catch (SQLException e) {
          e.printStackTrace();
          }
          rs = null;
          }
          // 判斷聲明是否為空,如果不為空,關(guān)閉清空
          if (stmt != null) {
          try {
          stmt.close();
          } catch (SQLException e) {
          e.printStackTrace();
          }
          stmt = null;
          }
          // 判斷連接是否為空,如果不為空,關(guān)閉清空
          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 {
          //處理結(jié)果集的方法
          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數(shù)組
          */
          @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()) {
          // 指向了第一行的記錄
          // 獲得元數(shù)據(jù)
          ResultSetMetaData metaData = rs.getMetaData();
          // 獲得用于查詢的sql中的字段列數(shù)
          int count = metaData.getColumnCount();
          // 創(chuàng)建數(shù)組

          Object[] arr = new Object[count];
          // 迭代所有列的值,存入數(shù)組
          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
          *
          * 此助手類用于取得結(jié)果集中的第一條記錄
          */
          @SuppressWarnings("unchecked")
          public class BeanHandler implements ResultSetHandler {
          private Class clazz;
          public BeanHandler(Class clazz) {
          this.clazz = clazz;
          }
          public Object handle(ResultSet rs) {
          // 不知道有幾列數(shù)據(jù),不知道列名,不知道封裝到什么樣的bean
          // 表的列明和javabean的字段名一致
          try {
          if(rs.next()) {
          // 創(chuàng)建bean
          Object bean = clazz.newInstance();
          // 封裝數(shù)據(jù)
          // 獲得結(jié)果集的元數(shù)據(jù)
          ResultSetMetaData metaData = rs.getMetaData();
          int count = metaData.getColumnCount();
          // 迭代取每一列的數(shù)據(jù)
          for(int i=1; i<=count; i++) {
          // 獲得列名 username
          String columnName = metaData.getColumnName(i);
          // 獲得數(shù)據(jù) ddd
          Object value = rs.getObject(columnName);
          // 根據(jù)列名反射出映射的屬性 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
          *
          * 此助手類用于取得結(jié)果集中的記錄的list列表集合,集合中的每個元素是數(shù)據(jù)庫中的一條記錄 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 {
          // 取出結(jié)果集所有的記錄,封裝到bean,存入list返回
          List list = new ArrayList();
          while (rs.next()) {
          Object bean = clazz.newInstance();
          // 獲得元數(shù)據(jù)
          ResultSetMetaData metaData = rs.getMetaData();
          // 獲得列的數(shù)量
          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);
          // 設(shè)置屬性
          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 :這里是參數(shù)數(shù)組
          * @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();
          //預(yù)編譯sql
          pstmt = conn.prepareStatement(sql);
          //將參數(shù)設(shè)置進去
          for (int i = 0; i < params.length; i++) {
          pstmt.setObject(i+1, params[i]);
          }
          //發(fā)送sql
          int num = pstmt.executeUpdate();
          return num;
          } finally {
          JdbcUtils.release(rs, pstmt, conn);
          }
          }
          /**
          * 用于處理公共"查詢所有"的操作
          * @param sql :查詢參數(shù)
          * @param params :出入的id值
          * @param rsh :表示要實現(xiàn)那個結(jié)果封裝類
          * @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();
          //預(yù)編譯sql
          pstmt = conn.prepareStatement(sql);
          //將參數(shù)設(shè)置進去
          for (int i = 0; params != null && i < params.length; i++) {
          pstmt.setObject(i+1, params[i]);
          }
          //發(fā)送sql
          rs = pstmt.executeQuery();
          //不知道別人想如何處理結(jié)果集
          //干脆想別人所要一個結(jié)果集的處理器
          //為了讓當(dāng)前代碼繼續(xù),定義一個結(jié)果集處理器接口
          //策略模式,規(guī)定算法,具體的算法留給將來的調(diào)用者實現(xiàn) www.dakaoedu.com
          Object obj = rsh.handle(rs);
          return obj;
          } finally {
          //釋放資源
          JdbcUtils.release(rs, pstmt, conn);
          }
          }
          }
           

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


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


          網(wǎng)站導(dǎo)航:
           
          PK10開獎 PK10開獎
          主站蜘蛛池模板: 彭水| 绩溪县| 屏南县| 房山区| 潞西市| 三河市| 原阳县| 台江县| 天镇县| 安多县| 安平县| 乌兰察布市| 山西省| 朔州市| 宁陵县| 定西市| 嘉鱼县| 廉江市| 昭平县| 资兴市| 全州县| 长沙县| 泰来县| 台中市| 红河县| 龙口市| 彰化市| 南岸区| 彰武县| 壤塘县| 射阳县| 巴中市| 敖汉旗| 全州县| 邯郸市| 自治县| 海城市| 新郑市| 托克逊县| 浮梁县| 武穴市|