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

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

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

    隨筆 - 6  文章 - 129  trackbacks - 0
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(14)

    隨筆檔案(6)

    文章分類(467)

    文章檔案(423)

    相冊

    收藏夾(18)

    JAVA

    搜索

    •  

    積分與排名

    • 積分 - 825681
    • 排名 - 49

    最新評論

    閱讀排行榜

    評論排行榜

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

    執行,把java.sql.ResultSet對象中的一列封裝成Record,加到ArrayList類型的ResultSet對象中
     /**
         * 執行 SQL 語句 (帶分頁功能)
         * @param con 數據庫鏈接 Connection
         * @param strSQL SQL語句
         * @param nCommonPageSize 每頁最大記錄數
         * @param nCurrentPage 當前頁號
         * @param nTotalRecordCount 總記錄數, 如果等于 -1 或小于 0, 則由本函數相關方法得到此值
         * @param obj 字段對象
         * @return 如果執行的是查詢操作(select ...), 成功返回封裝成 RecordSet 的記錄集, 異常或失敗返回 null
         *  如果執行的是寫操作, 成功返回空的 RecordSet(含操作的記錄個數), 異常或失敗返回 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("頁記錄數小于 0: (" + nCommonPageSize + " 條記錄/頁)");
            if(nCurrentPage<=0)
              throw new Exception("頁數小于 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();
              //移到結果集最后一條, 取得記錄總數
              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){}
          }
        }

    靜態方法直接調用,返回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 {

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

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

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

      /**
       * 得到第n條記錄
       * @param i 記錄位置 ( 取值范圍: 1--返回的記錄數 )
       * @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--返回的記錄數+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;
          }
        }
      }

      /**
       * 得到數字(推薦使用這個方法得到數字, 可以避免各種數據庫數據類型不同而產生的問題)
       * @param key 字段名
       * @return 數字
       */
      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 相鄰的頁數
       * @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 閱讀(1163) 評論(0)  編輯  收藏 所屬分類: jdbc

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


    網站導航:
     
    主站蜘蛛池模板: 日韩毛片免费无码无毒视频观看| 国产色爽免费无码视频| 中文字幕免费观看视频| 亚洲人成色77777在线观看大| 亚洲精品乱码久久久久66| 日本一区二区在线免费观看 | 国产亚洲玖玖玖在线观看| 最近免费中文字幕mv在线电影| 久草视频免费在线| 亚洲卡一卡2卡三卡4麻豆| 4399好看日本在线电影免费| 亚洲人成在线精品| 欧洲精品成人免费视频在线观看| 亚洲午夜精品一级在线播放放 | 亚洲私人无码综合久久网| 青青视频观看免费99| 亚洲综合偷自成人网第页色| 成在人线AV无码免费| 美女视频黄.免费网址| 亚洲人成人77777网站| 99久久精品国产免费| 亚洲kkk4444在线观看| 亚洲AV无码乱码精品国产| 美女巨胸喷奶水视频www免费| 性一交一乱一视频免费看| 亚洲一卡2卡三卡4卡无卡下载| a级毛片毛片免费观看久潮喷| 成人毛片18女人毛片免费视频未| 亚洲精品国产精品乱码不99| 真实国产乱子伦精品免费| 亚洲码欧美码一区二区三区| 4338×亚洲全国最大色成网站| 亚洲人精品亚洲人成在线| 免费观看四虎精品国产永久| 伊人久久大香线蕉免费视频| 亚洲视频.com| 日本19禁啪啪无遮挡免费动图| 亚洲熟妇AV一区二区三区浪潮| 最近中文字幕无免费| 97碰公开在线观看免费视频| 亚洲一区二区三区高清不卡|