posts - 25, comments - 69, trackbacks - 0, articles - 2

          導航

          <2006年4月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          常用鏈接

          留言簿(2)

          隨筆分類(12)

          隨筆檔案(25)

          文章分類(2)

          文章檔案(2)

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          說明:根據提供的sql/標題/參數列表進行查詢,返回的二維String數組可以直接用來顯示,將會陸續增加排序/格式化等功能,核心的execQuery方法如下:

          public String[][] execSQL(String sql,String[] titles,Object[] params) throws Exception {

          //todo:驗證數據庫連接是否可用
          ??if(con==null||con.isClosed())throw new Exception("數據庫連接不可用");

          //todo:簡單的驗證輸入參數
          ??if(sql==null)
          ???throw new Exception("SQL語句不能為空");
          ??sql=sql.trim();
          ??if(sql.equals(""))
          ???throw new Exception("SQL語句不能為空");
          ??
          //對輸入參數做簡單的日志記錄??
          logger.info(sql);??
          ??logger.info(Dao.msgOfArray(titles));
          ??logger.info(Dao.msgOfArray(params));
          ???
          //準備sql??
          PreparedStatement pst = con.prepareStatement(sql);

          //如果參數不空,則準備參數??
          if(params!=null)
          ??{
          ???for(int i=0;i<params.length;i++)
          ???{
          ????if(params[i]==null)
          ????{
          ?????break;
          ????}
          ????pst.setObject(i+1,params[i]);? //此處依賴JDBC Driver實現,不同的驅動可能實現的程度不一樣
          ???}
          ??}

          //查詢
          ??ResultSet rs = pst.executeQuery();
          ??
          //metaData
          ResultSetMetaData md = rs.getMetaData();
          ??int colCount = md.getColumnCount();
          ??ArrayList al = new ArrayList(maxCount); //maxCount為Dao的一個屬性,定義每次查詢返回的最大記錄數

          //如果參數沒有輸入表格頭信息,則從metadata取得列名字作為默認值??
          if (titles == null) {
          ???titles = new String[colCount];
          ???for (int i = 0; i < colCount; i++) {
          ????String columnName = md.getColumnName(i + 1);
          ????if (columnName == null) {
          ?????columnName = "無列名";
          ????};
          ????titles[i] = columnName;
          ???}
          ??}

          ??int count = 0;
          ??al.add(count++, titles); // 標題

          //遍歷結果集合?
          ?while (rs.next()) {
          ???String[] buffer = new String[colCount];
          ???for (int i = 0; i < colCount; i++) {
          ????int type = md.getColumnType(i + 1);
          ????int scale = md.getScale(i + 1);
          ????String value=null;

          //todo:根據對于頁面顯示的要求,對不同的數據類型用不同的方式格式化
          ????switch (type)
          ????{
          ????case Types.LONGVARCHAR: // -1 dataType="Long";
          ?????value=rs.getString(i+1);
          ?????break;
          ????case Types.CHAR: // 1 dataType="Character";
          ?????value=rs.getString(i+1);
          ?????break;
          ????case Types.NUMERIC: // 2
          ?????switch (scale) {
          ?????case 0: // dataType="Number";
          ??????value=rs.getString(i+1);
          ??????break;
          ?????case -127: // dataType="Float";
          ??????value=rs.getString(i+1);
          ??????break;
          ?????default:
          ??????value=rs.getString(i+1);
          ???????? break;
          ?????}
          ?????break;

          ????case Types.VARCHAR: // 12
          ?????// dataType="String";
          ?????value=rs.getString(i+1);
          ?????break;
          ????case Types.DATE: // 91
          ?????// dataType="Date";
          ?????value=rs.getString(i+1);
          ?????break;
          ????case Types.TIMESTAMP: // 93
          ?????// dataType="Date";
          ?????value=rs.getString(i+1);
          ?????break;
          ????case Types.BLOB:
          ?????// dataType="Blob";
          ?????value="不支持的數據類型";
          ?????break;
          ????default:
          ?????value=rs.getString(i+1);
          ????}
          ????
          ????buffer[i]=value;
          ???}
          ???al.add(count++, buffer);
          ???if (count >= maxCount) {
          ????break;
          ???}
          ??}

          //convert to String[][] and return??
          String[][] returnValue = new String[count][];
          ??for (int i = 0; i < count; i++) {
          ???returnValue[i] = (String[]) al.get(i);
          ??}
          ??return returnValue;
          ?}
          //end here


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


          網站導航:
           
          主站蜘蛛池模板: 沂南县| 伊金霍洛旗| 余姚市| 大同市| 仲巴县| 宕昌县| 陆良县| 永顺县| 南阳市| 玛沁县| 广灵县| 鲁山县| 溆浦县| 莎车县| 木里| 科技| 阿拉善左旗| 即墨市| 常宁市| 东台市| 洞头县| 肥西县| 原平市| 惠水县| 柞水县| 崇仁县| 鸡东县| 屏山县| 高安市| 玉田县| 西平县| 博客| 通河县| 河间市| 德格县| 桃园县| 平泉县| 长春市| 平阳县| 新兴县| 德保县|