JAVA-JDBC连接数据库(查询_添加_修改_删除)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一实验目的
(1)理解JDBC的工作原理,熟悉java.sql包中与数据库访问相关的类及其用法,如DriverManager、 Connection、Statement、ResultSet。

(2)熟悉利用JDBC进行数据库访问的步骤:
—加载JDBC驱动程序(Class.forName()
—建立数据库连接(DriverManager.getConnection())
—发布SQL命令
(stmt=Con.createStatement(),stmt.executeQuery())
—取结果集并处理(ResultSet的next()方法和.get***()方法) —关闭连接,释放对象(close())
(3)掌握建立ODBC数据源的方法,会使用JDBC-ODBC Bridge进行数据库访问。

二实验内容
编写图形界面程序,利用JDBC实现图书/同学通讯录/校园卡/团员/教师/学生管理系统。

(任选1题,也可自拟题目,但需指导教师同意!)
三实验要求
(1) 进行规范的数据库设计,正确地定义关系数据表的结构及表间联系(包括:字段的数据类型、宽度、精度、主键、外键、缺省值)。

(2)要求界面布局紧凑、流畅、美观,实现的功能较为完善
(3)本实验分两次完成,第一次可以先做一些准备测试,旨在熟悉JDBCAPI编程接口中相关类的使用方法,测试中可以先基于字符界面实现功能,再逐步过渡到图形界面。

四实验步骤
(1)在Access或SQL Server中建立数据库及基础表。

在控制面板中正确配置ODBC数据源,并测试成功。

(2)编写图形界面的Application,利用JDBC-ODBC Bridge进行数据库访问,实现要求的功能。

五实验主要代码
六运行界面主界面:
录入演示:
删除演示:
删除后再查询:
学号:511020830|姓名:朱凯周|性别:男|班级:D软件101|籍贯:无锡|生日:1992-03-16| 已删除。

在学号文本框内输入学号,按下回车,其他信息自动显示。

把“D软件101”改成“D计算机101”
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//加载包。

public class jdbc_winXsy
{
public static void main(String args[])
{
InfoWindow win=new InfoWindow();
}
}//主控函数
class InfoWindow extends Frame implements ActionListener
{
Button 录入=new Button("录入");//新建按钮,录入。

Button 查询=new Button("查询");//新建按钮,查询。

Button 判断=new Button("判断");//新建按钮,判断。

Button 删除=new Button("删除");//新建按钮,删除。

Button 修改=new Button("修改");//新建按钮,修改。

Button 清空=new Button("清空");//新建按钮,清空。

TextArea 显示区=new TextArea(10,68);//新建文本区,这里是长为68个字符,高为10行。

InfoWindow()//与类同名的构造函数。

{
setLayout(new FlowLayout());
/*设置布局格式,这里是FlowLayout布局,具体就是组件会按照加入的先
后顺序从左到右
排列,一行排满之后才会转到下一行。

这里FlowLayout.LEFT指的是所有的
组件左对齐。

组件调用setSize()方法设置的大小无效。

*/
setTitle("学生信息管理-Xsy");//设置窗口标题
显示区.append("\n\n\n");
显示区.append("
=============================================\n");
显示区.append(" == ==\n");
显示区.append(" == 欢迎使用学生信息管理系
统 ==\n");
显示区.append(" == ==\n");
显示区.append(" == ==\n");
显示区.append(" == designed
by 薛思雨 ==\n");
显示区.append("
=============================================\n");
//欢迎界面
add(new Label("学生信息表"));//添加标签:“学生信息表:”。

add(显示区); //添加文本区。

add(录入); //添加“录入”按钮。

录入.addActionListener(this);//给录入按钮注册ActionListener监听
器。

add(查询); //添加“查询”按钮。

查询.addActionListener(this);//给查询按钮注册ActionListener监听
器。

add(判断); //添加“判断”按钮。

判断.addActionListener(this);//给判断按钮注册ActionListener监听器。

add(删除); //添加“删除”按钮。

删除.addActionListener(this);//给删除按钮注册ActionListener监听器。

add(修改); //添加“修改”按钮。

修改.addActionListener(this);//给修改按钮注册ActionListener监听器。

add(清空); //添加“修改”按钮。

清空.addActionListener(this);//给清空按钮注册ActionListener监听器。

addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{ System.exit(0);}
});//添加窗口监听器,在实现“关闭窗口”这个事件时,程序退出。

setVisible(true);//设置可见。

setBounds(100,100,520,300);//设置弹出窗口的坐标位置和大小。

前两个数/是以屏幕
//左上角为原点的坐标,后两个数字,是窗口的宽与高。

validate();
}
public void actionPerformed(ActionEvent e)
{
Connection con;
Statement stmt;
ResultSet rs;
PreparedStatement prestmt;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//加载驱动程序。

}
catch(ClassNotFoundException ex) { }
if(e.getSource()==查询)//点击查询按钮执行的操作。

{
try
{
con=DriverManager.getConnection("jdbc:odbc:sun","","");//连接数据源。

stmt=con.createStatement();//发送 SQL 语句并处理结果
rs=stmt.executeQuery("select * from information order by number");//返回结果集。

while(rs.next())//列出表中的所有信息。

{
String number=rs.getString(1);
String name=rs.getString(2);
String sex=rs.getString(3);
String sclass=rs.getString(4);
String nativeplace=rs.getString(5);
String birthday=rs.getString(6);
显示区.append("学号:"+number+"|");
显示区.append("姓名:"+name+"|");
显示区.append("性别:"+sex+"|");
显示区.append("班级:"+sclass+"|");
显示区.append("籍贯:"+nativeplace+"|");
显示区.append("生日:"+birthday+"|"+"\n");
}
显示
区.append("==================================================================== =======\n");
con.close();//关闭连接。

}
catch(SQLException ex) {}
}//“查询”按钮执行结束。

else if (e.getSource()==录入)//当点击“录入”按钮时。

{
LDialog dia=new LDialog(this,"录入");
//弹出“录入”界面。

}//“录入”按钮执行结束。

else if (e.getSource()==判断)//当点击“判断”按钮时。

{//弹出问题对话框。

上面显示“请输入需要判断的学生学号:”,下面有空框,可以输入。

String number= JOptionPane.showInputDialog(this,"请输入需要判断的学生学号:",
"判断
",JOptionPane.QUESTION_MESSAGE);
char n1[],n2[];//定义两个数组n1,n2。

n1=new char [2];//n1的存放空间是2个字符。

n2=new char [2];//n2的存放空间是2个字符。

number.getChars(3,5,n1,0);
/*获取“学号”文本框内的字符串,截取第4,5两个字符存放到n1中。

在东港的学号中,
4,5两位是所在书院的号码;6,7两位是所在班级的号码。

*/
number.getChars(5,7,n2,0);
//获取“学号”文本框内的字符串,截取第6,7两个字符存放到n2中。

String s1=new String(n1);//把n1中的信息作为字符串s1重新定义,这样方便后面使用。

String s2=new String(n2);//把n2中的信息作为字符串s2重新定义,这样就可以输出。

if (s1.equals("01") )//判断s1是否等与“01”,字符串的比较用.equals()方法。

{/*当s1字符串是“01”时,弹出信息对话框。

上面显示:该学生是海洲书院
X班,X的取值是s2的字符串。

*/
JOptionPane.showMessageDialog(this,"该学生是海洲书院"+s2+"班",
"结果
",RMATION_MESSAGE);
}
else if ( s1.equals("02") )
{/*当s1字符串是“02”时,弹出信息对话框。

上面显示:该学生是瀛洲书院
X班,X的取值是s2的字符串。

*/
JOptionPane.showMessageDialog(this,"该学生是瀛洲书院"+s2+"班",
"结果
",RMATION_MESSAGE);
}
else if ( s1.equals("03") )
{/*当s1字符串是“03”时,弹出信息对话框。

上面显示:该学生是郁洲书院
X班,X的取值是s2的字符串。

*/
JOptionPane.showMessageDialog(this,"该学生是郁洲书院"+s2+"班",
"结果
",RMATION_MESSAGE);
}
else if ( s1.equals("04") )
{/*当s1字符串是“01”时,弹出信息对话框。

上面显示:该学生是凌洲书院
X班,X的取值是s2的字符串。

*/
JOptionPane.showMessageDialog(this,"该学生是凌洲书院"+s2+"班",
"结果
",RMATION_MESSAGE);
}
}//“判断”按钮执行结束。

else if (e.getSource()==删除)//以下是删除按钮的操作。

{
String no= JOptionPane.showInputDialog(this,"请输入将要删除的学生学号:",
"删除",JOptionPane.QUESTION_MESSAGE);//弹出信息对话框。

try
{
con=DriverManager.getConnection("jdbc:odbc:sun","","");//连接数据源。

prestmt=con.prepareStatement("DELETE FROM information WHERE number=?");
//预处理-删除。

prestmt.setString(1, no);//设置第一个问号的取值
prestmt.executeUpdate();//更新数据。

JOptionPane.showMessageDialog(this,"学号为"+no+"的学生记录已删除!",
"删除",RMATION_MESSAGE);//弹出操作成功的对话框。

con.close();//关闭连接。

}
catch(SQLException ex) { System.out.println(e); }
}
else if (e.getSource()==修改)//执行修改操作。

{
CDialog dia=new CDialog(this,"修改");
//弹出“修改”界面
}
else if (e.getSource()==清空)//执行清空操作。

{
显示区.setText("");//清空文本框。

}
}
}
class LDialog extends Dialog implements ActionListener//录入界面。

{
TextField 学号,姓名,班级,生日;
JRadioButton 男,女;
ButtonGroup group=null;
JPanel p1,p2;
Choice choice;
Button 确定,取消;
LDialog(Frame f,String s)
{
super(f,s);
学号=new TextField(10);
姓名=new TextField(10);
班级=new TextField(10);
生日=new TextField(10);
group=new ButtonGroup();
男=new JRadioButton("男",true);
女=new JRadioButton("女",false);
group.add(男);
group.add(女);
p1 = new JPanel();
p1.add(男);p1.add(女);
choice=new Choice();//新建名为"choice"的下拉列表。

choice.add("南京");choice.add("无锡");choice.add("常州");
choice.add("苏州");choice.add("镇江");choice.add("扬州");
choice.add("南通");choice.add("盐城");choice.add("徐州");
choice.add("淮安");choice.add("宿迁");choice.add("连云港");
choice.add("泰州");//在组合框中添加这些地名:南京,无锡,常州等等。

add(choice);//添加组合框
确定=new Button("确定");
取消=new Button("取消");
确定.addActionListener(this);
取消.addActionListener(this);
p2 = new JPanel();
p2.add(确定);
p2.add(取消);
setLayout(new FlowLayout(FlowLayout.LEFT));
add(new Label("学号:"));add(学号);
add(new Label("姓名:"));add(姓名);
add(new Label("性别:"));add(p1);
add(new Label("班级:"));add(班级);
add(new Label("籍贯:"));add(choice);
add(new Label("生日:"));add(生日);
add(p2);
setBounds(200,200,180,260);
setVisible(true);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e){ dispose();}});
}
public void actionPerformed(ActionEvent e)
{
Connection con;
Statement stmt;
ResultSet rs;
PreparedStatement prestmt;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException ex) { }
if (e.getSource()==确定)//执行确定操作。

{
String number=学号.getText();//获取“学号”文本框内输入的信息。

String name=姓名.getText();//获取“姓名”文本框内输入的信息。

String sex=null;
if(男.isSelected()){sex=男.getText();}else{sex=女.getText();} //对于“男”“女”两个单选框的判断,isSelected()被选中。

String sclass=班级.getText();//获取“班级”文本框内输入的信息。

String nativeplace=choice.getSelectedItem();
//获取“choice”下拉列表选择的信息。

String birthday=生日.getText();//获取“生日”下拉列表选择的信息。

if(number.length()>0 && name.length()>0&& sclass.length()>0) //判断“学号”“姓名”“班级”文本框内是否输入了信息。

{//“学号”“姓名”“班级”文本框内有信息时,新建stu对象。

try{
con=DriverManager.getConnection("jdbc:odbc:sun","","");
//连接数据源
prestmt=con.prepareStatement("INSERT INTO information VALUES(?,?,?,?,?,?)");
//预处理-插入。

prestmt.setString(1,number);
prestmt.setString(2,name);
prestmt.setString(3,sex);
prestmt.setString(4,sclass);
prestmt.setString(5,nativeplace);
prestmt.setString(6,birthday);
//给?赋值。

prestmt.executeUpdate();//更新数据。

con.close();//关闭连接。

JOptionPane.showMessageDialog(this,"信息录入成功!",
"OK",RMATION_MESSAGE);//弹出成功对话框。

}
catch(SQLException ex) { System.out.println(e); }
学号.setText("");//把“学号”文本框内容清空,以便下次输入。

姓名.setText("");//把“姓名”文本框内容清空,以便下次输入。

班级.setText("");//把“班级”文本框内容清空,以便下次输入。

生日.setText("");//把“生日”文本框内容清空,以便下次输入。

}
else { /*当“学号”“姓名”“班级”文本框内没有输入信息时,则会弹出一个“警告”
窗口,上面显示“请输入信息!”。

*/
JOptionPane.showMessageDialog(this,"请输入信息!","Warning",
JOptionPane.WARNING_MESSAGE);//弹出警告对话框。

}
}
else//“取消”按钮。

{ dispose();}
}
}
class CDialog extends Dialog implements ActionListener//修改界面
{
TextField 学号,姓名,性别,班级,籍贯,生日;
Button 确定,取消;
CDialog(Frame f,String s)
{
super(f,s);
学号=new TextField(10);
姓名=new TextField(10);
性别=new TextField(10);
班级=new TextField(10);
籍贯=new TextField(10);
生日=new TextField(10);
确定=new Button("确定");
取消=new Button("取消");
确定.addActionListener(this);
取消.addActionListener(this);
学号.addActionListener(this);
//注册监听器。

setLayout(new FlowLayout(FlowLayout.LEFT));//设置布局。

add(new Label("学号:"));
add(学号);
add(new Label("姓名:"));
add(姓名);
add(new Label("性别:"));
add(性别);
add(new Label("班级:"));
add(班级);
add(new Label("籍贯:"));
add(籍贯);
add(new Label("生日:"));
add(生日);
add(确定);
add(取消);
//添加各种组件。

setBounds(200,200,180,250);
setVisible(true);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e){ dispose();}});
}
public void actionPerformed(ActionEvent e)
{
Connection con;
ResultSet rs;
PreparedStatement prestmt1,prestmt2;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//加载驱动器。

}
catch(ClassNotFoundException ex) { }
if(e.getSource()==学号)//在学号文本区按回车所执行的命令。

{
try{
con=DriverManager.getConnection("jdbc:odbc:sun","","");//连接数据源。

prestmt1=con.prepareStatement("SELECT
name,sex,sclass,nativeplace,birthday FROM information WHERE number= ?");//预处理-条件查询。

prestmt1.setString(1,学号.getText());//设置?的值。

rs=prestmt1.executeQuery();//返回结果集。

while (rs.next())
{
姓名.setText(rs.getString(1));
性别.setText(rs.getString(2));
班级.setText(rs.getString(3));
籍贯.setText(rs.getString(4));
生日.setText(rs.getString(5));
}
con.close();//关闭连接。

}
catch(SQLException ex) { System.out.println(e); }
}
else if (e.getSource()==确定)//执行确定
{
String number=学号.getText().trim();
String name=姓名.getText().trim();
String sex=性别.getText().trim();
String sclass=班级.getText().trim();
String nativeplace=籍贯.getText().trim();
String birthday=生日.getText().trim();
//获取文本框里的值。

if(sex.length()>0 && name.length()>0&&
sclass.length()>0&&nativeplace.length()>0&&birthday.length()>0)
//判断“学号”“姓名”“班级”文本框内是否输入了信息。

{ try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//加载驱动器。

}
catch(ng.ClassNotFoundException ec){
ec.printStackTrace(); }
try
{
con=
DriverManager.getConnection("jdbc:odbc:sun","","");
//连接数据源。

prestmt2=con.prepareStatement("update information set name=?,sex=?,sclass=?,nativeplace=?,birthday=? WHERE
number= ?");
//预处理-更新。

prestmt2.setString(1,name);
prestmt2.setString(2,sex);
prestmt2.setString(3,sclass);
prestmt2.setString(4,nativeplace);
prestmt2.setString(5,birthday);
prestmt2.setString(6,number);
prestmt2.executeUpdate();
prestmt2.close();
con.close();//关闭连接。

JOptionPane.showMessageDialog(this,"信息修改成功!
","OK",RMATION_MESSAGE);
}catch(SQLException ex)//弹出信息框。

{
ex.printStackTrace();
}
}
else { /*当“学号”“姓名”“班级”文本框内没有输入信息时,则会弹出一个“警告”
窗口,上面显示“请输入信息!”。

*/
JOptionPane.showMessageDialog(this,"请输入信息!","Warning",
JOptionPane.WARNING_MESSAGE);
}
}
else if (e.getSource()==取消)//执行取消按钮,窗口消失。

{ dispose();}
}
}。

相关文档
最新文档