当前位置:文档之家› JAVA-JDBC连接数据库(查询,添加,修改,删除)

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

淮海工学院计算机工程院

实验报告书

课程名:面向对象程序设计

题目:实验四基于图形界面的JDBC开发

班级:D软件101

学号:511020825

姓名:薛思雨

一实验目的

(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”

修改后再查询:

七实验结果的分析、体会

这次实验要求要连接到Access数据库,并且可以对数据执行查询,添加,修改,删除等一些操作。首先要做好一个数据库,然后要创建一个ODBC数据源,控制面板-管理工具-数据源(ODBC),在弹出的对话框中选择相应的操作。(如果在“添加”里找不到Microsoft

Access Driver (*mdb)的话,可以C盘-Windows-SysWOW64-ODBC数据源管理器进行相应的操作。)下面就是最关键的,建立JDBC-ODBC桥接器,

[Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");]加载驱动器,接着是[Connection con= DriverManager.getConnection("jdbc:odbc:sun","","");]连接到数据库,用户名和口令可为空。最后是向数据库发送SQL语句,stmt=Con.createStatement(),stmt.executeQuery(),这个就是我这次代码编译没有报错,但是运行却抛出异常的问题所在,一定要注意SQL语句中文本型和整型赋值的区别,引号的用法。最后是取结果集并处理(ResultSet的next()方法和.get***()方法)

在用查询executeQuery(),更新executeUpdate()语句来执行想要的操作,推荐使用预处理的方法,这样运行的速度比较快,也减轻了数据库的负担。在每一次之后完查询,更新等操作时,要关闭连接,释放对象(close())。

这一次的实验还是比较辛苦的,为了找出SQL语句的错误,以后要多多注意书写的规范,减轻后面校对代码的负担。

import java.sql.*;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

//加载包。

public class jdbc_winXsy

{

public static void main(String args[])

{

InfoWind ow win=new InfoWindow();

}

}//主控函数

class InfoWindow extends Frame implements ActionListener

{

Button 录入=new Button("录入");//新建按钮,录入。

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

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

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

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

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

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

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

{

setLayou t(new FlowLayou t());

/*设置布局格式,这里是FlowLayou t布局,具体就是组件会按照加入的先后顺序从左到右排列,一行排满之后才会转到下一行。这里FlowLayout.LEFT指的是所有的组件左对齐。

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

setTitle("学生信息管理-Xsy");//设置窗口标题

显示区.append("\n\n\n");

显示区.append(" =============================================\n");

显示区.append(" == ==\n");

显示区.append(" == 欢迎使用学生信息管理系统==\n");

显示区.append(" == ==\n");

显示区.append(" == ==\n");

显示区.append(" == desig ned 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监听器。

add WindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent e)

{ System.exit(0);}

});//添加窗口监听器,在实现“关闭窗口”这个事件时,程序退出。

setV isible(true);//设置可见。

setBou nds(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 b y number");//返回结果集。

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

{

S tring nu mber=rs.getString(1);

S tring name=rs.getString(2);

S tring sex=rs.getString(3);

S tring sclass=rs.getS tring(4);

S tring nativeplace=rs.getString(5);

S tring 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.showInpu tDialog(this,"请输入需要判断的学生学号:",

"判断",JOptionPane.QUES TION_MESSAGE); char n1[],n2[];//定义两个数组n1,n2。

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

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

nu mber.getChars(3,5,n1,0);

/*获取“学号”文本框内的字符串,截取第4,5两个字符存放到n1中。在东港的学号中,4,5两位是所在书院的号码;6,7两位是所在班级的号码。*/

nu mber.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的字符串。*/

J OptionPane.showMessageDialog(this,"该学生是海洲书院"+s2+"班",

"结果",https://www.doczj.com/doc/066534765.html,R MA TION_MESSAGE);

}

else if ( s1.equals("02") )

{/*当s1字符串是“02”时,弹出信息对话框。上面显示:该学生是瀛洲书院X班,X的取值是s2的字符串。*/

JOptionPane.showMessageDialog(this,"该学生是瀛洲书院"+s2+"班",

"结果",https://www.doczj.com/doc/066534765.html,RMA TION_MESSAGE);

}

else if ( s1.equals("03") )

{/*当s1字符串是“03”时,弹出信息对话框。上面显示:该学生是郁洲书院

X班,X的取值是s2的字符串。*/

JOptionPane.showMessageDialog(this,"该学生是郁洲书院"+s2+"班",

相关主题
文本预览
相关文档 最新文档