隨筆 - 6  文章 - 129  trackbacks - 0
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(14)

          隨筆檔案(6)

          文章分類(467)

          文章檔案(423)

          相冊

          收藏夾(18)

          JAVA

          搜索

          •  

          積分與排名

          • 積分 - 827222
          • 排名 - 49

          最新評論

          閱讀排行榜

          評論排行榜

          一個繼承ArrayList類的ResultSet,一個繼承HashMap的Record

          執(zhí)行,把java.sql.ResultSet對象中的一列封裝成Record,加到ArrayList類型的ResultSet對象中
           /**
               * 執(zhí)行 SQL 語句 (帶分頁功能)
               * @param con 數(shù)據(jù)庫鏈接 Connection
               * @param strSQL SQL語句
               * @param nCommonPageSize 每頁最大記錄數(shù)
               * @param nCurrentPage 當前頁號
               * @param nTotalRecordCount 總記錄數(shù), 如果等于 -1 或小于 0, 則由本函數(shù)相關方法得到此值
               * @param obj 字段對象
               * @return 如果執(zhí)行的是查詢操作(select ...), 成功返回封裝成 RecordSet 的記錄集, 異常或失敗返回 null
               *  如果執(zhí)行的是寫操作, 成功返回空的 RecordSet(含操作的記錄個數(shù)), 異常或失敗返回 null
               */
              public static RecordSet executeWithDefaultDriver(Connection con, String strSQL, int nCommonPageSize, int nCurrentPage, int nTotalRecordCount, Object[] obj)
              {
                PreparedStatement ps = null;
                try
                {
                  if(nCommonPageSize<=0)
                    throw new Exception("頁記錄數(shù)小于 0: (" + nCommonPageSize + " 條記錄/頁)");
                  if(nCurrentPage<=0)
                    throw new Exception("頁數(shù)小于 0: (第 " + nCurrentPage + " 頁)");
                  RecordSet set = new RecordSet();
                  strSQL = strSQL.trim();
                  ps = con.prepareStatement(strSQL, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                  //設置字段值
                  setFieldValue(ps, obj, strSQL);
                  //判斷是否為查詢 SQL, 還是更新 SQL
                  if(strSQL.substring(0, strSQL.indexOf(" ")).equalsIgnoreCase("SELECT"))
                  {
                    ResultSet rs = ps.executeQuery();
                    ResultSetMetaData rsmd = rs.getMetaData();
                    int nColumn = rsmd.getColumnCount();
                    //移到結果集最后一條, 取得記錄總數(shù)
                    set.CURRENT_PAGE = nCurrentPage;
                    set.COMMON_PAGE_SIZE = nCommonPageSize;
                    if(nTotalRecordCount>=0)
                      set.TOTAL_RECORD_COUNT = nTotalRecordCount;
                    else
                    {
                      rs.last();
                      set.TOTAL_RECORD_COUNT = rs.getRow();
                    }
                    set.TOTAL_PAGE = (set.TOTAL_RECORD_COUNT + nCommonPageSize - 1) / nCommonPageSize;
                    if(nCurrentPage==set.TOTAL_PAGE && set.TOTAL_RECORD_COUNT%nCommonPageSize!=0)
                      set.CURRENT_PAGE_SIZE = set.TOTAL_RECORD_COUNT % nCommonPageSize;
                    else
                      set.CURRENT_PAGE_SIZE = nCommonPageSize;
                    if(set.TOTAL_RECORD_COUNT==0)
                      return set;
                    //定位到當前頁的頁首
                    rs.absolute(nCommonPageSize * (nCurrentPage - 1) + 1);
                    do
                    {
                      Record record = new Record();
                      for(int i=0;i<nColumn;i++)
                      {
                        String strField = rsmd.getColumnName(i+1).toUpperCase();
                        record.put(strField, rs.getObject(i+1));
                      }
                      set.add(record);
                    }
                    while(rs.getRow()<nCommonPageSize*nCurrentPage && rs.next());
                    rs.close();
                  }
                  else
                    set.TOTAL_RECORD_COUNT = ps.executeUpdate();
                  return set;
                }
                catch(Exception e)
                {
                  e.printStackTrace();
                  return null;
                }
                finally
                {
                  try
                  {
                    if(ps!=null)
                      ps.close();
                  }
                  catch(Exception e){}
                }
              }

          靜態(tài)方法直接調用,返回RS

          調用
           Record record =(Record)rs.get(i);
           String code=record.getString("code");

          取翻頁信息
          <td valign="middle" align="right">每頁<%=rs.COMMON_PAGE_SIZE%>行
           共<%=rs.TOTAL_RECORD_COUNT%>行
           第<%=rs.CURRENT_PAGE%>頁
           共<%=rs.TOTAL_PAGE%>頁
           <BR>
           <%if(rs.CURRENT_PAGE==1){ out.print(" 首頁 上一頁");   }else{  %>
           <A HREF="javascript:gotoPage(1)">首頁</A>
           <A HREF="javascript:gotoPage(<%=rs.CURRENT_PAGE-1%>)">上一頁</A>
           <%}%>
           <%if(rs.CURRENT_PAGE==rs.TOTAL_PAGE){ out.print("下一頁 尾頁");   }else{  %>
           <A HREF="javascript:gotoPage(<%=rs.CURRENT_PAGE+1%>)">下一頁</A>
           <A HREF="javascript:gotoPage(<%=rs.TOTAL_PAGE%>)">尾頁</A>
           <%}%>
           轉到第<SELECT name="jumpPage" onchange="Jumping()">
              <% for(int i=1;i<=rs.TOTAL_PAGE;i++)  {
              if (i== rs.CURRENT_PAGE){
              %>
              <OPTION selected value=<%=i%>><%=i%></OPTION>
              <%}else{%>
              <OPTION value=<%=i%>><%=i%></OPTION>
              <%}}%>
              </SELECT>頁
          </td>


          //////////////////////////////////RecordSet.java///////////////////////////////////////
          import java.util.*;

          public class RecordSet
              extends ArrayList {

            // 記錄集信息
            /** 總頁數(shù) */
            public int TOTAL_PAGE = -1;
            /** 當前頁號 */
            public int CURRENT_PAGE = -1;
            /** 每頁最大記錄數(shù) */
            public int COMMON_PAGE_SIZE = -1;
            /** 當前頁所含記錄數(shù) */
            public int CURRENT_PAGE_SIZE = -1;
            /** 總記錄數(shù) */
            public int TOTAL_RECORD_COUNT = -1;

            /** 當前指向的記錄位置 ( 初始位置在第一條記錄之前的空位上 ) */
            private int currentRecordRow = 0;

            /**
             * 取得當前記錄的位置
             * @return 記錄的位置
             */
            public int getRow() {
              return currentRecordRow;
            }

            /**
             * 得到第n條記錄
             * @param i 記錄位置 ( 取值范圍: 1--返回的記錄數(shù) )
             * @return 成功返回記錄, 異常或失敗返回 false
             */
            public Record getRecord(int i) {
              try {
                return (Record)this.get(i - 1);
              }
              catch (Exception e) {
                //Log.error(e);
                return null;
              }
            }

            /**
             * 得到當前記錄
             * @return 成功返回記錄, 異常或失敗返回 false
             */
            public Record getRecord() {
              if (isBeforeFirst()) {
                //Log.warn("指針在初始位置, 請使用 first() 或 next() 方法將指針指向第一條記錄");
                return null;
              }
              if (isAfterLast()) {
                //Log.warn("指針在結束位置, 請使用 first() 方法將指針指向第一條記錄");
                return null;
              }
              return getRecord(currentRecordRow);
            }

            /**
             * 定位到絕對位置的記錄
             * @param row 記錄位置 ( 0--返回的記錄數(shù)+1 )
             * @return 成功返回 true, 異常或失敗返回 false
             */
            public boolean absolute(int row) {
              if (0 <= row && row <= this.size() + 1) {
                currentRecordRow = row;
                return true;
              }
              else {
                return false;
              }
            }

            /**
             * 定位到首條記錄之前
             */
            public void beforeFirst() {
              currentRecordRow = 0;
            }

            /**
             * 定位到末條記錄之后
             */
            public void afterLast() {
              currentRecordRow = this.size() + 1;
            }

            /**
             * 定位到首條記錄
             * @return 成功返回 true, 失敗返回 false
             */
            public boolean first() {
              if (this.isEmpty()) {
                return false;
              }
              else {
                currentRecordRow = 1;
                return true;
              }
            }

            /**
             * 定位到末條記錄
             * @return 成功返回 true, 失敗返回 false
             */
            public boolean last() {
              if (this.isEmpty()) {
                return false;
              }
              else {
                currentRecordRow = this.size();
                return true;
              }
            }

            /**
             * 是否在首條記錄之前
             * @return 是返回 true, 否返回 false
             */
            public boolean isBeforeFirst() {
              if (currentRecordRow == 0) {
                return true;
              }
              else {
                return false;
              }
            }

            /**
             * 是否在末條記錄之后
             * @return 是返回 true, 否返回 false
             */
            public boolean isAfterLast() {
              if (currentRecordRow == this.size() + 1) {
                return true;
              }
              else {
                return false;
              }
            }

            /**
             * 是否位于首條記錄
             * @return 是返回 true, 否返回 false
             */
            public boolean isFirst() {
              if (this.isEmpty()) {
                return false;
              }
              else {
                if (currentRecordRow == 1) {
                  return true;
                }
                else {
                  return false;
                }
              }
            }

            /**
             * 是否位于末條記錄
             * @return 是返回 true, 否返回 false
             */
            public boolean isLast() {
              if (this.isEmpty()) {
                return false;
              }
              else {
                if (currentRecordRow == this.size()) {
                  return true;
                }
                else {
                  return false;
                }
              }
            }

            /**
             * 定位到前一條記錄
             * @return 成功返回 true, 失敗返回 false
             */
            public boolean previous() {
              if (currentRecordRow < 1) {
                return false;
              }
              else {
                currentRecordRow--;
                if (currentRecordRow < 1) {
                  return false;
                }
                else {
                  return true;
                }
              }
            }

            /**
             * 定位到后一條記錄
             * @return 成功返回 true, 失敗返回 false
             */
            public boolean next() {
              if (currentRecordRow > this.size()) {
                return false;
              }
              else {
                currentRecordRow++;
                if (currentRecordRow > this.size()) {
                  return false;
                }
                else {
                  return true;
                }
              }
            }

            /**
             * 得到數(shù)字(推薦使用這個方法得到數(shù)字, 可以避免各種數(shù)據(jù)庫數(shù)據(jù)類型不同而產生的問題)
             * @param key 字段名
             * @return 數(shù)字
             */
            public double getNumber(String key) {
              return Double.parseDouble(getString(key));
            }

            /**
             * 得到 String 類型的值(用 getObject 方法取得, 并使用了 trim 方法去掉兩端空格, 當對象為空時返回空字符串)
             * @param key 字段名
             * @return String 類型的值
             */
            public String getString(String key) {
              Object obj = this.getRecord().getObject(key);
              if (obj == null) {
                return "";
              }
              else {
                return obj.toString().trim();
              }
            }

            /**
             * 得到 Timestamp 類型的值
             * @param key 字段名
             * @return Timestamp 類型的值
             */
            public java.sql.Timestamp getTimestamp(String key) {
              return this.getRecord().getTimestamp(key);
            }

            /**
             * 得到 Date 類型的值
             * @param key 字段名
             * @return Date 類型的值
             */
            public java.sql.Date getDate(String key) {
              return this.getRecord().getDate(key);
            }

            /**
             * 得到 Time 類型的值
             * @param key 字段名
             * @return Time 類型的值
             */
            public java.sql.Time getTime(String key) {
              return this.getRecord().getTime(key);
            }

            /**
             * 得到 BigDecimal 類型的值
             * @param key 字段名
             * @return BigDecimal 類型的值
             */
            public java.math.BigDecimal getBigDecimal(String key) {
              return this.getRecord().getBigDecimal(key);
            }

            /**
             * 得到 long 類型的值
             * @param key 字段名
             * @return long 類型的值
             */
            public long getLong(String key) {
              return this.getRecord().getLong(key).longValue();
            }

            /**
             * 得到 int 類型的值
             * @param key 字段名
             * @return int 類型的值
             */
            public int getInt(String key) {
              return this.getRecord().getInteger(key).intValue();
            }

            /**
             * 得到 short 類型的值
             * @param key 字段名
             * @return short 類型的值
             */
            public short getShort(String key) {
              return this.getRecord().getShort(key).shortValue();
            }

            /**
             * 得到 double 類型的值
             * @param key 字段名
             * @return double 類型的值
             */
            public double getDouble(String key) {
              return this.getRecord().getDouble(key).doubleValue();
            }

            /**
             * 得到 float 類型的值
             * @param key 字段名
             * @return float 類型的值
             */
            public float getFloat(String key) {
              return this.getRecord().getFloat(key).floatValue();
            }

            /**
             * 得到 boolean 類型的值
             * @param key 字段名
             * @return boolean 類型的值
             */
            public boolean getBoolean(String key) {
              return this.getRecord().getBoolean(key).booleanValue();
            }

            /**
             * 得到 byte 類型的值
             * @param key 字段名
             * @return byte 類型的值
             */
            public byte getByte(String key) {
              return this.getRecord().getByte(key).byteValue();
            }

            /**
             * 得到 byte[] 類型的值
             * @param key 字段名
             * @return byte[] 類型的值
             */
            public byte[] getBytes(String key) {
              return this.getRecord().getBytes(key);
            }

            /**
             * 得到 Blob 類型的值
             * @param key 字段名
             * @return Blob 類型的值
             */
            public java.sql.Blob getBlob(String key) {
              return this.getRecord().getBlob(key);
            }

            /**
             * 得到 Clob 類型的值
             * @param key 字段名
             * @return Clob 類型的值
             */
            public java.sql.Clob getClob(String key) {
              return this.getRecord().getClob(key);
            }

            /**
             * 得到 Array 類型的值
             * @param key 字段名
             * @return Array 類型的值
             */
            public java.sql.Array getArray(String key) {
              return this.getRecord().getArray(key);
            }

            /**
             * 得到 InputStream 類型的值
             * @param key 字段名
             * @return InputStream 類型的值
             */
            public java.io.InputStream getBinaryStream(String key) {
              return this.getRecord().getBinaryStream(key);
            }

            /**
             * 得到 Object 類型的值
             * 注意: 如果字段為 char 類型, 要注意返回的值尾部是否有多余的空格
             * @param key 字段名
             * @return Object 類型的值
             */
            public Object getObject(String key) {
              return this.getRecord().getObject(key);
            }

            /**
             * 返回相鄰的頁號
             * @param size 相鄰的頁數(shù)
             * @return 成功返回所有相鄰的頁號集合, 失敗返回 null
             */
            public int[] getNeighbouringPage(int size) {
              try {
                int left = (this.CURRENT_PAGE - 1 > size) ? size : this.CURRENT_PAGE - 1;
                    int right = (this.TOTAL_PAGE - this.CURRENT_PAGE > size) ? size :
                    this.TOTAL_PAGE - this.CURRENT_PAGE;
                    int begin = this.CURRENT_PAGE - left;
                int[] num = new int[left + 1 + right];
                for (int i = 0; i < num.length; i++) {
                  num[i] = begin + i;
                }
                return num;
              }
              catch (Exception e) {
                //Log.error(e);
                return null;
              }
            }

            /**
             * 與另一個記錄集合并
             * @param rs 記錄集
             */
            public void merge(RecordSet rs) {
              try {
                rs.beforeFirst();
                while (rs.next()) {
                  this.add(rs.getRecord());
                }
                this.TOTAL_RECORD_COUNT += rs.TOTAL_RECORD_COUNT;
                this.beforeFirst();
              }
              catch (Exception e) {
                //Log.error(e);
              }
            }
          }

          //////////////////////////////////////////Record.java///////////////////////////////////////////

          import java.util.*;

          public class Record
              extends HashMap {

            /**
             * 取得字段的值
             * @param key 字段名
             * @return 成功返回字段的取值, 異常或失敗返回 null
             */
            public Object get(String key) {
              if (key == null) {
                return null;
              }
              else {
                return super.get(key.toUpperCase());
              }
            }

            /**
             * 得到 String 類型的值
             * @param key 字段名
             * @return String 類型的值
             */
            public java.lang.String getString(String key) {
              Object obj = this.get(key);
              return (java.lang.String) obj;
            }

            /**
             * 得到 Timestamp 類型的值
             * @param key 字段名
             * @return Timestamp 類型的值
             */
            public java.sql.Timestamp getTimestamp(String key) {
              Object obj = this.get(key);
              return (java.sql.Timestamp) obj;
            }

            /**
             * 得到 Date 類型的值
             * @param key 字段名
             * @return Date 類型的值
             */
            public java.sql.Date getDate(String key) {
              Object obj = this.get(key);
              return (java.sql.Date) obj;
            }

            /**
             * 得到 Time 類型的值
             * @param key 字段名
             * @return Time 類型的值
             */
            public java.sql.Time getTime(String key) {
              Object obj = this.get(key);
              return (java.sql.Time) obj;
            }

            /**
             * 得到 BigDecimal 類型的值
             * @param key 字段名
             * @return BigDecimal 類型的值
             */
            public java.math.BigDecimal getBigDecimal(String key) {
              Object obj = this.get(key);
              return (java.math.BigDecimal) obj;
            }

            /**
             * 得到 Long 類型的值
             * @param key 字段名
             * @return Long 類型的值
             */
            public java.lang.Long getLong(String key) {
              Object obj = this.get(key);
              return (java.lang.Long) obj;
            }

            /**
             * 得到 Integer 類型的值
             * @param key 字段名
             * @return Integer 類型的值
             */
            public java.lang.Integer getInteger(String key) {
              Object obj = this.get(key);
              return (java.lang.Integer) obj;
            }

            /**
             * 得到 Short 類型的值
             * @param key 字段名
             * @return Short 類型的值
             */
            public java.lang.Short getShort(String key) {
              Object obj = this.get(key);
              return (java.lang.Short) obj;
            }

            /**
             * 得到 Double 類型的值
             * @param key 字段名
             * @return Double 類型的值
             */
            public java.lang.Double getDouble(String key) {
              Object obj = this.get(key);
              return (java.lang.Double) obj;
            }

            /**
             * 得到 Float 類型的值
             * @param key 字段名
             * @return Float 類型的值
             */
            public java.lang.Float getFloat(String key) {
              Object obj = this.get(key);
              return (java.lang.Float) obj;
            }

            /**
             * 得到 Boolean 類型的值
             * @param key 字段名
             * @return Boolean 類型的值
             */
            public java.lang.Boolean getBoolean(String key) {
              Object obj = this.get(key);
              return (java.lang.Boolean) obj;
            }

            /**
             * 得到 Byte 類型的值
             * @param key 字段名
             * @return Byte 類型的值
             */
            public java.lang.Byte getByte(String key) {
              Object obj = this.get(key);
              return (java.lang.Byte) obj;
            }

            /**
             * 得到 byte[] 類型的值
             * @param key 字段名
             * @return byte[] 類型的值
             */
            public byte[] getBytes(String key) {
              Object obj = this.get(key);
              return (byte[]) obj;
            }

            /**
             * 得到 Blob 類型的值
             * @param key 字段名
             * @return Blob 類型的值
             */
            public java.sql.Blob getBlob(String key) {
              Object obj = this.get(key);
              return (java.sql.Blob) obj;
            }

            /**
             * 得到 Clob 類型的值
             * @param key 字段名
             * @return Clob 類型的值
             */
            public java.sql.Clob getClob(String key) {
              Object obj = this.get(key);
              return (java.sql.Clob) obj;
            }

            /**
             * 得到 Array 類型的值
             * @param key 字段名
             * @return Array 類型的值
             */
            public java.sql.Array getArray(String key) {
              Object obj = this.get(key);
              return (java.sql.Array) obj;
            }

            /**
             * 得到 InputStream 類型的值
             * @param key 字段名
             * @return InputStream 類型的值
             */
            public java.io.InputStream getBinaryStream(String key) {
              Object obj = this.get(key);
              return (java.io.InputStream) obj;
            }

            /**
             * 得到 Object 類型的值
             * @param key 字段名
             * @return Object 類型的值
             */
            public Object getObject(String key) {
              return this.get(key);
            }

          }



          posted on 2008-04-08 14:33 Ke 閱讀(1166) 評論(0)  編輯  收藏 所屬分類: jdbc

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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 庆安县| 卓尼县| 盘锦市| 遂昌县| 石林| 丁青县| 双城市| 左贡县| 上饶市| 措美县| 木里| 尚义县| 凤阳县| 汉川市| 溆浦县| 天等县| 名山县| 卢氏县| 灵宝市| 芦溪县| 桦川县| 如东县| 马边| 禄丰县| 登封市| 德惠市| 和田县| 防城港市| 沭阳县| 萨嘎县| 西华县| 鄂托克前旗| 德安县| 万盛区| 威宁| 通化县| 许昌市| 安宁市| 巴林左旗| 叙永县| 耒阳市|