《Java高级编程应用》实验七八 数据库编程1.docx
《《Java高级编程应用》实验七八 数据库编程1.docx》由会员分享,可在线阅读,更多相关《《Java高级编程应用》实验七八 数据库编程1.docx(12页珍藏版)》请在冰豆网上搜索。
《Java高级编程应用》实验七八数据库编程1
实验七、八数据库编程
一、实验目的
1、掌握数据库连接用到的主要API;
2、掌握数据库连接两种常用的方法。
二、实验内容
1、请以数据查询为例,简述连接数据库的步骤。
1.注册数据库的驱动
2.通过DriverManager获取数据库连接
3.通过Connection对象获取Statement
4.使用Statement执行SQL语句
5.操作ResultSet结果集
6.回收据库资源
2、借助JDBC方式连接数据库,查询某班学生的花名册(含学号、姓名)。
源程序:
packageJDBC;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.Statement;
publicclassDatabase_Connectivity{
publicstaticvoidmain(String[]args){
Statementstmt=null;
ResultSetrs=null;
Connectionconn=null;
try{
//1.注册数据库的驱动
Class.forName("com.mysql.jdbc.Driver");
//2.通过DriverManager获取数据库连接
Stringurl="jdbc:
mysql:
//localhost:
3306/gradem";
Stringusername="root";
Stringpassword="123";
conn=DriverManager.getConnection(url,username,password);
//3.通过Connection对象获取Statement
stmt=conn.createStatement();
//4.使用Statement执行SQL语句
Stringsql="select*fromstudent";
rs=stmt.executeQuery(sql);
//5.操作ResultSet结果集
System.out.println("\t学号"+"\t|\t"+"姓名");
while(rs.next()){
Stringsno=rs.getString("sno");
Stringsname=rs.getString("sname");
System.out.println(""+sno+"\t|\t"+sname);
}
}catch(Exceptione){
e.printStackTrace();
}finally{
//6.回收据库资源
if(rs!
=null){
try{
rs.close();
}catch(Exceptione){
e.printStackTrace();
}
rs=null;
}
if(stmt!
=null){
try{
stmt.close();
}catch(Exceptione){
e.printStackTrace();
}
stmt=null;
}
if(conn!
=null){
try{
conn.close();
}catch(Exceptione){
e.printStackTrace();
}
conn=null;
}
}
}
}
3、完善用户的登录程序,实现从数据库访问用户名和密码的登录控制。
源程序:
packageJDBC;
importjava.sql.*;
publicclassLoginVerify{
privatestaticintb;
publicstaticvoidmain(Stringargs[]){
Stringlogin_name="KDs";
Stringlogin_password="1234";
Statementstmt=null;
ResultSetrs=null;
Connectionconn=null;
b=1;
try{
//1.注册数据库的驱动
Class.forName("com.mysql.jdbc.Driver");
//2.通过DriverManager获取数据库连接
Stringurl="jdbc:
mysql:
//localhost:
3306/gradem";
Stringusername="root";
Stringpassword="123";
conn=DriverManager.getConnection(url,username,password);
//3.通过Connection对象获取Statement
stmt=conn.createStatement();
//4.使用Statement执行SQL语句
Stringsql="select*fromUsers";
rs=stmt.executeQuery(sql);
//5.操作ResultSet结果集
while(rs.next()){
Stringuser_name=rs.getString("user_name");
Stringuser_password=rs.getString("user_password");
if(login_name.equals(user_name)){
b=1;
if(login_password.equals(user_password)){
System.out.println("登录成功!
");
}
else{
System.out.println("密码错误!
登录失败!
!
");
}
}
else{
b=0;
}
}
if(b==0){
System.out.println("该用户名未注册!
登录失败!
!
");
}
}catch(Exceptione){
e.printStackTrace();
}
}
}
4、在题目3的基础上完善用户的登录程序,实现如下用户的登录控制。
源程序:
packageJDBC;
importjava.awt.GridLayout;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.MouseEvent;
importjava.awt.event.MouseListener;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.Statement;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JOptionPane;
importjavax.swing.JPanel;
importjavax.swing.JPasswordField;
importjavax.swing.JTextField;
importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics;
importjava.util.Random;
publicclassLoginIntact{
JTextFieldtf,tf_security_code;
JPasswordFieldpf;
JFramef;
JLabellName,lPassword,refresh_security_code;
JButtonbLogin,bQuit;
JPanelp1,p2,p3,p4;
privatestaticintb;
publicLoginIntact(){
//TODOAuto-generatedconstructorstub
f=newJFrame();
tf=newJTextField(18);
tf_security_code=newJTextField(10);//验证码输入框
pf=newJPasswordField(18);
lName=newJLabel("用户名:
");
lPassword=newJLabel("密码:
");
bLogin=newJButton("登录");
bQuit=newJButton("取消");
refresh_security_code=newJLabel("看不清,换一张");
//-----------登录取消添加事件监听
bLogin.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
Stringlogin_name=tf.getText();
Stringlogin_password=pf.getText();
Statementstmt=null;
ResultSetrs=null;
Connectionconn=null;
b=1;
try{
//1.注册数据库的驱动
Class.forName("com.mysql.jdbc.Driver");
//2.通过DriverManager获取数据库连接
Stringurl="jdbc:
mysql:
//localhost:
3306/gradem";
Stringusername="root";
Stringpassword="123";
conn=DriverManager.getConnection(url,username,password);
//3.通过Connection对象获取Statement
stmt=conn.createStatement();
//4.使用Statement执行SQL语句
Stringsql="select*fromUsers";
rs=stmt.executeQuery(sql);
//5.操作ResultSet结果集
Stringinput_code=tf_security_code.getText();//获取用户输入的验证码
Stringss=newmyJPanel().sb.toString();
System.out.println(ss);
if(ss.equalsIgnoreCase(input_code)){
newmyJPanel().repaint();//重绘验证码面板
if("".equals(tf.getText())||"".equals(pf.getText())){
JOptionPane.showMessageDialog(null,"用户名或密码为空!
登录失败!
");
}
else{
while(rs.next()){
Stringuser_name=rs.getString("user_name");
Stringuser_password=rs.getString("user_password");
if(login_name.equals(user_name)){
b=1;
if(login_password.equals(user_password)){
JOptionPane.showMessageDialog(null,"登陆成功!
");
//System.out.println("登录成功!
");
tf.setText("");
pf.setText("");
tf_security_code.setText("");//刷新验证码时,清空验证码输入框
}
else{
//System.out.println("密码错误!
登录失败!
!
");
JOptionPane.showMessageDialog(null,"密码错误,登录失败");
}
}
else{
b=0;
}
}
if(b==0){
//System.out.println("该用户名未注册!
登录失败!
!
");
JOptionPane.showMessageDialog(null,"用该用户名未注册!
登录失败!
!
");
}
}
}
else{
JOptionPane.showMessageDialog(null,"验证码输入错误!
请重新输入!
");
}
}catch(Exceptionee){
ee.printStackTrace();
}
}
});
bQuit.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
System.exit(0);
}
});
refresh_security_code.addMouseListener(newMouseListener(){
@Override
publicvoidmouseClicked(MouseEventarg0){
//TODOAuto-generatedmethodstub
f.setVisible(true);
f.repaint();//重绘刷新
tf_security_code.setText("");//刷新验证码时,清空验证码输入框
}
@Override
publicvoidmouseEntered(MouseEvente){
//TODOAuto-generatedmethodstub
}
@Override
publicvoidmouseExited(MouseEvente){
//TODOAuto-generatedmethodstub
}
@Override
publicvoidmousePressed(MouseEvente){
//TODOAuto-generatedmethodstub
}
@Override
publicvoidmouseReleased(MouseEvente){
//TODOAuto-generatedmethodstub
}
});
//--------------------
p1=newJPanel();
p2=newJPanel();
p3=newJPanel();
p4=newJPanel();
JPanelpp=newJPanel();
p1.add(lName);
p1.add(tf);
p2.add(lPassword);
p2.add(pf);
p3.add(newmyJPanel());
pp.add(tf_security_code);
p3.add(pp);
p3.add(refresh_security_code);
p4.add(bLogin);
p4.add(bQuit);
//------添加部件
f.add(newJPanel());
f.add(p1);
f.add(p2);
f.add(p3);
f.add(p4);
//------布局设置
f.setLayout(newGridLayout(5,1));
p3.setLayout(newGridLayout(1,3));
//------窗体设置
f.setVisible(true);
f.setBounds(200,300,400,300);
}
staticclassmyJPanelextendsJPanel{
publicstaticStringBuildersb;
publicvoidpaint(Graphicsg){
intwidth=130;
intheight=35;
g.setColor(Color.LIGHT_GRAY);//设置上下文颜色
g.fillRect(0,0,width,height);//填充验证码背景
g.setColor(Color.black);//设置上下文颜色
g.drawRect(0,0,width-1,height-1);//绘制边框
//绘制干扰点
Randomr=newRandom();
for(inti=0;i<100;i++){
intx=r.nextInt(width)-2;
inty=r.nextInt(height)-2;
g.drawOval(x,y,2,2);
}
g.setFont(newFont("黑体",Font.BOLD,30));//设置验证码字体
g.setColor(Color.BLUE);//设置验证码颜色
//产生随机验证码
char[]chars=("abcdefghigklmnopqistuvwxyzABCDEFGHIJKLMNOPQISTUVWXYZ"
+"0123456789").toCharArray();
sb=newStringBuilder();
for(inti=0;i<4;i++){
intpos=r.nextInt(chars.length);
charc=chars[pos];
sb.append(c+"");
}
g.drawString(sb.toString(),20,30);//写入验证码
}
}
publicstaticvoidmain(Stringargs[]){
newLoginIntact();
}
}
三、实验总结