posted @ 2010-07-01 16:47 yuyu 閱讀(385) | 評(píng)論 (0) | 編輯 收藏
報(bào)表文件有錯(cuò):Errors were encountered when compiling report expressions class file: D:\server\tomcat5.0.28\bin\mytest_1212552692656_858465.java:4: 軟件包 net.sf.jasperreports.engine 不存在 import net.sf.jasperreports.engine.*; ^ D:\server\tomcat5.0.28\bin\mytest_1212552692656_858465.java:5: 軟件包 net.sf.jasperreports.engine.fill 不存在 import net.sf.jasperreports.engine.fill.*; ^ D:\server\tomcat5.0.28
找了很長(zhǎng)時(shí)間最后終于搞定,強(qiáng)行指定編譯的classpath
String classPath = "yourpath";
JRProperties.setProperty(JRProperties.COMPILER_CLASSPATH, classPath);
posted @ 2008-06-04 16:48 yuyu 閱讀(1184) | 評(píng)論 (1) | 編輯 收藏
問(wèn)題一:
網(wǎng)頁(yè)打開(kāi)之后長(zhǎng)時(shí)間未響應(yīng),這個(gè)問(wèn)題在郵件中已經(jīng)分析過(guò)了,這里就不重復(fù)了。
問(wèn)題二:
mssql訪問(wèn)不到,telnet不通,netstat也沒(méi)有程序監(jiān)聽(tīng),最后打sp4補(bǔ)丁搞好了。也算是解決了吧,這種問(wèn)題以后還是要記得先查看版本信息。不過(guò)我記得就算是沒(méi)有sp4也只是部分功能不能用,不會(huì)導(dǎo)致端口都不監(jiān)聽(tīng)了吧。
問(wèn)題三:
mysql編碼問(wèn)題,這兩天被編碼的問(wèn)題搞的很郁悶。mysql的確是很奇怪,字符編碼到處都可以設(shè)。系統(tǒng)默認(rèn)編碼,數(shù)據(jù)庫(kù)編碼,表編碼,表字段編碼。這樣的結(jié)果常常導(dǎo)致在導(dǎo)數(shù)據(jù)或者插入數(shù)據(jù)的時(shí)候數(shù)據(jù)庫(kù)出現(xiàn)大量亂碼,更奇怪的是用第三方工具查看的數(shù)據(jù)庫(kù)是亂碼,但是使用程序取出來(lái)的時(shí)候又是好的,原來(lái)第三方的工具編碼也有問(wèn)題。
posted @ 2008-03-04 12:12 yuyu 閱讀(179) | 評(píng)論 (0) | 編輯 收藏
主要介紹了無(wú)需Resin插件如何在Eclipse運(yùn)行和調(diào)試WEB應(yīng)用程序。
因?yàn)闊o(wú)需插件,純JAVA環(huán)境運(yùn)行,步驟可能多一點(diǎn)。
下面以Eclipse3.0.1、Resin3.0.12為例說(shuō)明如何配置,相關(guān)配置內(nèi)容為僅供參考。
1、建立基本結(jié)構(gòu)
首先在Eclipse中新建一個(gè)項(xiàng)目pjt,結(jié)構(gòu)如下:
|
|--src
|
|--context
|
|-- WEB-INF
|
|--classes
|--lib
src: 類目錄
context: WEB應(yīng)用程序文檔目錄,即web-app的document-directory
WEB-INF: 你的*.xml、*.tld等等文檔就在這里存放。
classes: 類編譯輸出文件夾
lib: 類庫(kù)的存放目錄,存放相應(yīng)APPLICATION運(yùn)行所需要的類庫(kù)
以上為一大致結(jié)構(gòu),相信稍微做過(guò)開(kāi)發(fā)的朋友都明白。
2、配置項(xiàng)目屬性
在該項(xiàng)目屬性中配置:
該項(xiàng)目JAVA文件編譯的缺省輸出文件夾為上面的classes目錄。
在LIB列表中添加編譯需要的jar。
具體的配置看個(gè)人情況而定了。
3、配置Resin的conf
拷貝一份resin安裝目錄conf目錄下的resin.conf,命名為test.conf
編輯其中的內(nèi)容,默認(rèn)也可,在其后面的</host>上面添加一行:
<web-app id=/pjt document-directory="d:\pjt\webapp"/>
這是最簡(jiǎn)配置,詳細(xì)參數(shù)自己可以定制。
4、配置Eclipse的運(yùn)行
打開(kāi)Eclipse的“運(yùn)行”菜單,選擇“運(yùn)行”,如果你的是英文,應(yīng)該都是RUN。:)
選擇JAVA應(yīng)用程序,點(diǎn)擊下面的新建按鈕,新建一個(gè)運(yùn)行項(xiàng)目。
名稱自己填寫(xiě),我們暫時(shí)以RunTest來(lái)命名這個(gè)例子。然后配置其中的相關(guān)屬性。
(1)主要
項(xiàng)目:我們選擇剛剛新建的pjt項(xiàng)目。
Main類:填寫(xiě)com.caucho.server.resin.Resin
注意,如果你用的是resin2.1.5系列應(yīng)該是 com.caucho.server.http.HttpServer
(2)自變量
程序自變量:-conf "d:\resin-3.0.12\conf\test.conf"
VM自變量:
-Dresin.home="G:\workspace\resin-3.0.12"
-Djava.util.logging.manager=com.caucho.log.LogManagerImpl
如果是開(kāi)發(fā)Tapestry,需要page可以自動(dòng)更新,那再添加:
-Dorg.apache.tapestry.enable-reset-service=true
-Dorg.apache.tapestry.disable-caching=true
(3)JRE:選擇自己系統(tǒng)安裝的JRE。
(4)類路徑:添加Resin home的lib下的jar。
其它項(xiàng)目默認(rèn)或根據(jù)情況自己定制即可。
配置好之后點(diǎn)擊“應(yīng)用”按鈕,然后點(diǎn)擊下面的“運(yùn)行”按鈕即可運(yùn)行該項(xiàng)目。:)
以后你會(huì)發(fā)現(xiàn)工具條上運(yùn)行按鈕的下拉列表里面多了一個(gè)RunTest。
這樣以后通過(guò)工具條上的運(yùn)行和調(diào)試按鈕就可以來(lái)運(yùn)行這個(gè)pjt項(xiàng)目了。
轉(zhuǎn)自:http://www.web521.com/web/554468/T642458.shtml
posted @ 2008-03-03 11:43 yuyu 閱讀(418) | 評(píng)論 (0) | 編輯 收藏
TCP/IP通信程序設(shè)計(jì)的豐富多樣性
剛接觸TCP/IP通信設(shè)計(jì)的人根據(jù)范例可以很快編出一個(gè)通信程
序,據(jù)此一些人可能會(huì)認(rèn)為T(mén)CP/IP編程很簡(jiǎn)單。其實(shí)不然,
TCP/IP編程具有較為豐富的內(nèi)容。其編程的豐富性主要體現(xiàn)在
通信方式和報(bào)文格式的多樣性上。
一。通信方式
主要有以下三大類:
(一)SERVER/CLIENT方式
1.一個(gè)Client方連接一個(gè)Server方,或稱點(diǎn)對(duì)點(diǎn)(peer to peer):
2.多個(gè)Client方連接一個(gè)Server方,這也是通常的并發(fā)服務(wù)器方式。
3.一個(gè)Client方連接多個(gè)Server方,這種方式很少見(jiàn),主要
用于一個(gè)客戶向多個(gè)服務(wù)器發(fā)送請(qǐng)求情況。
(二)連接方式
1.長(zhǎng)連接
Client方與Server方先建立通訊連接,連接建立后不斷開(kāi),
然后再進(jìn)行報(bào)文發(fā)送和接收。這種方式下由于通訊連接一直
存在,可以用下面命令查看連接是否建立:
netstat –f inet|grep 端口號(hào)(如5678)。
此種方式常用于點(diǎn)對(duì)點(diǎn)通訊。
2.短連接
Client方與Server每進(jìn)行一次報(bào)文收發(fā)交易時(shí)才進(jìn)行通訊連
接,交易完畢后立即斷開(kāi)連接。此種方式常用于一點(diǎn)對(duì)多點(diǎn)
通訊,比如多個(gè)Client連接一個(gè)Server.
(三)發(fā)送接收方式
1.異步
報(bào)文發(fā)送和接收是分開(kāi)的,相互獨(dú)立的,互不影響。這種方
式又分兩種情況:
(1)異步雙工:接收和發(fā)送在同一個(gè)程序中,有兩個(gè)不同的
子進(jìn)程分別負(fù)責(zé)發(fā)送和接收
(2)異步單工:接收和發(fā)送是用兩個(gè)不同的程序來(lái)完成。
2.同步
報(bào)文發(fā)送和接收是同步進(jìn)行,既報(bào)文發(fā)送后等待接收返回報(bào)文。
同步方式一般需要考慮超時(shí)問(wèn)題,即報(bào)文發(fā)上去后不能無(wú)限等
待,需要設(shè)定超時(shí)時(shí)間,超過(guò)該時(shí)間發(fā)送方不再等待讀返回報(bào)
文,直接通知超時(shí)返回。
實(shí)際通信方式是這三類通信方式的組合。比如一般書(shū)上提供的
TCP/IP范例程序大都是同步短連接的SERVER/CLIENT程序。有的
組合是基本不用的,比較常用的有價(jià)值的組合是以下幾種:
同步短連接Server/Client
同步長(zhǎng)連接Server/Client
異步短連接Server/Client
異步長(zhǎng)連接雙工Server/Client
異步長(zhǎng)連接單工Server/Client
其中異步長(zhǎng)連接雙工是最為復(fù)雜的一種通信方式,有時(shí)候經(jīng)
常會(huì)出現(xiàn)在不同銀行或不同城市之間的兩套系統(tǒng)之間的通信。
比如金卡工程。由于這幾種通信方式比較固定,所以可以預(yù)
先編制這幾種通信方式的模板程序。
二.報(bào)文格式
通信報(bào)文格式多樣性更多,相應(yīng)地就必須設(shè)計(jì)對(duì)應(yīng)的讀寫(xiě)報(bào)文的接
收和發(fā)送報(bào)文函數(shù)。
(一)阻塞與非阻塞方式
1.非阻塞方式
讀函數(shù)不停地進(jìn)行讀動(dòng)作,如果沒(méi)有報(bào)文接收到,等待一段時(shí)間后
超時(shí)返回,這種情況一般需要指定超時(shí)時(shí)間。
2.阻塞方式
如果沒(méi)有報(bào)文接收到,則讀函數(shù)一直處于等待狀態(tài),直到有報(bào)文到達(dá)。
(二)循環(huán)讀寫(xiě)方式
1.一次直接讀寫(xiě)報(bào)文
在一次接收或發(fā)送報(bào)文動(dòng)作中一次性不加分別地全部讀取或全部
發(fā)送報(bào)文字節(jié)。
2.不指定長(zhǎng)度循環(huán)讀寫(xiě)
這一般發(fā)生在短連接進(jìn)程中,受網(wǎng)絡(luò)路由等限制,一次較長(zhǎng)的報(bào)
文可能在網(wǎng)絡(luò)傳輸過(guò)程中被分解成了好幾個(gè)包。一次讀取可能不
能全部讀完一次報(bào)文,這就需要循環(huán)讀報(bào)文,直到讀完為止。
3.帶長(zhǎng)度報(bào)文頭循環(huán)讀寫(xiě)
這種情況一般是在長(zhǎng)連接進(jìn)程中,由于在長(zhǎng)連接中沒(méi)有條件能夠
判斷循環(huán)讀寫(xiě)什么時(shí)候結(jié)束,所以必須要加長(zhǎng)度報(bào)文頭。讀函數(shù)
先是讀取報(bào)文頭的長(zhǎng)度,再根據(jù)這個(gè)長(zhǎng)度去讀報(bào)文.實(shí)際情況中,
報(bào)頭的碼制格式還經(jīng)常不一樣,如果是非ASCII碼的報(bào)文頭,還必須
轉(zhuǎn)換成ASCII,常見(jiàn)的報(bào)文頭碼制有:
(1)n個(gè)字節(jié)的ASCII碼
(2)n個(gè)字節(jié)的BCD碼
(3)n個(gè)字節(jié)的網(wǎng)絡(luò)整型碼
以上是幾種比較典型的讀寫(xiě)報(bào)文方式,可以與通信方式模板一起
預(yù)先提供一些典型的API讀寫(xiě)函數(shù)。當(dāng)然在實(shí)際問(wèn)題中,可能還
必須編寫(xiě)與對(duì)方報(bào)文格式配套的讀寫(xiě)API.
在實(shí)際情況中,往往需要把我們自己的系統(tǒng)與別人的系統(tǒng)進(jìn)行連接,
有了以上模板與API,可以說(shuō)連接任何方式的通信程序都不存在問(wèn)題。
posted @ 2007-12-10 10:35 yuyu 閱讀(3439) | 評(píng)論 (0) | 編輯 收藏
MYSQL索引容易因意外重啟等原因損壞,下面是轉(zhuǎn)載的一篇文章,有碰到的不妨先試下文中講述的方法。
前幾天因?yàn)閙ysql數(shù)據(jù)庫(kù)部分?jǐn)?shù)據(jù)損壞原因,我嘗試了下恢復(fù)數(shù)據(jù),之后整理以下文檔,供各位參考,
以備各位同事以后如有類似問(wèn)題,可以少走些彎路,盡快解決問(wèn)題。
環(huán)境:windows2003
數(shù)據(jù)庫(kù):mysql
損壞數(shù)據(jù)文件名:function_products
將數(shù)據(jù)庫(kù)內(nèi)容物理文件直接導(dǎo)入到mysqldata下,每只表各3個(gè)文件,依次分別為:.frm .MYD .MYI
首先我第一想到的是去網(wǎng)上搜索,尋找類似的工具,試圖通過(guò)工具來(lái)恢復(fù)已損壞的文件,于是我在GOOGLE上查找,
找到一款名為MySQLRecovery的工具,安裝后我用其進(jìn)行恢復(fù),只可惜效果太不理想,幾十M大的數(shù)據(jù)文件,恢復(fù)
之后它提示我竟然只有幾十K,令我吐血...
我又想到了mysql下應(yīng)有自己本身的修復(fù)程序等,于是想通過(guò)其來(lái)進(jìn)行恢復(fù),心想應(yīng)不會(huì)太差勁吧,在網(wǎng)上查找了
資料,提示:
由于臨時(shí)斷電,使用kill -9中止MySQL服務(wù)進(jìn)程,或者是mysql正在高速運(yùn)轉(zhuǎn)時(shí)進(jìn)行強(qiáng)制備份操作時(shí)等,
所有的這些都可能會(huì)毀壞MySQL的數(shù)據(jù)文件。如果在被干擾時(shí),服務(wù)正在改變文件,文件可能會(huì)留下錯(cuò)誤的
或不一致的狀態(tài)。因?yàn)檫@樣的毀壞有時(shí)是不容易被發(fā)現(xiàn)的,當(dāng)你發(fā)現(xiàn)這個(gè)錯(cuò)誤時(shí)可能是很久以后的事了。
于是,當(dāng)你發(fā)現(xiàn)這個(gè)問(wèn)題時(shí),也許所有的備份都有同樣的錯(cuò)誤。
我想我現(xiàn)在碰到的問(wèn)題可能是這個(gè)問(wèn)題,因?yàn)閭浞莸臄?shù)據(jù)也是有部分損壞的數(shù)據(jù),所以導(dǎo)致不能完全運(yùn)行,
意識(shí)到myisamchk程序?qū)τ脕?lái)檢查和修改的MySQL數(shù)據(jù)文件的訪問(wèn)應(yīng)該是唯一的。如果MySQL服務(wù)正在使用
某一文件,并對(duì)myisamchk正在檢查的文件進(jìn)行修改,myisamchk會(huì)誤以為發(fā)生了錯(cuò)誤,并會(huì)試圖進(jìn)行修復(fù)--
這將導(dǎo)致MySQL服務(wù)的崩潰!這樣,要避免這種情況的發(fā)生,通常我們需要在工作時(shí)關(guān)閉
MySQL服務(wù)。作為選擇,
你也可以暫時(shí)關(guān)閉服務(wù)以制作一個(gè)文件的拷貝,然后在這個(gè)拷貝上工作。當(dāng)你做完了以后,重新關(guān)閉服務(wù)并使
用新的文件取代原來(lái)的文件(也許你還需要使用期間的變更日志)。
MySQL數(shù)據(jù)目錄不是太難理解的。每一個(gè)數(shù)據(jù)庫(kù)對(duì)應(yīng)一個(gè)子目錄,每個(gè)子目錄中包含了對(duì)應(yīng)于這個(gè)數(shù)據(jù)庫(kù)中的
數(shù)據(jù)表的文件。每一個(gè)數(shù)據(jù)表對(duì)應(yīng)三個(gè)文件,它們和表名相同,但是具有不同的擴(kuò)展名。tblName.frm文件是
表的定義,它保存了表中包含的數(shù)據(jù)列的內(nèi)容和類型。tblName.MYD文件包含了表中的數(shù)據(jù)。tblName.MYI文件
包含了表的索引(例如,它可能包含lookup表以幫助提高對(duì)表的主鍵列的查詢)。
要檢查一個(gè)表的錯(cuò)誤,只需要運(yùn)行myisamchk(在MySQL的bin目錄下)并提供文件的位置和表名,或者是表的索引文件名:
% myisamchk /usr/local/mysql/var/dbName/tblName
% myisamchk /usr/local/mysql/var/dbName/tblName.MYI
上面的兩個(gè)命令都可以執(zhí)行對(duì)指定表的檢查。要檢查數(shù)據(jù)庫(kù)中所有的表,可以使用通配符:
% myisamchk /usr/local/mysql/var/dbName/*.MYI
要檢查所有數(shù)據(jù)庫(kù)中的所有表,可以使用兩個(gè)通配符:
% myisamchk /usr/local/mysql/var/*/*.MYI
如果不帶任何選項(xiàng),myisamchk將對(duì)表文件執(zhí)行普通的檢查。如果你對(duì)一個(gè)表有懷疑,但是普通的檢查不能發(fā)現(xiàn)任何錯(cuò)誤,你可以執(zhí)行更徹底的檢查(但是也更慢!),這需要使用--extend-check選項(xiàng):
% myisamchk --extend-check /path/to/tblName
對(duì)
錯(cuò)誤的檢查是沒(méi)有破壞性的,這意味著你不必?fù)?dān)心執(zhí)行對(duì)你的數(shù)據(jù)文件的檢查會(huì)使已經(jīng)存在的問(wèn)題變得更糟。另一方面,修復(fù)選項(xiàng),雖然通常也是安全的,但是它對(duì)
你的數(shù)據(jù)文件的更改是無(wú)法撤消的。因?yàn)檫@個(gè)原因,我們強(qiáng)烈推薦你試圖修復(fù)一個(gè)被破壞的表文件時(shí)首先做個(gè)備份,并確保在制作這個(gè)備份之前你的MySQL服務(wù)
是關(guān)閉的。
我在win2003下通過(guò)命令提示符,輸入:
注:此為記錄我當(dāng)時(shí)操作的全部過(guò)程
D:Documents and SettingsAdministrator>c:
C:>cd mysql
C:mysql>cd data
C:mysqldata>cd hw_enterprice
C:mysqldatahw_enterprice>myisamchk function_products.frm
'myisamchk' 不是內(nèi)部或外部命令,也不是可運(yùn)行的程序
或批處理文件。
C:mysqldatahw_enterprice>cd
C:>cd mysql
C:mysql>cd bin
注:查看myisamchk的幫助信息
C:mysqlin>myisamchk
myisamchk Ver 2.6 for Win95/Win98 at i32
By Monty, for your professional use
This software comes with NO WARRANTY: see the PUBLIC for details.
Description, check and repair of ISAM tables.
Used without options all tables on the command will be checked for errors
Usage: myisamchk [OPTIONS] tables[.MYI]
Global options:
-#, --debug=... Output debug log. Often this is 'd:t:o,filename'
-?, --help Display this help and exit.
-O, --set-variable var=option
Change the value of a variable. Please note that
this option is deprecated; you can set variables
directly with '--variable-name=value'.
-t, --tmpdir=path Path for temporary files
-s, --silent Only print errors. One can use two -s to make
myisamchk very silent
-v, --verbose Print more information. This can be used with
--description and --check. Use many -v for more verbosity!
-V, --version Print version and exit.
-w, --wait Wait if table is locked.
Check options (check is the default action for myisamchk):
-c, --check Check table for errors
-e, --extend-check Check the table VERY throughly. Only use this in
extreme cases as myisamchk should normally be able to
find out if the table is ok even without this switch
-F, --fast Check only tables that haven't been closed properly
-C, --check-only-changed
Check only tables that have changed since last check
-f, --force Restart with '-r' if there are any errors in the table.
States will be updated as with '--update-state'
-i, --information Print statistics information about table that is checked
-m, --medium-check Faster than extend-check, but only finds 99.99% of
all errors. Should be good enough for most cases
-U --update-state Mark tables as crashed if you find any errors
-T, --read-only Don't mark table as checked
Repair options (When using '-r' or '-o')
-B, --backup Make a backup of the .MYD file as 'filename-time.BAK'
--correct-checksum Correct checksum information for table.
-D, --data-file-length=# Max length of data file (when recreating data
file when it's full)
-e, --extend-check Try to recover every possible row from the data file
Normally this will also find a lot of garbage rows;
Don't use this option if you are not totally desperate.
-f, --force Overwrite old temporary files.
-k, --keys-used=# Tell MyISAM to update only some specific keys. # is a
bit mask of which keys to use. This can be used to
get faster inserts!
-r, --recover Can fix almost anything except unique keys that aren't
unique.
-n, --sort-recover Forces recovering with sorting even if the temporary
file would be very big.
-p, --parallel-recover
Uses the same technique as '-r' and '-n', but creates
all the keys in parallel, in different threads.
THIS IS ALPHA CODE. USE AT YOUR OWN RISK!
-o, --safe-recover Uses old recovery method; Slower than '-r' but can
handle a couple of cases where '-r' reports that it
can't fix the data file.
--character-sets-dir=...
Directory where character sets are
--set-character-set=name
Change the character set used by the index
-q, --quick Faster repair by not modifying the data file.
One can give a second '-q' to force myisamchk to
modify the original datafile in case of duplicate keys
-u, --unpack Unpack file packed with myisampack.
Other actions:
-a, --analyze Analyze distribution of keys. Will make some joins in
MySQL faster. You can check the calculated distribution
by using '--description --verbose table_name'.
-d, --description Prints some information about table.
-A, --set-auto-increment[=value]
Force auto_increment to start at this or higher value
If no value is given, then sets the next auto_increment
value to the highest used value for the auto key + 1.
-S, --sort-index Sort index blocks. This speeds up 'read-next' in
applications
-R, --sort-records=#
Sort records according to an index. This makes your
data much more localized and may speed up things
C:mysqlin>myisamchk c:mysqldatahw_enterpricefunction_products.frm
myisamchk: error: 'c:mysqldatahw_enterpricefunction_products.frm' is not a M
yISAM-table
C:mysqlin>myisamchk c:mysqldatahw_enterpricefunction_products.myi
Checking MyISAM file: c:mysqldatahw_enterpricefunction_products.myi
Data records: 85207 Deleted blocks: 39
myisamchk: warning: Table is marked as crashed
myisamchk: warning: 1 clients is using or hasn't closed the table properly
- check file-size
- check key delete-chain
- check record delete-chain
myisamchk: error: record delete-link-chain corrupted
- check index reference
- check data record references index: 1
- check data record references index: 2
- check data record references index: 3
- check record links
myisamchk: error: Wrong bytesec: 0-195-171 at linkstart: 841908
MyISAM-table 'c:mysqldatahw_enterpricefunction_products.myi' is corrupted
Fix it using switch "-r" or "-o"
繼續(xù)進(jìn)行操作:
C:mysqlin>myisamchk --recover --quick c:mysqldatahw_enterpricefunction_p
roducts.myi
- check key delete-chain
- check record delete-chain
myisamchk: error: record delete-link-chain corrupted
myisamchk: error: Quick-recover aborted; Run recovery without switch 'q'
Updating MyISAM file: c:mysqldatahw_enterpricefunction_products.myi
MyISAM-table 'c:mysqldatahw_enterpricefunction_products.myi' is not fixed be
cause of errors
Try fixing it by using the --safe-recover (-o) or the --force (-f) option
系統(tǒng)提示我使用--safe-recover (-o) or the --force (-f) option進(jìn)行修復(fù)操作,于是
C:mysqlin>myisamchk --safe-recover c:mysqldatahw_enterpricefunction_prod
ucts.myi
- recovering (with keycache) MyISAM-table 'c:mysqldatahw_enterpricefunction_
products.myi'
Data records: 85207
Wrong bytesec: 0-195-171 at 841908; Skipped
Data records: 85215
將修復(fù)后的物理文件復(fù)制到mysqldata下之后,通過(guò)phpMyAdmin進(jìn)行訪問(wèn),OK正常!
本次數(shù)據(jù)修復(fù)操作成功,數(shù)據(jù)已被正常恢復(fù),總計(jì)85215條記錄,其中恢復(fù)數(shù)據(jù)共計(jì)85207條。
總結(jié)本次經(jīng)驗(yàn)及查找資料,如下:
當(dāng)你試圖修復(fù)一個(gè)被破壞的表的問(wèn)題時(shí),有三種修復(fù)類型。如果你得到一個(gè)錯(cuò)誤信息指出一個(gè)臨時(shí)文件不能建立,刪除信息所指出的文件并再試一次--這通常是上一次修復(fù)操作遺留下來(lái)的。
這三種修復(fù)方法如下所示:
% myisamchk --recover --quick /path/to/tblName
% myisamchk --recover /path/to/tblName
% myisamchk --safe-recover /path/to/tblName
第一種是最快的,用來(lái)修復(fù)最普通的問(wèn)題;而最后一種是最慢的,用來(lái)修復(fù)一些其它方法所不能修復(fù)的問(wèn)題。
檢查和修復(fù)MySQL數(shù)據(jù)文件
如果上面的方法無(wú)法修復(fù)一個(gè)被損壞的表,在你放棄之前,你還可以試試下面這兩個(gè)技巧:
如
果你懷疑表的索引文件(*.MYI)發(fā)生了不可修復(fù)的錯(cuò)誤,甚至是丟失了這個(gè)文件,你可以使用數(shù)據(jù)文件(*.MYD)和數(shù)據(jù)格式文件(*.frm)重新生
成它。首先制作一個(gè)數(shù)據(jù)文件(tblName.MYD)的拷貝。重啟你的MySQL服務(wù)并連接到這個(gè)服務(wù)上,使用下面的命令刪除表的內(nèi)容:
mysql> DELETE FROM tblName;
在
刪除表的內(nèi)容的同時(shí),會(huì)建立一個(gè)新的索引文件。退出登錄并重新關(guān)閉服務(wù),然后用你剛才保存的數(shù)據(jù)文件(tblName.MYD)覆蓋新的(空)數(shù)據(jù)文件。
最后,使用myisamchk執(zhí)行標(biāo)準(zhǔn)的修復(fù)(上面的第二種方法),根據(jù)表的數(shù)據(jù)的內(nèi)容和表的格式文件重新生成索引數(shù)據(jù)。
如果你的表的格式文件
(tblName.frm)丟失了或者是發(fā)生了不可修復(fù)的錯(cuò)誤,但是你清楚如何使用相應(yīng)的CREATE
TABLE語(yǔ)句來(lái)重新生成這張表,你可以重新生成一個(gè)新的.frm文件并和你的數(shù)據(jù)文件和索引文件(如果索引文件有問(wèn)題,使用上面的方法重建一個(gè)新的)一
起使用。首先制作一個(gè)數(shù)據(jù)和索引文件的拷貝,然后刪除原來(lái)的文件(刪除數(shù)據(jù)目錄下有關(guān)這個(gè)表的所有記錄)。
啟動(dòng)MySQL服務(wù)并使用當(dāng)初的CREATE TABLE文件建立一個(gè)新的表。新的.frm文件應(yīng)該可以正常工作了,但是最好你還是執(zhí)行一下標(biāo)準(zhǔn)的修復(fù)(上面的第二種方法)。
如果有類似問(wèn)題,建議自己先分析問(wèn)題根源,查找資料,自己動(dòng)手解決,不但可以多學(xué)更多知識(shí)技巧,更重要的是,自己也在解決問(wèn)題的同時(shí)得到了快樂(lè).
posted @ 2007-07-17 11:05 yuyu 閱讀(3381) | 評(píng)論 (0) | 編輯 收藏
|
|
IE & Netscape |
IE only |
1 |
居中 |
<center> OBJECT </center> |
|
2 |
form element 使用 |
所有<input>等要引用的元素,都放在一個(gè)<form></form>中 |
可以通過(guò)id直接訪問(wèn),不通過(guò)form |
3 |
元素的引用方法1 |
document.form_name.element_name document.form_name.element_name[i] document.form_name.elements[element_name] |
form_name.element_name form_name.all(element_name) form_name.elements(element_name) element_id |
4 |
全選文本框 |
document.form_name.textbox_name.focus() document.form_name.textbox_name.select() 注意:netscape6.1以上版本,可以不先f(wàn)ocus |
document.form_name.textbox_name.select() (netscape中必須先f(wàn)ocus) |
5 |
Table |
<table><tr><td><th>都有完整的結(jié)束標(biāo)記</table></tr></td></th> |
缺少一些沒(méi)有關(guān)系 |
6 |
根據(jù)名字索引 |
無(wú)document.all,這是造成大部分javascript函數(shù)不能使用的原因;
document.getElementById(id) 可用,但是只是支持id,不支持按name索引
(如果要同時(shí)用element_name or id 索引,可以考慮使用util.asp加入的新函數(shù): document_all(element_name_or_id) 見(jiàn)使用示例1) 注意:netscape4.8不支持document. GetElementById和document.all |
document.all(element_name_or_id)
|
7 |
關(guān)于CSS |
class=class_name (class_name區(qū)分大小寫(xiě), 而且不支持BORDER-COLLAPSE: collapse,這是造成界面難看的主要原因) .css中的第一個(gè)類不起作用 |
class=class_name(class_name不區(qū)分大小寫(xiě)) |
8 |
|
低版本javascript中switch的能力很差,不支持變量case 注意:我測(cè)過(guò)nerscapte6.1以上版本,支持case |
|
9 |
元素引用2 |
引用元素的id時(shí),區(qū)分大小寫(xiě) |
引用元素的id時(shí),不區(qū)分大小寫(xiě) |
10 |
Cursor顯示手形 |
Cursor: pointer (ie6支持pointer; ie5以下不支持pointer) |
Cursor: hand |
11 |
innerText |
用innerHTML代替innerText netscape6.0+不支持innerText |
|
12 |
<Caption align=left></caption>(table的屬性) |
對(duì)于netscape,Caption出現(xiàn)在table的左側(cè),如附圖1 |
對(duì)于ie,Caption出現(xiàn)在table的上方左側(cè), 如附圖2 |
13 |
<col> |
對(duì)于netscape,<col>的顯示屬性不會(huì)影響到所對(duì)應(yīng)的其他列 |
對(duì)于ie,<col>的顯示屬性會(huì)影響到所對(duì)應(yīng)的其他列 |
14 |
元素引用3 |
元素不是在form內(nèi)時(shí),引用元素使用document.getElementById("tblRole"). |
Window.tblRole在ie可以. |
15 |
自定義屬性的使用. |
有些界面上使用如<tr prj_code=’’>這樣的自定義屬性方式來(lái)保存值,netscape不支持tr.prj_code取值.需用objElm.attributes.getNamedItem(strAtrName).value. 注意:util.asp里已經(jīng)寫(xiě)了function GetElementAttribute(objElm,strAtrName),可以直接調(diào)用. |
Tr.prj_code可以取到值. |
16 |
事件event及取事件源元素 |
Netscape用”事件.target”而不支持event. SrcElement取事件源元素. Netscape也不能用event直接得到事件,可以考慮以“觸發(fā)事件時(shí)將event傳到javascript的方式得到事件”. 注意:util.asp里已經(jīng)寫(xiě)了event_SrcElement(ObjEvent)來(lái)獲得事件源元素. 觸發(fā)事件的方法如: <input type=button onclick=”invokeClick(event);”> |
Event. SrcElement |
17 |
Form |
NetScape中必須使用document.FormName, |
IE中可以使用document.FormName和 Window.FormName |
18 |
對(duì)表格的操作 |
TableId.rows[i].cells[i].childNodes[i] Netscpate里不能使用 ( ) |
TableId.rows[i].cells[i].childNodes[i] TableId.rows(i).cells(i).childNodes(i) |
19 |
TableId.rows[i].cells[i].childNodes[i].length不同的問(wèn)題
|
子節(jié)點(diǎn)類型有2種,一種是element node;(nodeType=1),另一種是text node(nodeType = 3),可以遍歷所有子節(jié)點(diǎn),把所有的text node刪掉,也可以修改html代碼,把多余的空格刪掉 方法一: var tbl1 = document.getElementById(“table1”); for (I=0;I<tbl1.childNodes.length) { var temp = tbl1.childNodes[i]; if (temp.nodeType == 3) { tbl1.removeChild(temp); } } |
|
20 |
parentElement |
ParentNode Netscape中不能使用parentElement |
ParentElement parentNode |
21 |
SrcElement |
IE用srcElement,netscape用target, ie不能用target |
|
22 |
Children,childNodes |
ChildNodes |
Children,childNodes |
23 |
Radiobutton在netscape中出現(xiàn)可以多選的問(wèn)題 |
必須把radiobutton放入<form></form>中 |
|
24 |
Msxml.dll |
NETSCAPE: VarxmlDoc= document.implementation.createDocument("","",null);
var xmlServerHttp = new XMLHttpRequest();
|
IE: var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
var xmlServerHttp = new ActiveXObject("Msxml2.XMLHTTP"); |
Ie 支持:xmlDoc.load(filename) 和 xmlDoc.loadXML(string) NS只支持xmlDoc.load(filename)方法
if (navigator.appName =="Microsoft Internet Explorer") //IE { var xmlDoc = new ActiveXObject("Msxml2.DOMDocument"); var xmlServerHttp = new ActiveXObject("Msxml2.XMLHTTP"); xmlDoc.async = false; xmlDoc.loadXML(xmlStr); xmlServerHttp.open("POST",toUrl, false); xmlServerHttp.send(xmlStr); re = xmlServerHttp.responseText; } else { var xmlDoc = document.implementation.createDocument("","",null); var xmlServerHttp = new XMLHttpRequest(); var DOM = new DOMParser(); xmlDoc.async = false; var DOMdoc = DOM.parseFromString(xmlStr,"text/xml"); xmlDoc.load(DOMdoc); xmlServerHttp.open("POST",toUrl, false); xmlServerHttp.send(DOMdoc); re = xmlServerHttp.responseText; } SponOrgXMLforUpdate1 = “<sponsor_org name=’zwh’ age=’22’ />” if (navigator.appName =="Microsoft Internet Explorer") //IE { var xmlDoc = new ActiveXObject("Msxml2.DOMDocument"); xmlDoc.async=false; xmlDoc.loadXML(SponOrgXMLforUpdate1); node = xmlDoc.selectSingleNode("http://sponsor_org"); } else { var DOM = new DOMParser(); var xmlDoc = DOM.parseFromString(SponOrgXMLforUpdate1, 'text/xml'); var node = xmlDoc.getElementsByTagName('sponsor_org')[0]; } |
|||
|
|||
25 |
<tr id=”tr1” a=”a1” b=”b1”> |
取值: tr1.attributes.getNamedItem("a ").value tr1.attributes.getNamedItem("b ").value 賦值或者設(shè)置屬性 tr1.setAttribute(“a”,”a1”) tr1.setAttribute(“b”,”b1”);
|
Tr1.a Tr1.b |
26 |
給下來(lái)框新增一個(gè)option |
Var newOpt =new Option(text,value,false,false); Select.options[Select.options.length] = newopt; |
var oOption = document.createElement("OPTION"); oOption.text="" ; oOption.value=""; Select.add(oOption); |
27 |
刪除下拉框的某個(gè)option |
Select.options[i] = null; |
Select.options[i] = null; Select.options.remove(i); |
轉(zhuǎn)自 http://tb.blog.csdn.net/TrackBack.aspx?PostId=250206
posted @ 2007-06-19 11:41 yuyu 閱讀(363) | 評(píng)論 (1) | 編輯 收藏





















































































