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 矿矿 阅读(127) |
评论 (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 矿矿 阅读(147) |
评论 (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 矿矿 阅读(117) |
评论 (0) |
编辑 收藏
新华网北京5月20日电(记者 隋笑飞杨维汉)这次地震前,中国地震局没有作出短临预报,同时也没有收到任何单位、个人或团体提交的有关这次地震的短临预报意见。至于网上发布曾经有人提出过关于这次地震的预报意见的信息,是不符合实际的。中国地震局对于个人或团体的地震短临预报意见,有专门的管理办法和处理程序。中国地震局监测预报司是具体负责这项工作的部门。
20日上午,中国地震局监测预报司副司长车时接受中国地震信息网专访时作上述表示。
车时同时介绍了中国地震局对个人或团体的地震短临预报意见的管理办法。他说,中国地震局监测预报司从20世纪80年代后期开始对个人、学术团体的短临地震预报意见实施管理,具体管理工作由中国地震台网中心统一管理。具体办法是,指定专门的地震预报专家管理个人、学术团体等提出的短临预报意见。由专家收集、整理,并及时在地震部门的周、月会商中,介绍预测意见的主要依据、结论等,供震情跟踪判定时参考。每年年底,对一年中的所有短临预报意见进行评估,对其中预报准确或预报效果较好的给予奖励。
车时还指出,中国防震减灾法和地震预报管理条例中,有关于地震短临预报的明确规定。防震减灾法第十六条规定:国家对地震预报实行统一发布制度。地震短期预报和临震预报,由省、自治区、直辖市人民政府按照国务院规定的程序发布。任何单位或者从事地震工作的专业人员关于短期地震预测或者临震预测的意见,应当报国务院地震行政主管部门或者县级以上地方人民政府负责管理地震工作的部门或者机构按照前款处理,不得擅自向社会扩散。
车时表示,地震预报管理条例规定,国家鼓励和扶持地震预报的科学技术研究。中国地震局监测预报司本着对人民、对国家高度负责的态度,严格遵照该规定,支持地震预报科学研究,高度重视个人和团体提出的短临预测意见,但是对这些预测意见的处理是有严格程序的,要组织专家按照有关规定对预测意见的科学性和可能性进行审定。同时,由于地震预报既具有科学性,又具有社会性,政府发布地震预测意见是非常慎重的。
关于个人或团体有了地震预报意见后应如何提交给地震部门的问题,车时表示,任何单位和个人根据地震观测资料和研究成果,提出了短临地震预测意见,可向所在地或者所预测地区的县级以上地方人民政府负责管理地震工作的机构提出书面报告,也可以直接向国务院地震工作主管部门书面报告。但是,不得向社会散布。并且,任何单位和个人不得向国(境)外提出地震预测意见。个人或团体对地震活动趋势的长期和中期预测研究成果除外,可以进行学术交流讨论。
车时还谈了个人或团体提交的地震短临预报意见的具体情况。他说,现在有很多个人或团体开展地震预报探索,每年都收到几十至上百份的正式短临预报意见。但是,当前地震预报是公认的世界科学难题,总体水平是很低的。准确的短临预报意见是非常少的,2000年以来,中国地震台网中心(前分析预报中心)共收到700多份地震短临预报意见,其中基本上准确的预报意见有7份。2008年以来,共收到26份短临预报意见,尚没有正确预报的短临预报意见。尽管这些意见的准确性非常低,但作为地震主管部门,根据有关法律,欢迎和鼓励个人和团体继续开展地震预报探索。
posted @
2008-05-21 13:18 矿矿 阅读(106) |
评论 (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 矿矿 阅读(1119) |
评论 (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 矿矿 阅读(4433) |
评论 (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 矿矿 阅读(907) |
评论 (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 矿矿 阅读(1148) |
评论 (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 矿矿 阅读(132) |
评论 (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 矿矿 阅读(141) |
评论 (0) |
编辑 收藏