ADSL撥號中出現的錯誤代碼
Error 602 The port is already open
問題:撥號網絡網絡由于設備安裝錯誤或正在使用,不能進行連接
原因:RasPPPoE沒有完全和正確的安裝
解決:卸載干凈任何PPPoE軟件,重新安裝
Error 605 Cannot set port information
問題:撥號網絡網絡由于設備安裝錯誤不能設定使用端口
原因:RasPPPoE沒有完全和正確的安裝
解決:卸載干凈任何PPPoE軟件,重新安裝
Error 606 The port is not connected
問題:撥號網絡網絡不能連接所需的設備端口
原因:RasPPPoE沒有完全和正確的安裝,連接線故障,ADSL MODEM故障
解決:卸載干凈任何PPPoE軟件,重新安裝,檢查網線和 ADSL MODEM
Error 608 The device does not exist
問題:撥號網絡網絡連接的設備不存在
原因:RasPPPoE沒有完全和正確的安裝
解決:卸載干凈任何PPPoE軟件,重新安裝
Error 609 The device type does not exist
問題:撥號網絡網絡連接的設備其種類不能確定
原因:RasPPPoE沒有完全和正確的安裝
解決:卸載干凈任何PPPoE軟件,重新安裝
Error 611 The route is not available/612 The route is not allocated
問題:撥號網絡網絡連接路由不正確
原因:RasPPPoE沒有完全和正確的安裝,ISP服務器故障
解決:卸載干凈任何PPPoE軟件,重新安裝,致電ISP詢問
Error 617 The port or device is already disconnecting
問題:撥號網絡網絡連接的設備已經斷開
原因:RasPPPoE沒有完全和正確的安裝,ISP服務器故障,連接線,ADSL MODEM故障
解決:卸載干凈任何PPPoE軟件,重新安裝,致電ISP詢問 ,檢查網線和 ADSL MODEM
Error 619
問題:與ISP服務器不能建立連接
原因:ADSL ISP服務器故障,ADSL電話線故障
解決:檢查ADSL信號燈是否能正確同步。致電ISP詢問
Error 621 Cannot open the phone book file
Error 622 Cannot load the phone book file
Error 623 Cannot find the phone book entry
Error 624 Cannot write the phone book file
Error 625 Invalid information found in the phone book
問題:Windows NT或者Windows 2000 Server網絡RAS網絡組件故障
原因:軟件安裝問題
解決:卸載所有PPPoE軟件,重新安裝RAS網絡組件和RasPPPoE
Error 630
問題:ADSL MODEM沒有沒有響應
原因:ADSL電話線故障,ADSL MODEM故障(電源沒打開等)
解決:檢查ADSL設備
Error 633
問題:撥號網絡網絡由于設備安裝錯誤或正在使用,不能進行連接
原因:RasPPPoE沒有完全和正確的安裝
解決:卸載干凈任何PPPoE軟件,重新安裝
Error 638
問題:過了很長時間,無法連接到ISP的ADSL接入服務器
原因:ISP服務器故障;在RasPPPoE所創建的不好連接中你錯誤的輸入了一個電話號碼
解決:運行其創建撥號的Raspppoe.exe檢查是否能列出ISP服務,以確定ISP正常;把所使用的撥號連接中的 電話號碼清除或者只保留一個0。
Error 645
問題:網卡沒有正確響應
原因:網卡故障,或者網卡驅動程序故障
解決:檢查網卡,重新安裝網卡驅動程序
Error 650
問題:遠程計算機沒有響應,斷開連接
原因:ADSL ISP服務器故障,網卡故障,非正常關機造成網絡協議出錯
解決:檢查ADSL信號燈是否能正確同步,致電ISP詢問;檢查網卡,刪除所有網絡組件重新安裝 網絡。
Error 651
問題:ADSL MODEM報告發生錯誤
原因:Windows處于安全模式下,或其他錯誤
解決:出現該錯誤時,進行重撥,就可以報告出新的具體錯誤代碼
Error 691
問題:輸入的用戶名和密碼不對,無法建立連接
原因:用戶名和密碼錯誤,ISP服務器故障
解決:使用正確的用戶名和密碼,并且使用正確的ISP賬號格式(name@service),致電ISP詢問。
Error 718
問題:驗證用戶名時遠程計算機超時沒有響應,斷開連接
原因:ADSL ISP服務器故障
解決:致電ISP詢問
Error 720
問題:撥號網絡無法協調網絡中服務器的協議設置
原因:ADSL ISP服務器故障,非正常關機造成網絡協議出錯
解決:致電ISP詢問,刪除所有網絡組件重新安裝網絡。
Error 734
問題:PPP連接控制協議中止
原因:ADSL ISP服務器故障,非正常關機造成網絡協議出錯
解決:致電ISP詢問,刪除所有網絡組件重新安裝網絡。
Error 738
問題:服務器不能分配IP地址
原因:ADSL ISP服務器故障,ADSL用戶太多超過ISP所能提供的IP地址
解決:致電ISP詢問
Error 797
問題:ADSL MODEM連接設備沒有找到
原因:ADSL MODEM電源沒有打開,網卡和ADSL MODEM的連接線出現問題,軟件安裝以后相應的協議沒有正確邦定,在創立撥號連接時,建立了錯誤的空連接
解決:檢查電源,連接線;檢查網絡屬性,RasPPPoE相關的協議是否正確的安裝并正確邦定(相關協議),檢查網卡是否出現?號或!號,把它設置為Enable;檢查撥號連接的屬性,是否連接的設備使用了一個“ISDN channel-Adapter Name(xx)” 的設備,該設備為一個空設備,如果使用了取消它,并選擇 正確的PPPoE設備代替它,或者重新創立撥號連接。
posted @
2008-10-06 13:47 礦礦 閱讀(131) |
評論 (0) |
編輯 收藏
“高效”有時候并不需要什么技巧,很多人在抱怨沒有足夠時間的時候,其中的潛臺詞是他們應該更專心。時間對每個人都是公平的,你需要的是不要浪費時間,并且專心。
防止浪費時間的竅門
If the real work that needs doing is offline, disable the internet for an hour at a time.
如果這件事情不需要上網就可以完成,把網斷掉。
Turn email checks into an hourly habit, not an “as the box gets mail” habit.
延長查看電子郵件的周期。
Don’t answer your cell phone when working on something important. Call back later.
如果手頭的工作很重要,工作期間不要接電話,回頭再打過去就是了。
If you can’t work at work, negotiate finding a new place to get things done.
如果你的工作環境讓你不能工作,換個沒人打擾的地方
Television means: “I don’t need this time and it doesn’t matter to me.” (Almost always. Really.)
看電視意味著“這段時間我浪費了也無所謂”。
Bugdet your entertainment time vs. production time. Never cheat the other.
平衡你的娛樂和工作時間。
Examine every opportunity along the lines of time vs. projects already underway.
時時檢查你的時間安排和現在已經進行中的項目。
Try working part of your day in “off-hour” times, to get more done with fewer people around.
以小時為單位劃分你的工作時間,用更少的人做更多的事情。
專心的竅門
Write your goals clearly. Post them in eyeball view of where you work most.
清楚的寫下你的目標。放在你的眼皮底下。
Spend time with focused people. Meet and befriend those who are where you want to be.
多和專心工作的人在一起。
Consume as much material about your prime focus as you can budget.
盡量把資源用在主要目標上,把時間花在刀刃上。
Analyze your past experiences. Be clear. List your successes. Examine your failures.
回顧總結以往的成功和失敗經驗。
Stay true to a particular vision of what you want to do.
清楚明白你想要得到的是什么。
Don’t give up too early.
不要太容易放棄。
Envision your success. Write about it. Then read that daily or weekly.
想象一下成功后的樣子,寫下來,每天讀讀。
Learn how to “chunk.” Hit each milestone and move to the next. Be methodical.
學會把大事劃分為幾個階段,完成一個階段,再進入下一個。
Develop habits around success and drive.
養成好習慣。
Recharge your batteries with good sleep and food.
吃好睡足。
Develop your relationship with your family. It nourishes the other goals.
維持家庭關系。這是你完成其它工作的保障。
posted @
2008-09-12 18:24 礦礦 閱讀(149) |
評論 (1) |
編輯 收藏
1、不說“不可能”三個字;
2、凡事第一反應:找方法,而不是找借口;
3、遇到挫折對自己大聲說:太棒了;
4、不說消極的話,不落入消極情緒,一旦出現立即正面處理;
5、凡事先訂立目標,并且盡量制作“夢想版”;
6、凡事預先作計劃,盡量前目標視覺化;
7、六點優先工作制,每一分,每一秒做生產力的事情;
8、隨時用零碎的時間(如等人、排隊等)做零碎的小活;
9、守時;
10、寫下來,不要太依靠腦袋記憶;
11、隨時記錄靈感;
12、把重要的觀念、方法寫下來,并貼起來,以隨時提示自己;
13、走路比平時快30%。走路時,腳尖稍用力推進;肢體語言健康有力,不懶散;
14、每天出門照鏡子,給自己一個自信的笑容;
15、每天自我反省一次;
16、每天堅持一次運動;
17、聽心跳1分鐘。指在做重要事前,疲勞時,心情煩燥時,緊張時;
18、開會坐在前排;
19、微笑;
20、用心傾聽,不打斷對方說話;
21、說話時,聲音有力。感覺自己聲音似乎能產生有感染力的磁場;
22、同理心。說話之前,先考慮一下對方的感覺;
23、每天有意識、真誠地贊美別人三次以上;
24、及時寫感謝卡,哪怕是用便條寫;
25、不用訓斥、指責的口吻跟別人說話;
26、控制住不要讓自己做出為自己辯護的第一反應;
27、每天多做一件“分外事”
28、不管任何方面,每天必須至少做一次“進步一點點”;
29、每天提前15分鐘上班,推遲30分鐘下班;
30、每天在下班前5分鐘的時間做一天的整理性工作;
31、定期存錢;
32、節儉;
posted @
2008-09-12 18:23 礦礦 閱讀(121) |
評論 (0) |
編輯 收藏
新華網北京5月20日電(記者 隋笑飛楊維漢)這次地震前,中國地震局沒有作出短臨預報,同時也沒有收到任何單位、個人或團體提交的有關這次地震的短臨預報意見。至于網上發布曾經有人提出過關于這次地震的預報意見的信息,是不符合實際的。中國地震局對于個人或團體的地震短臨預報意見,有專門的管理辦法和處理程序。中國地震局監測預報司是具體負責這項工作的部門。
20日上午,中國地震局監測預報司副司長車時接受中國地震信息網專訪時作上述表示。
車時同時介紹了中國地震局對個人或團體的地震短臨預報意見的管理辦法。他說,中國地震局監測預報司從20世紀80年代后期開始對個人、學術團體的短臨地震預報意見實施管理,具體管理工作由中國地震臺網中心統一管理。具體辦法是,指定專門的地震預報專家管理個人、學術團體等提出的短臨預報意見。由專家收集、整理,并及時在地震部門的周、月會商中,介紹預測意見的主要依據、結論等,供震情跟蹤判定時參考。每年年底,對一年中的所有短臨預報意見進行評估,對其中預報準確或預報效果較好的給予獎勵。
車時還指出,中國防震減災法和地震預報管理條例中,有關于地震短臨預報的明確規定。防震減災法第十六條規定:國家對地震預報實行統一發布制度。地震短期預報和臨震預報,由省、自治區、直轄市人民政府按照國務院規定的程序發布。任何單位或者從事地震工作的專業人員關于短期地震預測或者臨震預測的意見,應當報國務院地震行政主管部門或者縣級以上地方人民政府負責管理地震工作的部門或者機構按照前款處理,不得擅自向社會擴散。
車時表示,地震預報管理條例規定,國家鼓勵和扶持地震預報的科學技術研究。中國地震局監測預報司本著對人民、對國家高度負責的態度,嚴格遵照該規定,支持地震預報科學研究,高度重視個人和團體提出的短臨預測意見,但是對這些預測意見的處理是有嚴格程序的,要組織專家按照有關規定對預測意見的科學性和可能性進行審定。同時,由于地震預報既具有科學性,又具有社會性,政府發布地震預測意見是非常慎重的。
關于個人或團體有了地震預報意見后應如何提交給地震部門的問題,車時表示,任何單位和個人根據地震觀測資料和研究成果,提出了短臨地震預測意見,可向所在地或者所預測地區的縣級以上地方人民政府負責管理地震工作的機構提出書面報告,也可以直接向國務院地震工作主管部門書面報告。但是,不得向社會散布。并且,任何單位和個人不得向國(境)外提出地震預測意見。個人或團體對地震活動趨勢的長期和中期預測研究成果除外,可以進行學術交流討論。
車時還談了個人或團體提交的地震短臨預報意見的具體情況。他說,現在有很多個人或團體開展地震預報探索,每年都收到幾十至上百份的正式短臨預報意見。但是,當前地震預報是公認的世界科學難題,總體水平是很低的。準確的短臨預報意見是非常少的,2000年以來,中國地震臺網中心(前分析預報中心)共收到700多份地震短臨預報意見,其中基本上準確的預報意見有7份。2008年以來,共收到26份短臨預報意見,尚沒有正確預報的短臨預報意見。盡管這些意見的準確性非常低,但作為地震主管部門,根據有關法律,歡迎和鼓勵個人和團體繼續開展地震預報探索。
posted @
2008-05-21 13:18 礦礦 閱讀(113) |
評論 (0) |
編輯 收藏
package Pro123;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class Demo extends JFrame{
/**
*
*/
private static final long serialVersionUID = 1L;
JOptionPane pane1 = new JOptionPane();
JFrame frame = new JFrame();
Container contentPane = frame.getContentPane();
JLabel Message = new JLabel("請輸入郵箱和密碼");
//用戶名、密碼以及其輸入框
JLabel Name = new JLabel("用戶名");
JLabel Password = new JLabel("密 碼");
JTextField tName = new JTextField(12);
JPasswordField pPwd = new JPasswordField(12);
//按扭
JButton btnDl = new JButton("登陸");
JButton btnCz = new JButton("重置");
JPanel pToppane = new JPanel();
JPanel pCenterpane = new JPanel();
JPanel pCenterpaneName = new JPanel();
JPanel pCenterpanePwd = new JPanel();
JPanel pButton = new JPanel();
Demo(){
this.setTitle("郵件登陸");//窗口標題
//以下為加入面版
pCenterpaneName.add(Name);
pCenterpaneName.add(tName);
pCenterpanePwd.add(Password);
pCenterpanePwd.add(pPwd);
pCenterpane.add(pCenterpaneName,"North");
pCenterpane.add(pCenterpanePwd,"South");
pToppane.add(Message);
pButton.add(btnDl);
pButton.add(btnCz);
btnDl.addActionListener(new neibu1());
btnCz.addActionListener(new neibu2());
add(pToppane,"North");
add(pCenterpane,"Center");
add(pButton,"South");
this.setSize(250,180);//設置大小
this.setVisible(true);//設置可見
setResizable(false);//禁止拉動窗口大小
//居中窗口
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
setLocation((screen.width - getSize().width)/2,(screen.height - getSize().height)/2 );
// this.setDefaultCloseOperation(3);//關閉窗口
this.addWindowListener(new WindowClose());
}
//對郵箱的輸入格式進行判斷
public boolean validateEmailName(String name){
String emailName = name.substring(0,name.indexOf('@'));
boolean booFormat = true;
int temp = -1;
for(int i=0;i<emailName.length();i++){
temp = name.charAt(i);
A:if(temp<65){
if(temp>48 && temp<57)
break A;
booFormat = false;
break;
}
B:if(temp>90 && temp<97){
if(temp == 95)
break B;
booFormat = false;
break;
}
}
return booFormat;
}
//郵箱檢測
public boolean validateStationName(String name){
String stationName = name.substring(name.indexOf('@')+1);
boolean boo = true;
if(stationName.indexOf('.') == -1){
boo = false;
}else if(stationName.indexOf('.') == 0){
boo = false;
}
return boo;
}
//事件
class neibu1 implements ActionListener {
public void actionPerformed(ActionEvent e){
String name = tName.getText().trim();
String password = new String(pPwd.getPassword()).trim();
int first = 0;
@SuppressWarnings("unused")
boolean booFromat = false;
boolean boo = false;
boolean booFormat = false;
if(name.length()>0){
first = name.charAt(0);
if(name.indexOf("@")!= -1){
booFormat = validateEmailName(name);
boo = validateStationName(name);
}
}
if(name.equals("")){
Message.setForeground(Color.red);
Message.setText("請輸入郵箱");
// tName.setText("");//清空輸入內容
pPwd.setText("");//清空輸入內容
tName.grabFocus();
}else if(name.indexOf("@")== -1){
Message.setForeground(Color.red);
Message.setText("您輸入郵箱格式錯誤,不包含“@”");
//tName.setText("");
pPwd.setText("");//清空輸入內容
tName.grabFocus();
}else if(first<65 || (first>90 && first <97)||first>122){
Message.setForeground(Color.red);
Message.setText("郵箱首字母應為英文字母");
// tName.setText("");
pPwd.setText("");//清空輸入內容
tName.grabFocus();
}else if(!booFormat){
Message.setForeground(Color.red);
Message.setText("郵箱名不和法:只能包含字母、數字、下劃線");
//tName.setText("");
pPwd.setText("");//清空輸入內容
tName.grabFocus();
}else if(!boo){
Message.setForeground(Color.red);
Message.setText("郵箱后綴不和法");
//tName.setText("");
pPwd.setText("");//清空輸入內容
tName.grabFocus();
}else if(password.equals("")){
Message.setForeground(Color.red);
Message.setText("密碼不能為空");
pPwd.setText("");//清空輸入內容
pPwd.grabFocus();
}else if(password.length()<6){
Message.setForeground(Color.red);
Message.setText("密碼必須為6位,請檢查后重新輸入");
pPwd.setText("");//清空輸入內容
pPwd.grabFocus();
}else if(name.equals("java@svse.com")&&password.equals("jackrose")){
Message.setForeground(Color.blue);
Message.setText("歡迎"+name+"登陸");
}else{
Message.setForeground(Color.red);
Message.setText("郵箱或密碼錯誤!請重新輸入!");
pPwd.setText("");//清空輸入內容
tName.grabFocus();
}
}
}
// 重置鍵清空輸入內容
class neibu2 implements ActionListener {
public void actionPerformed(ActionEvent e){
pPwd.setText("");
tName.setText("");
}
}
class WindowClose extends WindowAdapter{
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
//MAIN方法
public static void main(String[]args){
new Demo();
}
}
posted @
2008-05-20 18:11 礦礦 閱讀(1126) |
評論 (3) |
編輯 收藏
字符串
1、獲取字符串的長度
length()
2 、判斷字符串的前綴或后綴與已知字符串是否相同
前綴 startsWith(String s)
后綴 endsWith(String s)
3、比較兩個字符串
equals(String s)
4、把字符串轉化為相應的數值
int型 Integer.parseInt(字符串)
long型 Long.parseLong(字符串)
float型 Folat.valueOf(字符串).floatValue()
double型 Double.valueOf(字符串).doubleValue()
4、將數值轉化為字符串
valueOf(數值)
5、字符串檢索
indexOf(Srting s) 從頭開始檢索
indexOf(String s ,int startpoint) 從startpoint處開始檢索
如果沒有檢索到,將返回-1
6、得到字符串的子字符串
substring(int startpoint) 從startpoint處開始獲取
substring(int start,int end) 從start到end中間的字符
7、替換字符串中的字符,去掉字符串前后空格
replace(char old,char new) 用new替換old
trim()
8、分析字符串
StringTokenizer(String s) 構造一個分析器,使用默認分隔字符(空格,換行,回車,Tab,進紙符)
StringTokenizer(String s,String delim) delim是自己定義的分隔符
nextToken() 逐個獲取字符串中的語言符號
boolean hasMoreTokens() 只要字符串還有語言符號將返回true,否則返回false
countTokens() 得到一共有多少個語言符號
文本框和文本區
1、文本框
TextField() 構造文本框,一個字符長
TextField(int x) 構造文本框,x個字符長
TextField(String s) 構造文本框,顯示s
setText(String s) 設置文本為s
getText() 獲取文本
setEchoChar(char c) 設置顯示字符為c
setEditable(boolean) 設置文本框是否可以被修改
addActionListener() 添加監視器
removeActionListener() 移去監視器
2、文本區
TextArea() 構造文本區
TextArea(String s) 構造文本區,顯示s
TextArea(String s,int x,int y) 構造文本區,x行,y列,顯示s
TextArea(int x,int y) 構造文本區,x行,y列
TextArea(String s,int x,ing y,int scrollbar)
scrollbar的值是:
TextArea.SCROLLBARS_BOTH
TextArea.SCROLLBARS_VERTICAL_ONLY
TextArea.SCROLLBARS_HORIZONTAL_ONLY
TextArea.SCROLLBARS_NONE
setText(String s) 設置文本為s
getText() 獲取文本
addTextListener() 添加監視器
removeTextListener() 移去監視器
insert(String s,int x) 在x處插入文本s
replaceRange(String s,int x,int y) 用s替換從x到y處的文本
append(String s) 在文本的最后追加文本s
Int getCaretPosition(int n) 獲取文本區中光標的位置
按鈕
1、按鈕
Button() 構造按鈕
Button(String s) 構造按鈕,標簽是s
setLabel(String s) 設置按鈕標簽是s
getLabel() 獲取按鈕標簽
addActionListener() 添加監視器
removeActionListener() 移去監視器
標簽
1、標簽
Label() 構造標簽
Label(String s) 構造標簽,顯示s
Label(String s,int x)
x是對齊方式,取值:
Label.LEFT
Label.RIGHT
Label.CENTER
setText(String s) 設置文本s
getText() 獲取文本
setBackground(Color c) 設置標簽背景顏色
setForeground(Color c) 設置字體顏色
選擇框
1、選擇框
Checkbox() 構造選擇框
Checkbox(String s) 構造選擇框,給定標題s
Checkbox(String s,boolean b) b設定初始狀態
Checkbox(String s,boolean b,CheckboxGroup g) g設定了所屬的組(有了組就成為單選框)
addItemListener() 添加監視器
removeItemListener() 移去監視器
getState() 返回選擇框的是否選中狀態
setState(boolean b) 設置選擇框的狀態
getLabel() 獲取選擇框的標題
setLabel(String s) 設置選擇框的標題為s
選擇控件和滾動列表
1、選擇控件
Choice() 構造選擇控件
add(String s) 向選擇控件增加一個選項
addItemListener() 添加監視器
removeItemListener() 移去監視器
getSelectedIndex() 返回當前選項的索引
getSelectedItem() 返回當前選項的字符串代表
insert(String s,int n) 在n處插入選項s
remove(int n)
removeAll()
2、滾動列表
List() 構造滾動列表
List(int n) 參數n是可見行數
List(int n,boolean b) 參數b是設置是否可以多項選擇
add(String s) 向列表的結尾增加一個選項
add(String s,int n) 在n處增加一個選項
AddActionListener() 滾動列表添加監視器
addItemListener() 滾動列表上的選項添加監視器
remove(int n) 刪除n初的選項
remnoveAll() 刪除全部選項
getSelectedIndex() 返回當前選項的索引
getSelectedItem() 返回當前選項的字符串代表
3、組件類的一些常用方法
void setBackground(Color c) 設置組件背景顏色
void setForeground(Color c) 設置組件前景顏色
void setFonts(Font f) 設置組件字體
void setBounds(int x,int y,int w,int h) 設置坐標,x,y表示在容器中坐標,w,h表示寬和高
void setLocation(int x,int y) 移動到x,y 處
void setSize(int w,int h) 設置寬和高
void setVisible(boolean b) 設置組建是否可見
int getBounds().wigth 獲取寬
int getBounds().height 獲取高
int getBounds().x 獲取x 坐標
int getBounds().y 獲取y 坐標
Toolkit getToolkit() 獲取工具包對
void setEnabled(boolean b) 設置是否可以使用(默認可以)
窗口和菜單
1、窗口
Frame() 構造窗口
Frame(String s) 窗口標題是s
setBounds(int x,int y,int w,int h) 窗口位置x,y,寬w,高y
setSize(int w,int h) 設置窗口位置(單位是像素)
setBackground(Color c) 設置背景顏色
setVisible(boolean b) 設置窗口是否可見
pack() 窗口出現時緊湊
setTitle(String s) 設置標題為s
getTitle() 獲取標題
setResizable(boolean b) 設置窗口大小是否可以調整
2、菜單條
Menubar() 構造菜單條
setMenubar() 窗口添加菜單條
3、菜單
Menu() 構造菜單
Menu(String s) 構造菜單,標題s
add
add(MenuItem item) 菜單增加菜單選項item
add(String s) 向菜單增加選項s
getItem(int n) 獲取n處的選項
getItemCount() 獲取選項數目
insert(MenuItem item,int n) 在n處插入菜單選項item
insert(String s,int n) 在n處插入菜單選項
remove(int n) 刪除菜單的n處的菜單選項
removeAll() 刪除全部
4、菜單項
MenuItem() 構造菜單項
MenuItem(String s) 構造標題是s的菜單項
setEnabled(boolean b) 設置是否可以被選擇
getLabel() 得到菜單選項名
addActionListener() 添加監視器
5、有關菜單的技巧
addSeparator() 增加菜單分割線
CheckboxMenuItem() 復選框菜單項
setShortcut(MenuShortcut k) 設置快捷鍵(k取值KeyEvent.VK_A----KeyEvent.VK_Z)
建立對話框
1、Dialog類
Dialog(Frame f,String s) 構造對話框,初始不可見,s是標題,f是對話框所依賴的窗口
Dialog(Frame f,String s,boolean b) b設置初始是否可見
getTitle() 獲取對話框標題
setTitle(String s) 設置對話框標題
setModal(boolean b) 設置對話框模式
setSize(int w,int h) 設置對話框大小
setVisible(boolean b) 顯示或隱藏對話框
2、FileDialog類
Filedialog(Frame f,String s,int mode) mode的值是fileDialog.LOAD或者fileDialog.SAVE
public String getDirectory() 獲取當前文件對話框中顯示的文件所屬目錄
public String getFile() 獲取當前文件對話框中文件的字符串表示,不存在返回null
Java中的鼠標和鍵盤事件
1、使用MouseListener借口處理鼠標事件
鼠標事件有5種:按下鼠標鍵,釋放鼠標鍵,點擊鼠標鍵,鼠標進入和鼠標退出
鼠標事件類型是MouseEvent,主要方法有:
getX(),getY() 獲取鼠標位置
getModifiers() 獲取鼠標左鍵或者右鍵
getClickCount() 獲取鼠標被點擊的次數
getSource() 獲取鼠標發生的事件源
事件源獲得監視器的方法是addMouseListener(),移去監視器的方法是removeMouseListener()
處理事件源發生的時間的事件的接口是MouseListener 接口中有如下的方法
mousePressed(MouseEvent) 負責處理鼠標按下事件
mouseReleased(MouseEvent) 負責處理鼠標釋放事件
mouseEntered(MouseEvent) 負責處理鼠標進入容器事件
mouseExited(MouseEvent) 負責處理鼠標離開事件
mouseClicked(MouseEvent) 負責處理點擊事件
2、使用MouseMotionListener接口處理鼠標事件
事件源發生的鼠標事件有2種:拖動鼠標和鼠標移動
鼠標事件的類型是MouseEvent
事件源獲得監視器的方法是addMouseMotionListener()
處理事件源發生的事件的接口是MouseMotionListener 接口中有如下的方法
mouseDragged() 負責處理鼠標拖動事件
mouseMoved() 負責處理鼠標移動事件
3、控制鼠標的指針形狀
setCursor(Cursor.getPreddfinedCursor(Cursor.鼠標形狀定義)) 鼠標形狀定義見(書 P 210)
4、鍵盤事件
鍵盤事件源使用addKeyListener 方法獲得監視器
鍵盤事件的接口是KeyListener 接口中有3個方法
public void keyPressed(KeyEvent e) 按下鍵盤按鍵
public void keyReleased(KeyEvent e) 釋放鍵盤按鍵
public void keyTypde(KeyEvent e) 按下又釋放鍵盤按鍵
Java多線程機制
1、Java的線程類與Runnable接口
Thread類
public Thread() 創建線程對象
public Thread(Runnable target) target 稱為被創建線程的目標對象,負責實現Runnable接口
線程優先級
Thread類有三個有關線程優先級的靜態常量:MIN_PRIORITY,MAX_PRIORITY,NORM_PRIORITY
新建線程將繼承創建它的副相承的優先級,用戶可以調用Thread類的setPriority(int a)來修改
a的取值:
Thread.MIN_PRIORITY,Thread.MAX_PRIORITY,Thread.NORM_PRIORITY
主要方法
啟動線程 start()
定義線程操作 run()
使線程休眠 sleep()
sleep(int millsecond) 以毫秒為單位的休眠時間
sleep(int millsecond,int nanosecond) 以納秒為單位的休眠時間
currentThread() 判斷誰在占用CPU的線程
第二十章 輸入輸出流
1、FileInputStream類
FileInputStream(String name) 使用給定的文件名name創建一個FileInputStream對象
FileInputStream(File file) 使用File對象創建FileInpuStream對象
File類有兩個常用方法:
File(String s) s確定文件名字
File(String directory,String s) directory是文件目錄
例如:
File f=new File("Myfile.dat");
FileInputStream istream=new FileInputStream(f);
處理I/O異常
當出現I/O錯誤的時候,Java生成一個IOException(I/O異常)對象來表示這個錯誤的信號。
程序必須使用一個catch檢測這個異常
例如:
try{
FileInputStream ins= new FileInputStream("Myfile.dat");
}
catch(IOException e){
System.out.println("File read Error:"+e);
}
從輸入流中讀取字節
int read() 返回0~255之間一個整數,如果到輸入流末尾,則返回-1
int read(byte b[]) 讀取字節數組
int read(byte b[],int off,int len) off指定把數據存放在b中什么地方,len指定讀取的最大字節數
關閉流
close()
2、FileOutputStream類
FileOutputStream(String name) 使用指定的文件名name創建FileOutputStream對象
FileOutputStream(File file) 使用file對象創建FileOutputStream對象
FileOutputStream(FileDescriptor fdobj) 使用FileDescriptor對象創建FileOutputStream對象
3、FileReader類和FileWriter類
FileReader(String filename)
FileWriter(String filename)
處理時需要FileNotFoundException異常
4、RandomAccessFile類
RandomAccessFile不同于FileInputStream和FileOutputStream,不是他們的子類
當我們想對一個文件進行讀寫操作的時候,創建一個指向該文件的RandomAccessFile流就可以了
RandomAccessFile類有兩個構造方法:
RandomAccessFile(String name, String mode) name是文件名,mode取r(只讀)或rw(讀寫)
RandomAccessFile(File file,String mode) file給出創建流的源
seek(long a) 移動RandomAccessFile流指向文件的指針,a確定指針距文件開頭的位置
getFilePointer() 獲取當前文件的指針位置
close() 關閉文件
getFD() 獲取文件的FileDescriptor
length() 獲取文件長度
read() 讀取一個字節數據
readBoolean() 讀取一個布爾值
readByte() 讀取一個字節
readChar()
readFloat()
readFully(byte b[])
readInt()
readLine()
readLong()
readUnsignedShort()
readUTF() 讀取一個UTF字符串
setLength(long newLength) 設置文件長度
skipByte(int n) 在文件中跳過給定數量的字節
write(byte b[]) 寫b.length個字節到文件
writeBoolean(bolean b)
writeByte(int v)
writeChar(char c)
writeChars(String s)
writeDouble(double d)
writeFloat(float v)
writeInt(int i)
writeLong(long l)
writeShort(int i)
writeUTF(String s)
5、管道流
PipedInputStream類
PipedInputStream() 創建一個管道輸入流
PipedInputStream(PipedOutputStream a) 連接到輸出流a的輸入流
read() 從輸入流中讀取一個字節
read(byte b[],int off,int len) off是在b中的開始位置,len是字節長度
PipedOutputStream類
PipedOutputStream() 創建一個輸出流
PipedOutputStream(PipedInputStream a) 連接到輸入流a的輸出流
write(int b)
write(byte b[],int off,int len)
counnect() 連接輸入輸出流
close() 關閉流
在使用的時候要捕獲IOException異常。
6、數據流
DataInputStream類(數據輸入流)
DataInputStream(InputStream in) 將數據輸入流指向一個由in指定的輸入流
DataOutputStream類(數據輸出流)
DataOutputStream(OutputStream out) 將數據輸出流指向一個由out指定的輸出流
主要方法:
close()
read() 讀取一個字節數據
readBoolean() 讀取一個布爾值
readByte() 讀取一個字節
readChar()
readFloat()
readFully(byte b[])
readInt()
readLine()
readLong()
readUnsignedShort()
readUTF() 讀取一個UTF字符串
skipByte(int n) 在文件中跳過給定數量的字節
write(byte b[]) 寫b.length個字節到文件
writeBoolean(bolean b)
writeByte(int v)
writeChar(char c)
writeChars(String s)
writeDouble(double d)
writeFloat(float v)
writeInt(int i)
writeLong(long l)
writeShort(int i)
writeUTF(String s)
7、對象流
ObjectInputStream類和ObjectOutputStream類分別是DataInputStream類和DataOutputStream類的子類
8、回壓輸入流
PushbackInputStream類
PushbackInputStream(InputStream in)
PushbackReader類
PushbackReader(Reader in)
unread(char c) 回壓一個字符
unread(char c[]) 回壓數組c中全部字符
unread(char c[],offset,int n) 回壓c中從offset開始的n個字符
java網絡的基本知識
1、使用URL(統一資源定位)
例如:
try
{
url=new URL("http://www.sina.com.cn";
}
catch(MalformedURLException e)
{
System.out.println("Bad URL:"+url);
}
在Applet 中鏈接向另外的Web頁面,使用代碼:
getAppletContext().showDocument(url);
2、套接字
客戶建立到服務器的套接字(Socket)
Socket(String host,int port) host是服務器的IP地址,port是端口號
建立了套接字后可以使用getInputStream()獲得輸入流
還可以使用getOutputStream()獲得一個輸出流
服務器建立接受客戶套接字的服務器套接字(ServerSocket)
ServerSocket(int port) port是端口號
建立了套接字連接后可以使用accept()接收客戶的套接字
可以使用getOutputStream()獲得一個輸出流
還可以使用getInputStream()獲得一個輸入流
3、InetAddress類
getByName(String )
3、InetAddress類
getByName(String s) 獲取Internet上主機的地址
getHostName() 獲取InetAddress對象所包含的域名
getHostAddress() 獲取InetAddress對象所包含的IP地址
getLocalHost() 獲取本地地址
4、UDP數據報
發送數據包,即使用DatagramPacket類將數據打包,有兩種構造方法
DatagramPacket(byte data[],int length,InetAddress address,int port)
?含有data數組的數據
?該數據包將發送到地質是address,端口是port的主機上
DatagramPacket(byte data[],int offset,int length,InetAddress address,int port)
?含有data數組的從offset開始,length長度的數據
?該數據包將發送到地質是address,端口是port的主機上
接收數據包,即使用DatagramSocket(int port)創建一個對象,port必須和待接收的數據包的端口相同
例如:
如果發送方的數據包端口是5566
DatagramSocket mail=new DatagramSocket(5566);
然后對象mail可以使用方法receive(Datagrampacket pack)接收數據包
在使用參數pack 接收數據包前,必須創建pack
byte data[]=new byte[100];
int length=90;
DatagramPacket pack=new DatagramPataet(data,length);
mail.receive(pack);
該數據包pack將接收長度是length的數據放入data,注意數據長度不要超過8192KB
pack還可以調用方法getPort()獲取所接受數據包是從什么端口發出的
調用方法InetAddress getAddress()可以獲知數據包來自哪個主機
Java與圖像
1、java支持的圖像類型:GIF,JPEG,BMP
2、Image類
首先申請一個Image對象
Image img =getImage(URL url,String name) url是圖像地址,name是圖片名稱
通常使用:
Image img =getImage(getCodBase(),String name) getCodBase()獲取當前小應用程序的URL,也就是在同一目錄下
圖像被加載后,就可以在paint()中繪制了
drawImage(Image img,int x,int y,ImageObserver observer)
img是上面獲取的圖像, x,y是指定圖像左上角的位置,observer是加載圖像時的圖像觀察器
Applet類已經實現了ImageObserver接口,所以可以直接使用this作為最后一個參數
drawImage(Image img,int x,int y,int width,int height,ImageObserver observer)
width和height是要繪制的圖像的寬和高
可以使用img.getHeight(this)和img.getWidth(this)來獲取被加載的圖像的寬和高
3、設置Java窗口圖標
Frame對象可以使用setIconImage(Image img)方法設置左上角圖標,默認圖標是咖啡杯
Java數據庫連接(JDBC)
1、JDBC-ODBC橋接器
建立JDBC-ODBC橋接器
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){}
連接到數據庫
try
{
Connection con=DriverManager.getConnection("jdbcdbc:數據源名稱","數據源的login name",
"數據源的password");
}
catch(SQLException e){}
向數據庫發送SQL語句
try
{
Statement sql=con.createStatement();
}
catch(SQLException e){}
處理查詢結果
ResultSet rs=sql.executeQuery("SQL語句");
第二十四章 Java與多媒體
1、在小程序中播放聲音
java可以播放au,aiff,wav,midi,rfm格式的音頻
可以調用Applet的一個靜態方法:
newAudioClip(URL url,String name) url是地址,name是音頻名稱
也可以用Applet類的實例方法:
getAudioClip(URL url,String name)
根據url地址和聲音文件name,獲得一個用于播放的音頻對象,這對象可以使用下面的方法來處理聲音:
play() 播放聲音文件name
loop() 循環播放name
stop() 停止播放name
2、Java媒體框架(JMF)
創建播放器
try
{
URL url=new URL(getDocumenBase(),視頻文件名稱);
player player=Manager.createPlayer(url);
}
catch(IOException e){}
向播放器注冊控制監視器
player.addControllerListener(監視器);
創建監視器必須使用接口ControllerListener ,該接口中的方法是
public void controllerUpdate(ControllerEvent e)
讓播放器對媒體進行預提取
player.prefetch()
啟動播放器
player.start();
停止播放器
player.stop();
停止播放器后必須釋放內存中的資源
player.deallocate();
Java Swing基礎
1、Jcomponent類
Jcomponent類 是所有輕量組件的父類,主要的子類有:
JButton 創建按鈕對象,而且可以創建在圖標的按鈕
JComboBox 創建組合框對象,和Choice相似
JCheckBox 創建復選框對象
JFileChooser 創建文件選擇器
JInternalFrame 創建內部窗體
JLabel 創建標簽
JMenu 創建菜單對象
JMenuBar 創建菜單條對象
JMenuItem 創建菜單項對象
JPanel 創建面板對象
JPasswordField 創建口令文本對象
JPopupMenu 創建彈出式菜單
JProgressBar 創建進程條
JRadioButton 創建單選按鈕
JScrollBar 創建滾動條
JScrollPane 創建滾動窗格
JSlider 創建滾動條
JSplitPane 創建拆分窗格
JTable 創建表格
JTextArea 創建文本區
JTexPane 創建文本窗格
JToolBar 創建工具條
JToolTip 創建工具提示對象
JTree 創建樹對象
2、JFrame類
JFrame類及其子類創建的對象是窗體
(1)JFrame類及其子類創建的窗體是swing窗體
(2)不可以把組件直接加到swing窗體中,應該把組件加到內容面板中
(3)不能為swing窗體設置布局,而應當為內容面板設置布局
(4)swing窗體通過調用getContentPane()方法得到它的內容面板
3、JApplet類
(1)不可以把組件直接添加到小程序容器中,也應該添加到內容面板中
(2)不能為小程序設置布局
(3)小程序容器通過調用getContenPane()方法得到內容面板
4、JDialog類
(1)不可以把組件直接添加到對話框容器中,也應該添加到內容面板中
(2)不能為對話框設置布局
(3)對話框容器通過調用getContenPane()方法得到內容面板
5、JPanel面板
JPanel()
JPanel(布局對象)
6、滾動窗口JScrollPane
JScrollPane()
JScrollPane(component c)
7、拆分窗口JSplitPane
JSplitPane(int a,Component b,Component c)
a的取值是HORIZONTAL_SPLIT或者VERTICAL_SPLIT決定水平拆分還是垂直拆分
JSplitPane(int a,boolean b ,Component b,Component c) b的取值決定拆分線移動的時候組件是否連續變化
8、內部窗體JInternalFrame
JInternalFrame(String title,boolean resizable,booleam closable,boolean max,boolean min)
參數的意義分別是窗口名稱,是否能調整大小,是否有關閉按鈕,最大化按鈕,最小化按鈕
(1)不能把組件直接加到窗體中,而是加到內容面板中
(2)必須先把內部窗體加到一個容器中(JDesktopPane),該容器是專門為內部窗體服務的
9、按鈕(JButton)
JButton() 創建按鈕
JButton(String s) s是按鈕的名字
JButton(Icon icon) icon是按鈕上的圖標
JButton(String s,Icon icon)
getText() 獲取按鈕名字
getIcon() 獲取按鈕圖標
setIcon(Icon icon) 設置按鈕圖標
setHorizontalTextposition(int a) a確定按鈕上圖標的位置,取值:
AbstractButton_CENTR,AbstractButton_LEFT,AbstractButton_RIGHT
setVerticalTextposition(int a) a確定按鈕上名字相對圖標的位置,取值:
AbstractButton.TOP,AbstractButton.BOTTOM,AbstractButton.CENTR
setMnemonic(char c) 設置按鈕的鍵盤操作方式是字符c(Alt+c)
setEnabled(boolean b) b決定按鈕是否可以被單擊
posted @
2008-05-16 18:43 礦礦 閱讀(4440) |
評論 (1) |
編輯 收藏
17.你需要學習企業級JavaBeans(EJB)以及它們的不同組件模式:Stateless/StatefulSessionBeans,EntityBeans(包含Bean- ManagedPersistence[BMP]或者Container-ManagedPersistence[CMP]和它的EJB-QL),或者 Message-DrivenBeans(MDB)。
18.你需要學習如何管理與配置一個J2EE應用程序服務器,如WebLogic,JBoss等,并且利用它的附加服務,例如簇類,連接池以及分布式處理支援。你還需要了解如何在它上面封裝和配置應用程序并且能夠監控、調整它的性能。
19.你需要熟悉面向方面的程序設計以及面向屬性的程序設計(這兩個都被很容易混淆的縮寫為AOP),以及他們的主流JAVA規格和執行。例如AspectJ和AspectWerkz。
20.你需要熟悉對不同有用的API和framework等來為你服務。例如Log4J(logging/tracing),Quartz (scheduling),JGroups(networkgroupcommunication),JCache(distributedcaching), Lucene(full-textsearch),JakartaCommons等等。
21.如果你將要對接或者正和舊的系統或者本地平臺,你需要學習JNI (JavaNativeInterface) and JCA (JavaConnectorArchitecture)。
22.你需要熟悉JINI技術以及與它相關的分布式系統,比如掌握CROBA。
23.你需要JavaCommunityProcess(JCP)以及他的不同JavaSpecificationRequests(JSRs),例如Portlets(168),JOLAP(69),DataMiningAPI(73),等等。
24.你應該熟練掌握一種JAVAIDE例如sunOne,netBeans,IntelliJIDEA或者Eclipse。(有些人更喜歡VI或EMACS來編寫文件。隨便你用什么了:)
25.JAVA(精確的說是有些配置)是冗長的,它需要很多的人工代碼(例如EJB),所以你需要熟悉代碼生成工具,例如XDoclet。
26.你需要熟悉一種單元測試體系(JNunit),并且學習不同的生成、部署工具(Ant,Maven)。
27.你需要熟悉一些在JAVA開發中經常用到的軟件工程過程。例如RUP(RationalUnifiedProcess)andAgilemethodologies。
28.你需要能夠深入了解加熟練操作和配置不同的操作系統,比如GNU/linux,sunsolaris,macOS等,做為跨平臺軟件的開發者。
29.你還需要緊跟java發展的步伐,比如現在可以深入的學習javaME,以及各種java新規范,技術的運用,如新起的web富客戶端技術。
30.你必需要對opensource有所了解,因為至少java的很多技術直接是靠開源來驅動發展的,如java3D技術。
posted @
2008-05-08 15:08 礦礦 閱讀(911) |
評論 (0) |
編輯 收藏
17.你需要學習企業級JavaBeans(EJB)以及它們的不同組件模式:Stateless/StatefulSessionBeans,EntityBeans(包含Bean- ManagedPersistence[BMP]或者Container-ManagedPersistence[CMP]和它的EJB-QL),或者 Message-DrivenBeans(MDB)。
18.你需要學習如何管理與配置一個J2EE應用程序服務器,如WebLogic,JBoss等,并且利用它的附加服務,例如簇類,連接池以及分布式處理支援。你還需要了解如何在它上面封裝和配置應用程序并且能夠監控、調整它的性能。
19.你需要熟悉面向方面的程序設計以及面向屬性的程序設計(這兩個都被很容易混淆的縮寫為AOP),以及他們的主流JAVA規格和執行。例如AspectJ和AspectWerkz。
20.你需要熟悉對不同有用的API和framework等來為你服務。例如Log4J(logging/tracing),Quartz (scheduling),JGroups(networkgroupcommunication),JCache(distributedcaching), Lucene(full-textsearch),JakartaCommons等等。
21.如果你將要對接或者正和舊的系統或者本地平臺,你需要學習JNI (JavaNativeInterface) and JCA (JavaConnectorArchitecture)。
22.你需要熟悉JINI技術以及與它相關的分布式系統,比如掌握CROBA。
23.你需要JavaCommunityProcess(JCP)以及他的不同JavaSpecificationRequests(JSRs),例如Portlets(168),JOLAP(69),DataMiningAPI(73),等等。
24.你應該熟練掌握一種JAVAIDE例如sunOne,netBeans,IntelliJIDEA或者Eclipse。(有些人更喜歡VI或EMACS來編寫文件。隨便你用什么了:)
25.JAVA(精確的說是有些配置)是冗長的,它需要很多的人工代碼(例如EJB),所以你需要熟悉代碼生成工具,例如XDoclet。
26.你需要熟悉一種單元測試體系(JNunit),并且學習不同的生成、部署工具(Ant,Maven)。
27.你需要熟悉一些在JAVA開發中經常用到的軟件工程過程。例如RUP(RationalUnifiedProcess)andAgilemethodologies。
28.你需要能夠深入了解加熟練操作和配置不同的操作系統,比如GNU/linux,sunsolaris,macOS等,做為跨平臺軟件的開發者。
29.你還需要緊跟java發展的步伐,比如現在可以深入的學習javaME,以及各種java新規范,技術的運用,如新起的web富客戶端技術。
30.你必需要對opensource有所了解,因為至少java的很多技術直接是靠開源來驅動發展的,如java3D技術。
posted @
2008-05-08 15:08 礦礦 閱讀(1151) |
評論 (3) |
編輯 收藏
封裝數據庫操作,目的就是為了隱藏
java.sql包內的類,在編碼中去掉核心的數據庫操作代碼。以杜絕直接數據庫操作容易帶來的資源未釋放問題。同時也減少了數據庫操作的編碼量。
但是很多網友在封裝時,卻喜歡返回結果集(ResultSet對象),那么這個封裝就沒有意義了。
1. 又是直接操作核心數據庫類,跟封裝前幾乎沒什么變化。
2. 結果集總是依賴于它使用的連接(Connection)對象。因此當連接對象在方法內被關閉后,你返回的ResultSet就沒有用了。
如果真的要獲得查詢數據庫的結果集,就把結果集對象內的所有數據,轉儲到以Map為元素的List對象內。
當然,這種方式,不能適應大數據量的查詢,不過如果真的碰到大數據量的查詢,那用什么封裝都不好,還是得直接數據庫操作. :)))
下面是簡單的數據庫操作Javabean的代碼
DbWrapper.java
import java.sql.*;
import java.util.*;
public class DbWrapper
{
// 定義連接池對象為靜態變量,將一直存在,直到工作目錄關閉。
private static DataSource ds = null;
// 1.用連接池的方式獲得連接
// 如果不是做多數據庫程序,推薦使用此方法
// 相關內容:在tomcat管理界面配置連接池
public static Connection openConnection() throws Exception
{
// 只需要初始化1次
if ( ds == null )
{
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
DataSource ds = (DataSource) envContext.lookup("jdbc/MyDataSource");
}
return ds.getConnection();
}
// 2.用jdbc驅動獲得連接
// 相關內容:JSP數據庫連接大全
public static Connection openConnection(
String driver,
String url,
String username,
String password)
throws Exception
{
Class.forName(driver).newInstance();
return DriverManager.getConnection(url, username, password);
}
public static void closeConnection(Connection conn) throws Exception
{
if ( conn != null )
{
conn.close();
}
}
public static int executeUpdate(String sql) throws Exception
{
int count = 0;
Connection conn = null;
Statement stmt = null;
try
{
conn = openConnection();
stmt = conn.createStatement();
count = stmt.executeUpdate(sql);
}
catch ( Exception e )
{
throw e;
}
finally
{
closeConnection(conn);
}
return count;
}
public static List executeQuery(String sql) throws Exception
{
List list = new ArrayList();
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try
{
conn = openConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
while ( rs.next() )
{
Map map = new HashMap();
for ( int i = 1; i < = rsmd.getColumnCount(); i++ )
{
map.put(rsmd.getColumnName(i), rs.getObject(i));
}
list.add(map);
} }
catch ( Exception e )
{
e.printStackTrace();
}
finally
{
if ( rs != null ) rs.close();
closeConnection(conn);
}
return list; }
}
使用示例:
// 1.對于insert, update, delete語句int count = DbWrapper.executeUpdate(sql);
// 2.對于selete語句
java.util.List list = DbWrapper.executeQuery(sql);
// 方法一:按名字取值,注意大小寫是嚴格區分的
for ( int i = 0; i < list.size(); i++ )
{
java.util.Map map = (java.util.Map)list.get(i);
out.println(mag.get("column_name").toString());
}
// 方法二:遍歷取值
for ( int i = 0; i < list.size(); i++ )
{
java.util.Map map = (java.util.Map)list.get(i);
for (java.util.Iterator it = map.keySet().iterator(); it.hasNext();)
{
String column_name = it.next().toString()); // 取值時注意null判斷
out.println(column_name + " = " + map.get(column_name) == null ? "" : map.get(column_name).toString());
}
}
posted @
2008-05-07 18:52 礦礦 閱讀(134) |
評論 (0) |
編輯 收藏
封裝數據庫操作,目的就是為了隱藏
java.sql包內的類,在編碼中去掉核心的數據庫操作代碼。以杜絕直接數據庫操作容易帶來的資源未釋放問題。同時也減少了數據庫操作的編碼量。
但是很多網友在封裝時,卻喜歡返回結果集(ResultSet對象),那么這個封裝就沒有意義了。
1. 又是直接操作核心數據庫類,跟封裝前幾乎沒什么變化。
2. 結果集總是依賴于它使用的連接(Connection)對象。因此當連接對象在方法內被關閉后,你返回的ResultSet就沒有用了。
如果真的要獲得查詢數據庫的結果集,就把結果集對象內的所有數據,轉儲到以Map為元素的List對象內。
當然,這種方式,不能適應大數據量的查詢,不過如果真的碰到大數據量的查詢,那用什么封裝都不好,還是得直接數據庫操作. :)))
下面是簡單的數據庫操作Javabean的代碼
DbWrapper.java
import java.sql.*;
import java.util.*;
public class DbWrapper
{
// 定義連接池對象為靜態變量,將一直存在,直到工作目錄關閉。
private static DataSource ds = null;
// 1.用連接池的方式獲得連接
// 如果不是做多數據庫程序,推薦使用此方法
// 相關內容:在tomcat管理界面配置連接池
public static Connection openConnection() throws Exception
{
// 只需要初始化1次
if ( ds == null )
{
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
DataSource ds = (DataSource) envContext.lookup("jdbc/MyDataSource");
}
return ds.getConnection();
}
// 2.用jdbc驅動獲得連接
// 相關內容:JSP數據庫連接大全
public static Connection openConnection(
String driver,
String url,
String username,
String password)
throws Exception
{
Class.forName(driver).newInstance();
return DriverManager.getConnection(url, username, password);
}
public static void closeConnection(Connection conn) throws Exception
{
if ( conn != null )
{
conn.close();
}
}
public static int executeUpdate(String sql) throws Exception
{
int count = 0;
Connection conn = null;
Statement stmt = null;
try
{
conn = openConnection();
stmt = conn.createStatement();
count = stmt.executeUpdate(sql);
}
catch ( Exception e )
{
throw e;
}
finally
{
closeConnection(conn);
}
return count;
}
public static List executeQuery(String sql) throws Exception
{
List list = new ArrayList();
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try
{
conn = openConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
while ( rs.next() )
{
Map map = new HashMap();
for ( int i = 1; i < = rsmd.getColumnCount(); i++ )
{
map.put(rsmd.getColumnName(i), rs.getObject(i));
}
list.add(map);
} }
catch ( Exception e )
{
e.printStackTrace();
}
finally
{
if ( rs != null ) rs.close();
closeConnection(conn);
}
return list; }
}
使用示例:
// 1.對于insert, update, delete語句int count = DbWrapper.executeUpdate(sql);
// 2.對于selete語句
java.util.List list = DbWrapper.executeQuery(sql);
// 方法一:按名字取值,注意大小寫是嚴格區分的
for ( int i = 0; i < list.size(); i++ )
{
java.util.Map map = (java.util.Map)list.get(i);
out.println(mag.get("column_name").toString());
}
// 方法二:遍歷取值
for ( int i = 0; i < list.size(); i++ )
{
java.util.Map map = (java.util.Map)list.get(i);
for (java.util.Iterator it = map.keySet().iterator(); it.hasNext();)
{
String column_name = it.next().toString()); // 取值時注意null判斷
out.println(column_name + " = " + map.get(column_name) == null ? "" : map.get(column_name).toString());
}
}
posted @
2008-05-07 18:52 礦礦 閱讀(143) |
評論 (0) |
編輯 收藏