posted @ 2007-06-12 17:26 yuyu 閱讀(2672) | 評(píng)論 (1) | 編輯 收藏
產(chǎn)生驗(yàn)證碼圖片的文件-----image.jsp
<%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %> <%! Color getRandColor(int fc,int bc){//給定范圍獲得隨機(jī)顏色 Random random = new Random(); if(fc>255) fc=255; if(bc>255) bc=255; int r=fc+random.nextInt(bc-fc); int g=fc+random.nextInt(bc-fc); int b=fc+random.nextInt(bc-fc); return new Color(r,g,b); } %> <% //設(shè)置頁(yè)面不緩存 response.setHeader("Pragma","No-cache"); response.setHeader("Cache-Control","no-cache"); response.setDateHeader("Expires", 0); // 在內(nèi)存中創(chuàng)建圖象 int width=60, height=20; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 獲取圖形上下文 Graphics g = image.getGraphics(); //生成隨機(jī)類 Random random = new Random(); // 設(shè)定背景色 g.setColor(getRandColor(200,250)); g.fillRect(0, 0, width, height); //設(shè)定字體 g.setFont(new Font("Times New Roman",Font.PLAIN,18)); //畫(huà)邊框 //g.setColor(new Color()); //g.drawRect(0,0,width-1,height-1); // 隨機(jī)產(chǎn)生155條干擾線,使圖象中的認(rèn)證碼不易被其它程序探測(cè)到 g.setColor(getRandColor(160,200)); for (int i=0;i<155;i++) { int x = random.nextInt(width); int y = random.nextInt(height); int xl = random.nextInt(12); int yl = random.nextInt(12); g.drawLine(x,y,x+xl,y+yl); } // 取隨機(jī)產(chǎn)生的認(rèn)證碼(4位數(shù)字) String sRand=""; for (int i=0;i<4;i++){ String rand=String.valueOf(random.nextInt(10)); sRand+=rand; // 將認(rèn)證碼顯示到圖象中 g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//調(diào)用函數(shù)出來(lái)的顏色相同,可能是因?yàn)榉N子太接近,所以只能直接生成 g.drawString(rand,13*i+6,16); } // 將認(rèn)證碼存入SESSION session.setAttribute("rand",sRand); // 圖象生效 g.dispose(); // 輸出圖象到頁(yè)面 ImageIO.write(image, "JPEG", response.getOutputStream()); %> |
---------------使用驗(yàn)證碼圖片的文件---------a.jsp------------------------------------
<%@ page contentType="text/html;charset=gb2312" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>認(rèn)證碼輸入頁(yè)面</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"> <META HTTP-EQUIV="Expires" CONTENT="0"> </head> <body> <form method=post action="check.jsp"> <table> <tr> <td align=left>系統(tǒng)產(chǎn)生的認(rèn)證碼:</td> <td><img border=0 src="image.jsp"></td> </tr> <tr> <td align=left>輸入上面的認(rèn)證碼:</td> <td><input type=text name=rand maxlength=4 value=""></td> </tr> <tr> <td colspan=2 align=center><input type=submit value="提交檢測(cè)"></td> </tr> </form> </body> </html> |
-----------------驗(yàn)證的頁(yè)面----------check.jsp
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %> <html> <head> <title>認(rèn)證碼驗(yàn)證頁(yè)面</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"> <META HTTP-EQUIV="Expires" CONTENT="0"> </head> <body> <% String rand = (String)session.getAttribute("rand"); String input = request.getParameter("rand"); %> 系統(tǒng)產(chǎn)生的認(rèn)證碼為: <%= rand %><br> 您輸入的認(rèn)證碼為: <%= input %><br> <br> <% if (rand.equals(input)) { %> <font color=green>輸入相同,認(rèn)證成功!</font> <% } else { %> <font color=red>輸入不同,認(rèn)證失敗!</font> <% } %> </body> </html> |
原文:http://www.cnblogs.com/maxwoods/archive/2007/04/11/709002.html
posted @ 2007-05-15 15:54 yuyu| 編輯 收藏