posts - 495,  comments - 11,  trackbacks - 0
           

          JSP分頁共設計了三個類:SplitPageVo 、PageVo、SqlVo

          以上三個類請參考本博客的

          JSP分頁類一:SplitPageVo?????? JSP分頁類二:SqlVo????????? JSP分頁類三:PageVo

          三篇文章

          核心為一條SQL語句:

          SELECT * FROM??????????????

          ???????????? (SELECT TOP 每頁顯示條數 * FROM

          ???????????????????? (SELECT TOP 每頁顯示數量x當前頁 * FROM 表名)????表變量1

          ???????????????????????????? ORDER BY 排序字段 DESC)?? 表變量2

          ???????????????????????????????????????? ORDER BY?? 排序字段

          如:

          SELECT * FROM

          ????????????? (SELECT TOP 10 * FROM

          ?????????????????????????? (SELECT TOP 3x10 * FROM shop) x

          ???????????????????????????????????? ORDER BY id DESC) y

          ????????????????????????????????????????????? ???? ORDER BY id

          使用簡要說明:

          //********************************************使~~~~用~~~~說~~~~明*****************************************
          /**
          ...............................................................
          在SERVELET里:
          第一步:獲取當前頁碼
          if(request.getParameter("page")!=null){
          ??? page=Integer.parseInt(request.getParameter("page"));
          ??? }else{
          ??? page=1 ;
          ?? }
          第二步:創建跳轉對象
          ??? SplitPageVo vo=new SplitPageVo()
          第三步:設置SQL語句SqlVo,URL,當前頁面page
          ??? vo.setPageVo(page,10);
          ??? vo.setSqlVo("shop", "1=1", "id", "asc")
          ??? vo.setUrl("/servlet/Shop.do?action=0")
          第四步:傳入BIZ
          ??? TransOrderBiz biz=new TransOrderBiz()
          ??? vo=biz.getAllOrders(vo)
          第五步:頁面轉向
          request.setAttribute("OrderList",vo);
          url="/tpl/tplproject/OrderList.jsp";
          request.getRequestDispatcher(url).forward(request,response);
          ..................................................................
          在BIZ里:
          public class TransOrderBiz {
          public SplitPageVo getAllOrders(SplitPageVo vo){
          DBConnection dbc = new DBConnection();
          if(dbc.getConnect()){
          ?? Connection conn = dbc.getConn();
          ?? try{
          ?? BU_TRANS_ORDERDAO dao=new BU_TRANS_ORDERDAO();
          ?? vo=dao.findByAll(conn);
          ?? }catch(Exception e){
          ??? e.printStackTrace();
          ?? }finally{
          ??? try{
          ???? conn.close();
          ??? }catch(Exception ex){
          ???? ex.printStackTrace();
          ??? }
          ?? }
          }else{
          ?? System.out.println("數據庫連接失敗!");
          }
          return vo;
          }
          }

          ..................................................................
          在DAO里:
          public SplitPageVo findByAll(Connection conn ,SplitPageVo vo){
          ??? Vector v=new Vector();
          ??? StringBuffer sqlStr = null;
          ??? PreparedStatement ps=null;
          ??? Connection _conn=null;
          ??? ResultSet rs=null;
          ??? try{
          ???? _conn=conn;
          ???? $$$$$$$$$$$$$$$$$$$$$$$$$~~核~~心~~部~~分~~$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
          ????? vo.getCount(_conn)//獲取條數
          ???? vo.setPageVo(vo.getPageVo().getNowPage(),vo.getPageVo().getCount(),vo.getPageVo().getPreList())//設置PageVo
          ???? int top1 = vo.getTop1();
          ???? int top2 = vo.getTop2();
          ???? String strSql=vo.getSqlVo().toAllSql(top1,top2)//取出SQL語句
          ???? $$$$$$$$$$$$$$$$$$$$$$$$$$~~核~~心~~部~~分~~$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
          ???? ps=_conn.prepareStatement(strSql);
          ???? rs=ps.executeQuery();
          ???? while(rs.next()){
          ????? BU_TRANS_ORDERVO vo=new BU_TRANS_ORDERVO();
          ????? vo.setTO_ID(rs.getLong("TO_ID"));
          ?????????????????? 。。。。。。。。。。。。。。。。。
          ?????????????????? 。。。。。。。。。。。。。。。。。
          ?????????????????? 。。。。。。。。。。。。。。。。。
          ????? vo.setTO_PRICE(rs.getDouble("TO_PRICE"));
          ????? v.addElement(vo);
          ???? }
          ???? vo.setData(v)//放入數據
          ??? }
          ??? catch(Exception e){
          ???? e.printStackTrace();
          ??? }
          ??? finally{
          ???? try{
          ????? if (ps!=null){
          ?????? ps.close();
          ?????? ps=null;
          ????? }
          ?????
          ???? }catch(Exception e){
          ????? e.printStackTrace();
          ???? }
          ??? }
          ??? return vo;//返回
          ?? }

          ?? ................................................................................
          ?? 在JSP里:
          ?? SplitPageVo splitPageVo;
          ?? splitPageVo=(SplitPageVo)request.getAttribute("OrderList");
          ?? List l=splitPageVo.getData();
          ?? if(l!=null && l.size()>0 ){
          ?? for(int i=0;i<l.size() && i<l.size() ;i++){
          ?? ComplOrderVo vo=(ComplOrderVo)l.get(i);
          ??????????? 。。。。。。。。。。。。。。。。。。。
          ??????????? 。。。。。。。。。。。。。。。。。。。
          ??????????? 。。。。。。。。。。。。。。。。。。。
          ?? }
          ??????????? 。。。。。。。。。。。。。。。。。。。
          ??????????? 。。。。。。。。。。。。。。。。。。。
          ??????????? 。。。。。。。。。。。。。。。。。。。
          ??? <td >
          <%=splitPageVo.splitPage(splitPageVo)%> //分頁部分
          </td>
          ???????? 。。。。。。。。。。。。。。。。。。。
          ??????????? 。。。。。。。。。。。。。。。。。。。
          ??????????? 。。。。。。。。。。。。。。。。。。。
          ?? ................................................................................
          */

          posted @ 2008-06-18 15:48 jadmin 閱讀(61) | 評論 (0)編輯 收藏
          很多時候我們需要提供這樣的功能給訪問者:當訪問者點擊頁面中的縮略圖時,其對應的全尺寸圖片將顯示在一個新的彈出窗口中供訪問者查看。

          實現此功能的最簡單作法是用以下HTML代碼創建一個圖像鏈接:
          <a href="fullsize.jpg" target="_blank"><img src="small.jpg"></a>
          其中<a>標記的href屬性指定全尺寸圖片的URL,target屬性設置為_blank指定在新窗口中顯示該圖片;<img>標記的src屬性指定縮略圖的URL。

          如果我們想對顯示全尺寸圖片的窗口的外觀進行某些控制(比如希望彈出窗口的高度、寬度能與全尺寸圖片的大小匹配時),則可調用 window.open 方法,該方法接收三個參數,分別指定要打開文件的URL,窗口名及窗口特性,在窗口特性參數中可指定窗口的高度、寬度,是否顯示菜單欄、工具欄等。以下代碼將顯示全尺寸圖片在一個沒有工具欄、地址欄、狀態欄、菜單欄,寬、高分別為400、350的窗口中:
          <a href="fullsize.jpg"
          onClick="window.open(this.href,'', 'height=350,width=400,toolbar=no,location=no,
          status=no,menubar=no');return false"><img src="small.jpg"></a>

          這里就提出了個問題,如果所有全尺寸圖片都具有統一的大小(比如都是400x350),那么以上代碼適用于所有的縮略圖片鏈接(只是href屬性指向的全尺寸圖片文件不同)。但如果全尺寸圖片的大小并不統一,還用以上代碼則我們需要先取得每幅全尺寸圖片的大小,然后在window.open方法的窗口特性參數中一一設置height和width為正確的值,在圖片數量較多的情況下,這顯然效率太低了。那么是否有一勞永逸的方法,即讓彈出窗口能自動適應要顯示圖片的大小?通過研究,發現可以使用 DHTML 中的 Image 對象來達到我們的目的,Image 對象可動態裝載指定的圖片,通過讀取其 width 和 height 屬性即能獲得裝入圖片的大小,以此來設置彈出窗口的大小,即可實現自適應圖片大小的彈出窗口了。下面即是實現代碼:

          <script language="JavaScript" type="text/JavaScript">
          <!--
          var imgObj;
          function checkImg(theURL,winName){
          ??
          // 對象是否已創建
          ??if (typeof(imgObj) == "object"){
          ????
          // 是否已取得了圖像的高度和寬度
          ????if ((imgObj.width != 0) && (imgObj.height != 0))
          ??????
          // 根據取得的圖像高度和寬度設置彈出窗口的高度與寬度,并打開該窗口
          ??????// 其中的增量 20 和 30 是設置的窗口邊框與圖片間的間隔量
          ?????? OpenFullSizeWindow(theURL,winName, ",width=" + (imgObj.width+20) + ",height=" + (imgObj.height+30));
          ????
          else
          ??????
          // 因為通過 Image 對象動態裝載圖片,不可能立即得到圖片的寬度和高度,所以每隔100毫秒重復調用檢查
          ?????? setTimeout("checkImg('" + theURL + "','" + winName + "')", 100)
          ?? }
          }

          function OpenFullSizeWindow(theURL,winName,features) {
          ??
          var aNewWin, sBaseCmd;
          ??
          // 彈出窗口外觀參數
          ?? sBaseCmd = "toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no,";
          ??
          // 調用是否來自 checkImg
          ??if (features == null || features == ""){
          ????
          // 創建圖像對象
          ???? imgObj = new Image();
          ????
          // 設置圖像源
          ???? imgObj.src = theURL;
          ????
          // 開始獲取圖像大小
          ???? checkImg(theURL, winName)
          ?? }
          ??
          else{
          ????
          // 打開窗口
          ???? aNewWin = window.open(theURL,winName, sBaseCmd + features);
          ????
          // 聚焦窗口
          ???? aNewWin.focus();
          ?? }
          }
          //-->
          </script>


          使用時將上面的代碼放在網頁文檔的<head></head>標記對中,然后在鏈接的點擊事件中調用 OpenFullSizeWindow函數,如<a href="fullsize.jpg" onClick= "OpenFullSizeWindow(this.href,'','');return false"><img src="small.jpg"> </a>即可。
          以上代碼在IE 5.x-6.0中測試通過。
          posted @ 2008-06-07 02:12 jadmin 閱讀(90) | 評論 (0)編輯 收藏

          把文字替換成圖片
          首先把圖片復制到 剪貼板中,然后打開替換對話框,在“查找內容”框中輸入將被替換的文字,接著在 “替換為”框中輸入“^c”(注意:輸入的一定要是半角字符,c要小寫),單擊替換 即可。說明:“^c”的意思就是指令Word XP以剪貼板中的內容替換“查找內容”框中的內 容。按此原理,“^c”還可替換包括回車符在內的任何可以復制到剪貼板的可視內容,甚至Excel表格。

          三招去掉頁眉那條橫線
          1、在頁眉中,在“格式”-“邊框和底紋”中設置表格和邊框為“無”,應用于“段落”
          2、同上,只是把邊框的顏色設置為白色(其實并沒有刪的,只是看起來沒有了,呵呵)
          3、在“樣式”欄里把“頁眉”換成“正文”就行了——強烈推薦!
          會多出--(兩個橫杠) 這是用戶不愿看到的,又要多出一步作刪除--
          解決方法:替換時在前引號前加上一個空格 問題就解決了

          插入日期和時間的快捷鍵
          Alt+Shift+D:當前日期
          Alt+Shift+T:當前時間

          批量轉換全角字符為半角字符
          首先全選。然后“格式”→“更改大小寫”,在對話框中先選中“半角”,確定即可


          Word啟動參數簡介
          單擊“開始→運行”命令,然后輸入Word所在路徑及參數確定即可運行,如“C:\ PROGRAM FILES \MICROSOFT Office \Office 10\ WINWord.EXE /n”,這些常用的參數及功能如下:
          /n:啟動Word后不創建新的文件。
          /a:禁止插件和通用模板自動啟動。
          /m:禁止自動執行的宏。
          /w:啟動一個新Word進程,獨立與正在運行的Word進程。
          /c:啟動Word,然后調用Netmeeting。
          /q:不顯示啟動畫面。
          另外對于常需用到的參數,我們可以在Word的快捷圖標上單擊鼠標右鍵,然后在“目標”項的路徑后加上該參數即可。

          快速打開最后編輯的文檔
          如果你希望Word在啟動時能自動打開你上次編輯的文檔,可以用簡單的宏命令來完成:
          (1)選擇“工具”菜單中的“宏”菜單項,單擊“錄制新宏”命令打開“錄制宏”對話框;
          (2)在“錄制宏”對話框中,在“宏名”輸入框中輸入“autoexec”,點擊“確定”;
          (3)從菜單中選擇“文件”,點擊最近打開文件列表中顯示的第一個文件名;并“停止錄制”。保存退出。下次再啟動Word時,它會自動加載你工作的最后一個文檔。

          格式刷的使用
          1、設定好文本1的格式。
          2、將光標放在文本1處。
          3、單擊格式刷按鈕。
          4、選定其它文字(文本2),則文本2的格式與文本1 一樣。
          若在第3步中單擊改為雙擊,則格式刷可無限次使用,直到再次單擊格式刷(或按Esc鍵)為止。

          刪除網上下載資料的換行符(象這種“↓”)
          在查找框內輸入半角^l(是英文狀態下的小寫L不是數字1),在替換框內不輸任何內容,單擊全部替換,就把大量換行符刪掉啦。

          選擇性刪除文件菜單下的最近使用的文件快捷方式。
          工具→選項→常規把“列出最近使用文件數改為0”可以全部刪除,若要選擇性刪除,可以按ctrl+Alt+ -三個鍵,光標變為一個粗減號后,單擊文件,再單擊要刪除的快捷方式就行了。

          建立一個矩形選區:
          一般的選區建立可用鼠標左鍵,或用shift鍵配合pgup、pgdn、home、end、箭頭等功能鍵,當復制一個規則的矩形區域時,可先按住Alt鍵,然后用鼠標左鍵來選。我一般用此來刪除段首多余的成塊的空格。大家試一試*^_^*

          將字體快速改為上標或下標的方法:
          本人在一次無意間發現了這個方法,選定你要下標的字,然后在英文狀態下按住Ctrl,再按一下BASKSPACE旁的+/=的鍵,就可以了。上標只要在按Ctrl的同時也按住Shift,大家可以試試。

          讓Word表格快速一分為二
          將光標定位在分開的表格某個位置上,按下“Ctrl+Shift+Enter”組合鍵。這時你就會發現表格中間自動插入一個空行,這樣就達到了將一個表格一分為二的目的。

          用Word來拆字
          首先點擊“工具/自定義/命令/分解圖片”,按住鼠標左鍵把它拖放到工具欄任意位置即可;然后點擊“插入/圖片/藝術字”,例如輸入空心字“心”,選擇該“心”字剪切,在選擇性粘貼中選圖片(Windows圖元文件),選中該字,點擊工具欄中的“分解圖片”按鈕,這樣可以選擇“心”中的任意筆畫進行一筆一畫的拆分了。

          快速刪除段前段后的任意多個空格
          選定這些段段落,單擊居中按鈕,然后再單擊原來的那種對齊方式按鈕(如果原來是居中對齊的,先單擊其它對齊方式按鈕,再單擊居中按鈕就行了),是不是這些空格全不見了?


          只要打開WORD新建一個空文檔的時候,出現的不是空的文檔,而是我以前打的一份文檔
          首先:將資源管理器設置為顯示所有文件和文件夾;
          然后:
          C:\Documents and Settings\Administrator\Application Data\Microsoft\Templates文件夾下將所有Normal.doc文件刪掉;
          然后:OK(XP系統)

          快速輸入平方的方法
          先輸入2,然后選重后,按ctrl加shift加+就可以了.

          WORD中表格的選擇性錄入
          1.設置好表格,選定表格-視圖-工具-窗體-插入下拉型窗體域
          2.輸入數據,完成
          3.點擊鎖按鈕,保護,輸入完后再點擊進行其它的輸入.

          標點符號的全角/半的轉換用:Ctrl+.
          數字字母的全角/半的轉換用:Shift+空格

          輕松了解工具欄按鈕的作用
          按下“shift+F1”鍵,鼠標指針旁多了一個“?”號,想知道哪個按鈕
          的作用,就用鼠標單擊哪個。

          要經常在文檔中插入自己公司的信息
          公司名稱
          公司住址
          聯系電話
          聯系人姓名
          QQ號碼
          可以先選定這些內容,再單擊工具→自動更正→在替換框中輸入標記名稱(如“公司信息”)→添加→確定,以后凡是在文檔中要用到這個信息的地方鍵入“公司信息”(不要引號)這幾個字后就自動替換成:
          公司名稱
          公司住址
          聯系電話
          聯系人姓名
          QQ號碼
          說明:有些輸入法不支持這個功能,鍵入標記名稱后要按一下空格才行。

          快速換頁的方法
          雙擊某頁的右下腳,光標即可定位在那里,然后按回車直到換頁。ctrl+回車點插入按紐,分隔符,選中分頁符,然后確認就OK了 !!!

          表格的簡單調整寬度
          鼠標放在表格的右邊框上帶鼠標變成可以調整大小的時候
          雙擊
          根據表格內的內容調節表格大小

          代替金山詞霸
          點工具——語言——翻譯,在右邊出現的搜索框中輸入要查的單詞,回車就可以翻譯了。可以選擇英語翻成中文或中文翻成英語。
          第一次使用可能要安裝。

          [Alt]鍵實現標尺的精確定位
          如果你經常使用水平標尺來精確定位標簽、頁邊框、首字縮進及頁面對象的位置,那么你點擊標尺設置頁邊框或標簽時,您只可以將其設置為1字符或2字符,但不能設為1.5字符!要想設置更為精確的度量單位(例如百分之幾字符),在按住[Alt]鍵的同時,點擊并移動標尺或邊框,此時標尺將用數字精確顯示出當前的位置為百分之幾字符位置。

          用“記事本”去除格式
          網頁上COPY下來的東西往往都是有網格的,如果直接粘貼在WORD中會雜亂無章。先粘貼到記事本當中,再粘貼到WORD中,就可以去除網格等格式,再全選選擇清除格式,居中再取消居中即可取消所有格式。可以直接在WORD中進行:(菜單)編輯/選擇性粘貼……/無格式文本/確定。這樣省事多了。

          快速將文檔轉換成圖片
          先把欲想轉換的文檔保存退出.如:保存在桌面
          然后新建一個文件.把想轉換的文檔(鼠標左建按住該文檔不放)直接施放在頁面上

          恢復office的默認設置
          比如不小心把word設置亂了(如刪了菜單欄等等).
          查找normal.dot直接刪除.
          下一次啟動word會恢復默認值.

          讓Word只粘貼網頁中的文字而自動去除圖形和版式
          方法一、選中需要的網頁內容并按“Ctrl+C”鍵復制,打開Word,選擇菜單“編輯”→“選擇性粘貼”,在出現的對話框中選擇“無格式文本”。
          方法二、選中需要的網頁內容并按“Ctrl+C” 鍵復制,打開記事本等純文本編輯工具,按“Ctrl+V”鍵將內容粘貼到這些文本編輯器中,然后再復制并粘貼到Word中。

          ctrl+alt+f可以輸入腳注
          這個對于經常寫論文的朋友應該有點幫助。

          將阿拉伯數字轉換成中文數字或序號
          1、先輸入阿拉伯數字(如1234),全選中,單擊“插入/數字/數字類型(壹、貳……)/確定”,即變為大寫數字(如壹仟貳佰叁拾肆),會計朋友非常適用。
          2、其他像一千二百三十四,甲、乙……,子、丑……,羅馬數字等的轉換,可參考上法。

          Word中的常用快捷鍵吧
          “字體”對話框???? Ctrl+D
          選擇框式工具欄中的“字體”框???? Ctrl+Shift+F
          加粗 Ctrl+B
          傾斜 Ctrl+I
          下劃線Ctrl+U
          “上標”效果???? Ctrl+Shift+=
          “下標”效果???? Ctrl+=
          “關閉”命令???? Ctrl+W
          Word快捷鍵一覽表
          序號?????? 快捷鍵CTRL+?????? 代表意義
          1…………Z…………撤消
          2…………A…………全選
          3…………X…………剪切
          4…………C…………復制
          5…………V…………粘貼
          6…………S…………保存
          7…………B…………加粗
          8………… Q…………左對齊
          9…………E…………據中
          10…………R…………右對齊
          11…………]…………放大
          22…………[…………縮小
          12…………N…………新建文檔
          13…………I…………字體傾斜
          14…………W…………退出
          15…………P…………打印
          16…………U…………下劃線
          17…………O…………打開
          18…………k…………插入超級連接
          19…………F…………查找
          20…………H…………替換
          21…………G…………定位
          23…Ctrl+Alt+L……帶括號的編號
          24…Ctrl+Alt+.________…
          25…Alt+數字………區位碼輸入
          26…Ctrl+Alt+Del………關機
          27…Ctrl+Alt+Shift+?……?
          28…Ctrl+Alt+Shift+!……?
          29…Alt+Ctrl+E……………?
          30…Alt+Ctrl+R……………?
          31…Alt+Ctrl+T……………?
          32…Alt+Ctrl+Ctrl…………?
          33……Ctrl+D……………格式字體
          34……Ctrl+Shift+= ………上標
          35……Ctrl+=………………下標
          36……Ctrl+Shift+>……放大字體
          37……Ctrl+Shift+< ……縮小字體
          38……Alt+Ctrl+I………打印預覽
          39……Alt+Ctrl+O………大剛示圖
          40……Alt+Ctrl+P………普通示圖
          41……Alt+Ctrl+M………插入批注
          42……Alt+菜單上字母………打開該菜單

          無級微調
          打開“繪圖”工具欄-點開下拉菜單-繪圖網格...-將水平間距和垂直間距調到最小0.01-確定,這樣你就可以無級微調

          把work設置成在線打開,但不能修改‘只讀’怎搞啊?
          文件夾共享為只讀

          在WORD中輸入三個等號然后回車。。。出來的是雙橫線哦。。。
          同樣的方法也可以做出波浪線單橫線哦!~~~~~ ,
          ###為中間粗上下細的三線, ***為點線, ~~~為波浪線, ---為單線

          輸入拼音字母的音調怎么輸入
          用智能ABC,鍵入v9,然后自己挑選吧!

          頁碼設置
          1、打開頁眉/頁腳視圖,點擊插入頁碼按鈕,將頁碼插入(此時所有的頁碼是連續編號的) 2、切換到頁面視圖,在需要從1計數的頁面上插入連續分節符(插入--分隔符--分節符--連續) 3、再次換到頁眉/頁腳視圖,點擊設置頁碼格式按鈕,將頁碼編排-起始頁碼設置為1

          把Excel中的表格以圖片形式復制到Word中
          除了用抓圖軟件和全屏拷貝法外還有更簡單的呢
          先選定區域,按住Shift健點擊"編輯"會出現"復制圖片""粘貼圖片",復制了后,在Word中選"粘貼圖片"就可像處理圖片一樣處理Excel表格了!

          Ctrl+鼠標滑輪(左右鍵中間的那個輪子)可以迅速調節顯示比例的大小(100%)。向上滑擴大,向下滑縮小。


          快速調整頁眉橫線長度
          在word插入頁眉后,會自動在此位置添加一條長橫線。如果需要調整此線的長度及其水平位置,可以首先激活頁眉,選擇格式下的段落命令,調整一下左右縮進的字符值,確定可以看到最終效果了!

          快速瀏覽圖片
          在WORD2003中,如果插入的圖片過多,會影響打開和翻滾的速度。其實,我們可以通過改變圖片的顯示方式改變瀏覽速度。
          工具--選項--視圖--圖片框
          這樣,先顯示的是圖片框,需要看的時候,停留,即可顯示!

          WORD 中如何輸入分數
          1、打開word,點擊工具菜單欄的“插入”,在下拉菜單中點“域”。
          2、在打開的復選框中的類別欄中“選等式公式”,域名中“EQ”。然后點擊“選項”,在出現的菜單選項中選“F(,)”,接著點擊“添加到域”并“確定”。
          3、然后在輸入F(,)數字,如要輸入23 只需在F(,)輸入F(2,3)就能得到2/3

          怎樣使WORD 文檔只有第一頁沒有頁眉,頁腳
          答:頁面設置-頁眉和頁腳,選首頁不同,然后選中首頁頁眉中的小箭頭,格式-邊框和底紋,選擇無,這個只要在“視圖”——“頁眉頁腳”,其中的頁面設置里,不要整個文檔,就可以看到一個“同前”的標志,不選,前后的設置情況就不同了

          Word中雙擊鼠標的妙用
          在Word的程序窗口中不同位置上雙擊,可以快速實現一些常用功能,我們歸納如下:
          在標題欄或垂直滾動條下端空白區域雙擊,則窗口在最大化和原來狀態之間切換;
          將鼠標在標題欄最左邊WORD文檔標記符號處雙擊,則直接退出WORD(如果沒有保存,會彈出提示保存對話框);
          將鼠標移到垂直滾動條的上端成雙向拖拉箭頭時雙擊,則快速將文檔窗口一分為二;
          將鼠標移到兩個窗口的分界線處成雙向拖拉箭頭時雙擊,則取消對窗口的拆分;
          在狀態欄上的“修訂”上雙擊,則啟動“修訂”功能,并打開“審閱”工具欄。再次雙擊,則關閉該功能,但“審閱”工具欄不會被關閉;
          在狀態欄上的“改寫”上雙擊,則轉換為“改寫”形式(再次“雙擊”,轉換為“插入”形式);
          如果文檔添加了頁眉(頁腳),將鼠標移到頁眉(頁腳)處雙擊,則激活頁眉(頁腳)進入編輯狀態,對其進行編輯;在空白文檔處雙擊,則啟動“即點即輸”功能;
          在標尺前端空白處雙擊,則啟動“頁面設置”對話框。


          在word編輯中經常要調整字休大小來滿足編輯要求
          選中要修改的文字,按ctrl+]或ctrl+[來改變字體的大小!
          這個方法可以微量改字體大小~



          文本框的線條
          1. 制作好文檔后,通過“視圖→頁眉頁腳”命令,調出“頁眉頁腳”工具欄,單擊其中的“顯示→隱藏文檔正文文字”按鈕,隱藏正文部分的文字內容。
          2. 選擇“插入”菜單中的“文本框”命令,在頁眉的下方插入一個空文本框。
          3. 在文本框內加入作為水印的文字、圖形等內容,右擊圖片,選擇快捷菜單中的“設置圖片格式”命令,在對話框中“圖片”選項卡下,通過“圖像控制”改變圖像的顏色,對比度和亮度,并手動調整圖片的大小。   
          4. 通過“設置文本框格式”命令,把文本框的線條色改為無線條色。
          5. 單擊“頁眉頁腳”工具欄的“關閉”按鈕,退出“頁眉頁腳”編輯。

          每頁添加水印的操作
          1. 制作好文檔后,通過“視圖→頁眉頁腳”命令,調出“頁眉頁腳”工具欄,單擊其中的“顯示→隱藏文檔正文文字”按鈕,隱藏正文部分的文字內容。
          2. 選擇“插入”菜單中的“文本框”命令,在頁眉的下方插入一個空文本框。
          3. 在文本框內加入作為水印的文字、圖形等內容,右擊圖片,選擇快捷菜單中的“設置圖片格式”命令,在對話框中“圖片”選項卡下,通過“圖像控制”改變圖像的顏色,對比度和亮度,并手動調整圖片的大小。   
          4. 通過“設置文本框格式”命令,把文本框的線條色改為無線條色。
          5. 單擊“頁眉頁腳”工具欄的“關閉”按鈕,退出“頁眉頁腳”編輯。
          6. 完成上述步驟的操作,水印制作得以完成,這樣就為每一頁都添加了相同的水印。

          讓Word頁面快速一分為二
          將光標定位在想分開的位置上,按下“Ctrl+Shift+Enter”組合鍵。


          使Word中的字體變清晰
          Word文檔中使用 “仿宋” 字體很淡,可按以下方法使字體更清晰:
          右擊桌面,點 “屬性”,點 “外觀”,點 “效果”,選中“使用下列方式使屏幕字體的邊緣平滑”選“清晰”,確定。

          Word雙面打印技巧
             我們平時用電腦的時候可能都少不了打印材料,Word是我們平常用的最多的Office軟件之一。有時我們要用Word打印許多頁的文檔,出于格式要求或為了節省紙張,會進行雙面打印

            我們一般常用的操作方法是:選擇“打印”對話框底部的“打印”下拉列表框中的“打印奇數頁”或“打印偶數頁”,來實現雙面打印。我們設定為先打印奇數頁。等奇數頁打印結束后,將原先已打印好的紙反過來重新放到打印機上,選擇該設置的“打印偶數頁”,單擊“確定”按鈕。這樣通過兩次打印命令就可以實現雙面打印。

            我們也可以利用另一種更靈活的雙面打印方式:打開“打印”對話框,選中“人工雙面打印”,確定后就會出現一個“請將出紙器中已打印好的一面的紙取出并將其放回到送紙器中,然后‘確定’按鍵,繼續打印”的對話框并開始打印奇數頁,打完后將原先已打印好的紙反過來重新放到打印機上,然后按下該對話框的“確定”按鍵,Word就會自動再打印偶數頁,這樣只用一次打印命令就可以了。

            兩種方法對比,后者較前者更為方便。

          posted @ 2008-06-06 12:16 jadmin 閱讀(85) | 評論 (0)編輯 收藏
          添加、刪除、修改使用db.Execute(Sql)命令執行操作
          ╔----------------╗
          ☆ 數據記錄篩選 ☆
          ╚----------------╝
          注意:單雙引號的用法可能有誤(沒有測式)

          Sql = "Select Distinct 字段名 From 數據表"
          Distinct函數,查詢數據庫存表內不重復的記錄

          Sql = "Select Count(*) From 數據表 where 字段名1>#18:0:0# and 字段名1< #19:00# "
          count函數,查詢數庫表內有多少條記錄,“字段名1”是指同一字段
          例:
          set rs=conn.execute("select count(id) as idnum from news")
          response.write rs("idnum")

          sql="select * from 數據表 where 字段名 between 值1 and 值2"
          Sql="select * from 數據表 where 字段名 between #2003-8-10# and #2003-8-12#"
          在日期類數值為2003-8-10 19:55:08 的字段里查找2003-8-10至2003-8-12的所有記錄,而不管是幾點幾分。

          select * from tb_name where datetime between #2003-8-10# and #2003-8-12#
          字段里面的數據格式為:2003-8-10 19:55:08,通過sql查出2003-8-10至2003-8-12的所有紀錄,而不管是幾點幾分。


          Sql="select * from 數據表 where 字段名=字段值 order by 字段名 [desc]"

          Sql="select * from 數據表 where 字段名 like '%字段值%' order by 字段名 [desc]"
          模糊查詢

          Sql="select top 10 * from 數據表 where 字段名 order by 字段名 [desc]"
          查找數據庫中前10記錄

          Sql="select top n * form 數據表 order by newid()"
          隨機取出數據庫中的若干條記錄的方法
          top n,n就是要取出的記錄數

          Sql="select * from 數據表 where 字段名 in ('值1','值2','值3')"

          ╔----------------╗
          ☆ 添加數據記錄 ☆
          ╚----------------╝
          sql="insert into 數據表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)"

          sql="insert into 數據表 valuess (值1,值2,值3 …)"
          不指定具體字段名表示將按照數據表中字段的順序,依次添加

          sql="insert into 目標數據表 select * from 源數據表"
          把源數據表的記錄添加到目標數據表

          ╔----------------╗
          ☆ 更新數據記錄 ☆
          ╚----------------╝
          Sql="update 數據表 set 字段名=字段值 where 條件表達式"

          Sql="update 數據表 set 字段1=值1,字段2=值2 …… 字段n=值n where 條件表達式"

          Sql="update 數據表 set 字段1=值1,字段2=值2 …… 字段n=值n "
          沒有條件則更新整個數據表中的指定字段值

          ╔----------------╗
          ☆ 刪除數據記錄 ☆
          ╚----------------╝
          Sql="delete from 數據表 where 條件表達式"

          Sql="delete from 數據表"
          沒有條件將刪除數據表中所有記錄)

          ╔--------------------╗
          ☆ 數據記錄統計函數 ☆
          ╚--------------------╝
          AVG(字段名) 得出一個表格欄平均值
          COUNT(*|字段名) 對數據行數的統計或對某一欄有值的數據行數統計
          MAX(字段名) 取得一個表格欄最大的值
          MIN(字段名) 取得一個表格欄最小的值
          SUM(字段名) 把數據欄的值相加

          引用以上函數的方法:
          sql="select sum(字段名) as 別名 from 數據表 where 條件表達式"
          set rs=conn.excute(sql)
          用 rs("別名") 獲取統的計值,其它函數運用同上。

          ╔----------------------╗
          ☆ 數據表的建立和刪除 ☆
          ╚----------------------╝
          Create TABLE 數據表名稱(字段1 類型1(長度),字段2 類型2(長度) …… )
          例:Create TABLE tab01(name varchar(50),datetime default now())
          Drop TABLE 數據表名稱 (永久性刪除一個數據表)

          ╔--------------------╗
          ☆ 記錄集對象的方法 ☆
          ╚--------------------╝
          rs.movenext 將記錄指針從當前的位置向下移一行
          rs.moveprevious 將記錄指針從當前的位置向上移一行
          rs.movefirst 將記錄指針移到數據表第一行
          rs.movelast 將記錄指針移到數據表最后一行
          rs.absoluteposition=N 將記錄指針移到數據表第N行
          rs.absolutepage=N 將記錄指針移到第N頁的第一行
          rs.pagesize=N 設置每頁為N條記錄
          rs.pagecount 根據 pagesize 的設置返回總頁數
          rs.recordcount 返回記錄總數
          rs.bof 返回記錄指針是否超出數據表首端,true表示是,false為否
          rs.eof 返回記錄指針是否超出數據表末端,true表示是,false為否
          rs.delete 刪除當前記錄,但記錄指針不會向下移動
          rs.addnew 添加記錄到數據表末端
          rs.update 更新數據表記錄
          posted @ 2008-06-05 16:09 jadmin 閱讀(80) | 評論 (0)編輯 收藏

          你正在學習CSS布局嗎?是不是還不能完全掌握純CSS布局?通常有兩種情況阻礙你的學習:

          第一種可能是你還沒有理解CSS處理頁面的原理。在你考慮你的頁面整體表現效果前,你應當先考慮內容的語義和結構,然后再針對語義、結構添加CSS。這篇文章將告訴你應該怎樣把HTML結構化。

          另一種原因是你對那些非常熟悉的表現層屬性(例如:cellpadding,、hspace、align="left"等等)束手無策,不知道該轉換成對 應的什么CSS語句。 當你解決了第一種問題,知道了如何結構化你的HTML,我再給出一個列表,詳細列出原來的表現屬性用什么CSS來代替。

          結構化HTML

          我們在剛學習網頁制作時,總是先考慮怎么設計,考慮那些圖片、字體、顏色、以及布局方案。然后我們用Photoshop或者Fireworks畫出來、切割成小圖。最后再通過編輯HTML將所有設計還原表現在頁面上。

          如果你希望你的HTML頁面用CSS布局(是CSS-friendly的),你需要回頭重來,先不考慮“外觀”,要先思考你的頁面內容的語義和結構。

          外觀并不是最重要的。一個結構良好的HTML頁面可以以任何外觀表現出來,CSS Zen Garden是一個典型的例子。CSS Zen Garden幫助我們最終認識到CSS的強大力量。

          HTML不僅僅只在電腦屏幕上閱讀。你用photoshop精心設計的畫面可能不能顯示在PDA、移動電話和屏幕閱讀機上。但是一個結構良好的HTML頁面可以通過CSS的不同定義,顯示在任何地方,任何網絡設備上。

          開始思考

          首先要學習什么是"結構",一些作家也稱之為"語義"。這個術語的意思是你需要分析你的內容塊,以及每塊內容服務的目的,然后再根據這些內容目的建立起相應的HTML結構。

          如果你坐下來仔細分析和規劃你的頁面結構,你可能得到類似這樣的幾塊:

          標志和站點名稱

          主頁面內容

          站點導航(主菜單)

          子菜單

          搜索框

          功能區(例如購物車、收銀臺)

          頁腳(版權和有關法律聲明)

          我們通常采用DIV元素來將這些結構定義出來,類似這樣:

          <div id="header"></div>

          <div id="content"></div>

          <div id="globalnav"></div>

          <div id="subnav"></div>

          <div id="search"></div>

          <div id="shop"></div>

          <div id="footer"></div>

          這不是布局,是結構。這是一個對內容塊的語義說明。當你理解了你的結構,就可以加對應的ID在DIV上。DIV容器中可以包含任何內容塊,也可以嵌套另一個DIV。內容塊可以包含任意的HTML元素---標題、段落、圖片、表格、列表等等。

          根據上面講述的,你已經知道如何結構化HTML,現在你可以進行布局和樣式定義了。每一個內容塊都可以放在頁面上任何地方,再指定這個塊的顏色、字體、邊框、背景以及對齊屬性等等。

          使用選擇器是件美妙的事

          id的名稱是控制某一內容塊的手段,通過給這個內容塊套上DIV并加上唯一的id,你就可以用CSS選擇器來精確定義每一個頁面元素的外觀表現,包括標 題、列表、圖片、鏈接或者段落等等。例如你為#header寫一個CSS規則,就可以完全不同于#content里的圖片規則。

          另外一個例子是:你可以通過不同規則來定義不同內容塊里的鏈接樣式。類似這樣:#globalnav a:link或者 #subnav a:link或者#content a:link。你也可以定義不同內容塊中相同元素的樣式不一樣。例如,通過#content p和#footer p分別定義#content和#footer中p的樣式。從結構上講,你的頁面是由圖片、鏈接、列表、段落等組成的,這些元素本身并不會對顯示在什么網絡 設備中(PDA還是手機或者網絡電視)有影響,它們可以被定義為任何的表現外觀。

          一個仔細結構化的HTML頁面非常簡單,每一個元素都被用于結構目的。當你想縮進一個段落,不需要使用blockquote標簽,只要使用p標簽,并對p 加一個CSS的margin規則就可以實現縮進目的。p是結構化標簽,margin是表現屬性,前者屬于HTML,后者屬于CSS。(這就是結構于表現的 相分離.)

          良好結構的HTML頁面內幾乎沒有表現屬性的標簽。代碼非常干凈簡潔。例如,原先的代碼<table width="80%" cellpadding="3" border="2" align="left">,現在可以只在HTML中寫<table>,所有控制表現的東西都寫到CSS中去,在結構化的HTML中, table就是表格,而不是其他什么(比如被用來布局和定位)。

          親自實踐一下結構化

          上面說的只是最基本的結構,實際應用中,你可以根據需要來調整內容塊。常常會出現DIV嵌套的情況,你會看到"container"層中又有其它層,結構類似這樣:

          <div id="navcontainer">

          <div id="globalnav">

          <ul>a list</ul>

          </div>

          <div id="subnav">

          <ul>another list</ul>

          </div>

          </div>

          嵌套的div元素允許你定義更多的CSS規則來控制表現,例如:你可以給#navcontainer一個規則讓列表居右,再給#globalnav一個規則讓列表居左,而給#subnav的list另一個完全不同的表現。

          用CSS替換傳統方法

          下面的列表將幫助你用CSS替換傳統方法:

          HTML屬性以及相對應的CSS方法

          HTML屬性

          CSS方法說明

          align="left"

          align="right" float: left;

          float: right; 使用CSS可以浮動 任何元素:圖片、段落、div、標題、表格、列表等等

          當你使用float屬性,必須給這個浮動元素定義一個寬度。

          marginwidth="0" leftmargin="0" marginheight="0" topmargin="0" margin: 0; 使用CSS, margin可以設置在任何元素上, 不僅僅是body元素.更重要的,你可以分別指定元素的top, right, bottom和left的margin值。

          vlink="#333399" alink="#000000" link="#3333FF" a:link #3ff;

          a:visited: #339;

          a:hover: #999;

          a:active: #00f;

          在HTML中,鏈接的顏色作為body的一個屬性值定義。整個頁面的鏈接風格都一樣。使用CSS的選擇器,頁面不同部分的鏈接樣式可以不一樣。

          bgcolor="#FFFFFF" background-color: #fff; 在CSS中,任何元素都可以定義背景顏色,不僅僅局限于body和table元素。

          bordercolor="#FFFFFF" border-color: #fff; 任何元素都可以設置邊框(boeder),你可以分別定義top, right, bottom和left

          border="3"cellspacing="3" border-width: 3px; 用CSS,你可以定義table的邊框為統一樣式,也可以分別定義top, right, bottom and left邊框的顏色、尺寸和樣式。

          你可以使用 table, td or th 這些選擇器.

          如果你需要設置無邊框效果,可以使用CSS定義: border-collapse: collapse;

          <br clear="left">

          <br clear="right">

          <br clear="all">

          clear: left;

          clear: right;

          clear: both;

          許多2列或者3列布局都使用 float屬性來定位。如果你在浮動層中定義了背景顏色或者背景圖片,你可以使用clear屬性.

          cellpadding="3"

          vspace="3"

          hspace="3" padding: 3px; 用CSS,任何元素都可以設定padding屬性,同樣,padding可以分別設置top, right, bottom and left。padding是透明的。

          align="center" text-align: center;

          margin-right: auto; margin-left: auto;

          Text-align 只適用于文本.

          象div,p這樣的塊級可以通過margin-right: auto; 和margin-left: auto;來水平居中

          一些令人遺憾的技巧和工作環境

          由于瀏覽器對CSS支持的不完善,我們有時候不得不采取一些技巧(hacks)或建立一種環境(Workarounds)來讓CSS實現傳統方法同樣的效 果。例如塊級元素有時侯需要使用水平居中的技巧,盒模型bug的技巧等等。所有這些技巧都在Molly Holzschlag的文章《Integrated Web Design: Strategies for Long-Term CSS Hack Management》中有詳細說明。

          另外一個關于CSS技巧的資源站點是Big John和Holly Bergevin的“Position is Everything”。

          理解浮動行為

          Eric Meyer的《Containing Floats》將幫助你掌握如何使用float屬性布局。float元素有時候需要清除(clear),閱讀《How To Clear Floats Without Structural Markup》將非常有幫助。

          更多幫助

          已有的《CSS Discussion》列表是很好的資源,它收集了一個WiKiA討論組的信息,其中包括CSS布局總結(css- discuss.incutio.com/?page=CssLayouts),CSS 技巧總結 (css-discuss.incutio.com/?page=CssHack) 以及更多。

          posted @ 2008-06-03 17:29 jadmin 閱讀(70) | 評論 (0)編輯 收藏

          在 MySQL下,在進行中文模糊檢索時,經常會返回一些與之不相關的記錄,如查找 "%a%" 時,返

          回的可能有中文字符,卻沒有a字符存在。本人以前也曾遇到過類似問題,經詳細閱讀MySQL的

          Manual,發現可以有一種方法很方便的解決并得到滿意的結果。

            希望通過“標題”對新聞庫進行檢索,關鍵字可能包含是中英文,如下SQL語句:

            以下為引用的內容:


            
          Code:
          select id,title,name from achech_com.news where title like '%a%'


            返回的結果,某些title字段確定帶了“a”關鍵字,而有些則只有中文,但也隨之返回在檢

          索結果中。

            解決方法,使用 BINARY 屬性進行檢索,如:

            以下為引用的內容:


            
          Code:
          select id,title,name from achech_com.news where binary title like '%a%'


            返回的結果較之前正確,但英文字母區分大小寫,故有時在檢索如“Achech”及“achech”

          的結果是不一樣的。知道了使用 BINARY 屬性可以解決前面這個問題,再看看 MySQL 支持的

          UCASE 及 CONCAT 函數,其中 UCASE 是將英文全部轉成大寫,而CONCAT函數的作用是對字符進行

          連接,以下是我們完全解決后的SQL 語句:


            
          Code:
          select id,title,name from achech_com.news

            where binary ucase(title) like concat('%',ucase('a'),'%')

            檢索的步驟是先將屬性指定為 BINARY ,以精確檢索結果,而被 like 的 title內容存在大

          小寫字母的可能,故先使用 ucase 函數將字段內容全部轉換成大寫字母,然后再進行 like 操作

          ,而 like 的操作使用模糊方法,使用 concat的好處是傳進來的可以是直接的關鍵字,不需要帶

          “%”萬用符,將“'a'”直接換成你的變量,在任何語言下都萬事無憂了。 當然你也可以這么寫


            
          Code:
          select id,title,name from achech_com.news where binary ucase(title) like ucase('%a%')


            檢索的結果還算滿意吧,不過速度可能會因此而慢N毫秒。

          posted @ 2008-06-01 21:36 jadmin 閱讀(84) | 評論 (0)編輯 收藏

          在試過Oracle安裝目錄下C:\oracle\product\10.2.0\db_1\jdbc\lib自帶的驅動classes12.jar和ojdbc14.jar之后,都產生下面的錯誤

          產生錯誤的原因是:數據庫版本是10.2.0.1的驅動有問題,

          解決辦法:去下載最新的ojdbc14.jar 驅動,反正大于10.2.0.2版本應該就可以解決.

          Oracle網站下載地址 :http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html

          posted @ 2008-05-25 01:40 jadmin 閱讀(350) | 評論 (0)編輯 收藏

          轉載自:http://java.ccidnet.com/art/3539/20080508/1443759_1.html

          最近對程序占用內存方面做了一些優化,取得了不錯的效果,總結了一些經驗。

          簡要說一下,相信會對大家寫出優質的程序有所幫助。

          下面的論述針對32位系統,對64位系統不適用,后敘經常你寫了一個程序,一測試,功能沒問題,一看內存占用也不多,就不去考慮其它的東西了。但可能程序使用了一個什么數據結構,會當數據規模變大時,內存占用激增。

          基本&&關鍵的問題是,Java里各種東東占多少內存?????????

          對于primitive類型,有8個

          byte short int long float double char boolean 它們的長度分別是

          1 2 4 8 4 8 2 1

          這個不羅嗦了,舉例來說

          long[] data=new long[1000];

          占用內存 8*1000 bytes

          此外,data本身是一個Object,也占用內存若干,后敘,當然它針對 8*1000來說,忽略不計

          再說Object的占用,在說這個之前,先說說引用,一慣的說法是

          Java里沒有指針了,只有引用,引用是安全的

          這個說法沒錯,但是從機理上來說,引用就是指針,只是jvm對指針的使用檢查和限制很多,這個引用/指針變得很安全

          直接來結論:一個引用占4byte ,在32位系統上

          Object obj=null; //4byte

          Object[] objs=new Object[1000]; //至少4*1000byte

          你看我定義了一個 obj,還是null,就占4byte

          定義了一個 objs,1000個元素,但都是null啊,就都每個占4byte

          是的!!!!!

          雖然obj==null,但它已經是 一個引用,或者說一個指針了

          指針也要占地方啊!!!!啊!!!!啊!!!!

          接下來,直接給另一個結論: Object占8byte,注意,純Object

          Object obj=new Object(); //多少????

          8byte?? 錯!! 12byte,忘了還有一個引用,8byte是Object的內容

          記住 Object obj=new Object(); 占12byte

          Object[] objs=new Object[1000];

          for(int i=0;i<1000;i++) {

          objs[i]=new Object();

          }

          至少占用 12*1000 bytes

          推論: Object占12bytes,似乎和上面的結論矛盾??!!

          沒有!! 不管Object,沒有被垃圾回收之前,總得被別人引用吧?

          總的有指針指它吧? 既然指,那個引用or指針就要占地方啊 4byte

          加起來是12byte,反正一個Object至少 12bytes

          還是直接給結論,推導的過程我就都包辦了,咱不是臟活累活搶著干么!!

          一個Integer占 16 bytes

          這時您可能會有疑問,Integer=Object+int,就是:

          public class Integer {

          public int value;

          }

          Integer應該占 8+4=12 bytes啊

          你說的有道理,但是jvm對所有的Object有限制!!

          這個限制被我發現了,就是不管什么Object占的空間,要是8的倍數

          12不是8的倍數,只能是16了!!!

          推論:Byte也占16bytes!!!!!!!!!!!

          問:

          Byte[] bytes=new Byte[1000];

          占用空間多少?

          答: 約為(至少為) (16+4)*1000 bytes

          好家伙!!!!!!!!

          論題:數組空間占用怎么算?

          我這里直接給結論了,推導這個花了更長的時間:

          對于數組來說,數組這個Object有一個length屬性,數組的元素相當于其成員

          public class Array {

          public int length;

          //... 其它成員

          }

          對于數組,我們不是直接可以取length屬性么,源于此

          public byte[] bytes=new byte[1000];

          System.out.println(bytes.length); // 看,有length屬性

          上面的bytes換算過來是:

          public class Array {

          public int length;

          public byte byte0;

          public byte byte1;

          ...

          public byte byte999;

          }

          上面的bytes占用的內存是:

          4+[8+4 + 1*1000] = 4+ [1012]=4+1016=1020

          4是 bytes這個引用,8是Object基占的,4是length屬性占的

          1000是1000個成員占的,本來是 1012,但要求是8的倍數,變成 1016了

          總共是 1020

          再如:

          byte[] bytes=new byte[4];

          的內存占用是:

          4+[8+4+4*1]=4+[16]=20;

          byte[] bytes=new byte[3]; 也是 20

          對于元素是Object的數組,Object也是當作其成員,(注意只有引用這個數組的空間,這個可以推到普通Class上)

          Byte[] bytes=new Byte[1000];

          這個 bytes的定義相當于:

          public class Array {

          public int length;

          public Byte byte0;

          .....

          public Byte byte999;

          }

          占用空間是:

          4+[8+4+4*1000]+16*1000= 4+ 4016 + 16000 = 你自己算吧

          推論:千萬不要用 Byte[] 有20倍的差距!!!!!!!

          你可能一下子沒明白過來,沒關系多琢磨一下,對于普通的class來說

          ,內容占用就是基加成員的占用,Object成員只記引用

          public class Abc {

          public int n;

          public byte b;

          public Object obj;

          }

          它的內容占用是: [8+4+1+4]=24

          所以 Abc one=new Abc()的占用是 4+24=28

          提醒:對于 Abc的成員 obj沒有計,如果要計入的話,循環這個過程就可以了。(琢磨一下)

          舉例:

          public class Abc {

          public byte b;

          public Object obj=null;

          }

          public class Def {

          public int n;

          public byte b;

          public Abc obj=new Abc();

          }

          問:

          Def one=new Def(); //占多少?

          答:

          4+[8+4+1+4]+[8+1+4]=4+24+16=44

          public class Abc {

          public byte b;

          public Object obj=null;

          }

          public class Def {

          public int n;

          public byte b;

          public Abc[] objs=new Abc[100];

          {

          for(int i=0;i<10;i++) {

          objs[i]=new Abc();

          }

          }

          }

          問:

          Def one=new Def(); //占多少?

          答:

          kao,一下我也算不出來,不過我寫了程序,可以算出來,你給它一個Object,它就能遞歸的算出總共占了多少內存,這個程序不復雜,你也可以寫出來。我等機會合適了再放出。

          單獨說一下String,String的結構是:

          public class String {

          private final char value[];

          private final int offset;

          private final int count;

          private int hash; // Default to 0

          }

          所以,不考慮那個char[]的占用,一個String最少占用 [8+4+4+4+4]=24bytes

          加上引用,共28bytes

          所以

          String s="";

          占用28bytes!!!!! 盡管它的長度為0

          如果精確的算,加上引用一個String的占用是

          4+24+[8+4+2*length]

          String s=""; 的占用是 28+16= 44

          String s="ab" 的占用是 28+16= 44

          String s="abc" 的占用是 28+24 = 52

          要說的是,String是常用的類,這么看,String耗內存很多,所以jvm有優化,同樣的內容盡量重用,所以除了28是必須的外,那個char[] 很可能一樣

          比方說

          String[] s=new String[1000];

          for(int i=0;i<1000;i++) {

          s[i]=new String("abcdefasdjflksadjflkasdfj");

          }

          的占用的數量級是 28*1000,那 1000個字符串本身基本上不占內存,只有一份!!!!!!

          反正String 至少是 28,最多也可能是28!!!!!!!!

          比較占內存的數據結構,這個很重要:

          基本上就是 primitive的包裝

          實例:

          我以前用一個

          Hashtable的結構,有100萬個元素

          改為String[]+int[]后,內存占用改觀不少,速度也很快

          100萬的String[] 快排一下,也就2秒多,查找用2分,和hash也差不多少。

          posted @ 2008-05-10 15:34 jadmin 閱讀(75) | 評論 (0)編輯 收藏

          1."-2147467259 (0x80004005)"錯誤

          解決辦法:

          cmd進入命令提示窗,依次進行如下操作

          regsvr32 vbscript.dll
          regsvr32 jscript.dll
          regsvr32 %windir%\system32\inetsrv\asp.dll


          重新啟動一下IIS,錯誤就解決了

          2."Microsoft VBScript 運行時錯誤 (0x800A01AD)"錯誤,此錯誤屬于沒有FSO權限,需要注冊scrrun.dll

          解決辦法:

          運行-->輸入命令regsvr32 scrrun.dll即可。

          如果輸入上述命令后,提示找不到模塊,說明系統中缺少該組件,則進行如下操作

          1.在安裝文件(系統光盤)目錄i386中找到scrrun.dl_,用winrar解壓縮,得scrrun.dll,

          2.復制到x(你的系統盤):\windows\system32\目錄中。

          3.運行-->運行命令regsvr32 scrrun.dll

          補充:

          取消FOS的命令是:運行regsvr32 scrrun.dll /u

          posted @ 2008-05-06 17:58 jadmin 閱讀(84) | 評論 (0)編輯 收藏

          ?????? 系統要安全就需要經常的打補丁,經常的重裝系統,當我們重裝系統的時候挨個打補丁是非常麻煩的事情,因為補丁比較多,挨個啟動比較煩瑣,為了方便,我們可以自己制作一個補丁批處理安裝程序。
          ?????? 第一步:根據微軟安全補丁最新發布通知和系統更新需要,下載所需的安全補丁(可以使用WUD下載)。在移動硬盤或U盤上建立目錄,例如:“20071212xp_patch”,將下載的所有補丁文件復制到此文件夾內。
          ?????? 第二步:微軟KB類的安全補丁安裝參數都很統一,主要分為“安裝模式”、“重新啟動選項”和“特別選項”三部分。其中,“/quiet”、“/passive”、“/norestart”和“/nobackup”安裝參數分別表示“無用戶操作或顯示”、“無人參與模式”、“安裝后不重啟”和“不備份卸載需要的文件”。正確使用這幾個參數可輕松實現補丁無人值守安裝,并且能避免安裝過程中重啟電腦及在C盤Windows目錄下備份無用的補丁文件。
          ?????? 第三步:打開記事本程序,輸入以下代碼:

          @echo off
          for %%i in (*.exe) do %%i /passive /norestart /nobackup
          shutdown -r??????????????????????????????????????????

          ?????? 上面的代碼,第二行是一個循環命令,循環執行同一目錄下的所有補丁文件;最后一行“shutdown -r”,表示所有補丁安裝后自動重啟電腦(注:最后一行可以不加,省得象我一樣這邊下載著驅動,那邊提示還有多少秒自動重啟,暈啊 :)。把它保存為“updatexp.bat”,并復制到20071212xp_patch文件夾中。
          ?????? 第四步:雙擊這個批處理文件,就可以了。

          說明:
          有時系統升級文件可能是SFX、CAB格式,這時你可以用以下代碼:
          @echo off
          FOR /R %%F IN (*.exe) DO @((@findstr _SFX_CAB_EXE_PATH "%%F" >nul && @start /wait %%F /U /Z)|| @start /wait %%F)

          一點使用說明:
          ①、@ 不是一個命令, 而是DOS 批處理的一個特殊標記符, 僅用于屏蔽命令行回顯;
          ②、echo 表示顯示此命令后的字符;
          echo off 表示在此語句后所有運行的命令都不顯示命令行本身;
          @與echo off相象,但它是加在每個命令行的最前面,表示運行時不顯示這一行的命令行(只能影響當前行)。
          因此如果你想顯示每次運行的命令行,可將第一行刪除。

          posted @ 2008-05-06 15:24 jadmin 閱讀(150) | 評論 (0)編輯 收藏
          僅列出標題
          共50頁: First 上一頁 16 17 18 19 20 21 22 23 24 下一頁 Last 
          主站蜘蛛池模板: 金乡县| 固安县| 冷水江市| 陆良县| 阿克| 齐齐哈尔市| 仲巴县| 泾阳县| 温泉县| 福泉市| 繁昌县| 闽侯县| 梧州市| 阳新县| 桃源县| 井冈山市| 永修县| 沂南县| 常山县| 南通市| 甘谷县| 上思县| 公主岭市| 永善县| 渝中区| 高安市| 崇文区| 陆河县| 天镇县| 平顶山市| 额尔古纳市| 万宁市| 桑日县| 延吉市| 淅川县| 阆中市| 靖州| 黄骅市| 赞皇县| 达尔| 盐津县|