淮海工学院计算机工程院实验报告书课程名:面向对象程序设计题目:实验四基于图形界面的JDBC开发班级:D软件101学号:511020825姓名:薛思雨评语:成绩:指导教师:批阅时间:2011年月日面向对象程序设计一实验目的(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-ODBCBridge进行数据库访问。二实验内容编写图形界面程序,利用JDBC实现图书/同学通讯录/校园卡/团员/教师/学生管理系统。(任选1题,也可自拟题目,但需指导教师同意!)三实验要求(1)进行规范的数据库设计,正确地定义关系数据表的结构及表间联系(包括:字段的数据类型、宽度、精度、主键、外键、缺省值)。(2)要求界面布局紧凑、流畅、美观,实现的功能较为完善(3)本实验分两次完成,第一次可以先做一些准备测试,旨在熟悉JDBCAPI编程接口中相关类的使用方法,测试中可以先基于字符界面实现功能,再逐步过渡到图形界面。四实验步骤(1)在Access或SQLServer中建立数据库及基础表。在控制面板中正确配置ODBC数据源,并测试成功。(2)编写图形界面的Application,利用JDBC-ODBCBridge进行数据库访问,实现要求的功能。五实验主要代码面向对象程序设计面向对象程序设计面向对象程序设计面向对象程序设计面向对象程序设计面向对象程序设计面向对象程序设计六运行界面主界面:录入演示:面向对象程序设计查询演示:面向对象程序设计判断演示:面向对象程序设计删除演示:删除后再查询:学号:511020830|姓名:朱凯周|性别:男|班级:D软件101|籍贯:无锡|生日:1992-03-16|已删除。面向对象程序设计修改演示:在学号文本框内输入学号,按下回车,其他信息自动显示。面向对象程序设计把“D软件101”改成“D计算机101”面向对象程序设计修改后再查询:七实验结果的分析、体会这次实验要求要连接到Access数据库,并且可以对数据执行查询,添加,修改,删除等一些操作。首先要做好一个数据库,然后要创建一个ODBC数据源,控制面板-管理工具-数据源(ODBC),在弹出的对话框中选择相应的操作。(如果在“添加”里找不到MicrosoftAccessDriver(*mdb)的话,可以C盘-Windows-SysWOW64-ODBC数据源管理器进行相应的操作。)下面就是最关键的,建立JDBC-ODBC桥接器,[Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);]加载驱动器,接着是[Connectioncon=DriverManager.getConnection(jdbc:odbc:sun,,);]连接到数据库,用户名和口令可为空。最后是向数据库发送SQL语句,stmt=Con.createStatement(),stmt.executeQuery(),这个就是我这次代码编译没有报错,但是运行却抛出异常的问题所在,一定要注意SQL语句中文本型和整型赋值的区别,引号的用法。最后是取结果集并处理(ResultSet的next()方法和.get***()方法)在用查询executeQuery(),更新executeUpdate()语句来执行想要的操作,推荐使用预处理的方法,这样运行的速度比较快,也减轻了数据库的负担。在每一次之后完查询,更新等操作时,要关闭连接,释放对象(close())。这一次的实验还是比较辛苦的,为了找出SQL语句的错误,以后要多多注意书写的规范,减轻后面校对代码的负担。面向对象程序设计importjava.sql.*;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;//加载包。publicclassjdbc_winXsy{publicstaticvoidmain(Stringargs[]){InfoWindowwin=newInfoWindow();}}//主控函数classInfoWindowextendsFrameimplementsActionListener{Button录入=newButton(录入);//新建按钮,录入。Button查询=newButton(查询);//新建按钮,查询。Button判断=newButton(判断);//新建按钮,判断。Button删除=newButton(删除);//新建按钮,删除。Button修改=newButton(修改);//新建按钮,修改。Button清空=newButton(清空);//新建按钮,清空。TextArea显示区=newTextArea(10,68);//新建文本区,这里是长为68个字符,高为10行。InfoWindow()//与类同名的构造函数。{setLayout(newFlowLayout());/*设置布局格式,这里是FlowLayout布局,具体就是组件会按照加入的先后顺序从左到右排列,一行排满之后才会转到下一行。这里FlowLayout.LEFT指的是所有的组件左对齐。组件调用setSize()方法设置的大小无效。*/面向对象程序设计setTitle(学生信息管理-Xsy);//设置窗口标题显示区.append(\n\n\n);显示区.append(=============================================\n);显示区.append(====\n);显示区.append(==欢迎使用学生信息管理系统==\n);显示区.append(====\n);显示区.append(====\n);显示区.append(==designedby薛思雨==\n);显示区.append(=============================================\n);//欢迎界面add(newLabel(学生信息表));//添加标签:“学生信息表:”。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(newWindowAdapter(){publicvoidwindowClosing(WindowEvente)面向对象程序设计{System.exit(0);}});//添加窗口监听器,在实现“关闭窗口”这个事件时,程序退出。setVisible(true);//设置可见。setBounds(100,100,520,300);//设置弹出窗口的坐标位置和大小。前两个数/是以屏幕//左上角为原点的坐标,后两个数字,是窗口的宽与高。validate();}publicvoidactionPerformed(ActionEvente){Connectioncon;Statementstmt;ResultSetrs;PreparedStatementprestmt;try{Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);//加载驱动程序。}catch(ClassNotFoundExceptionex){}if(e.getSource()==查询)//点击查询按钮执行的操作。{try{con=DriverManager.getConnection(jdbc:odbc:sun,,);//连接数据源。stmt=con.createStatement();//发送SQL语句并处理结果rs=stmt.executeQuery(select*frominformationorderbynumber);//返回结果集。while(rs.next())//列出表中的所有信息。{Stringnumber=rs.getString(1);面向对象程序设计Stringname=rs.getString(2);Stringsex=rs.getString(3);Stringsclass=rs.getString(4);Stringnativeplace=rs.getString(5);Stringbirthday=rs.getString(6);显示区.append(学号:+number+|);显示区.append(姓名:+name+|);显示区.append(性别:+sex+|);显示区.append(班级:+sclass+|);显示区.append(籍贯:+nativeplace+|);显示区.append(生日:+birthday+|+\n);}显示区.append(===========================================================================\n);con.close();//关闭连接。}catch(SQLExceptionex){}}//“查询”按钮执行结束。elseif(e.getSource()==录入)//当点击“录入”按钮时。{LDialogdia=newLDialog(this,录入);//弹出“录入”界面。}//“录入”按钮执行结束。elseif(e.getSource()==判断)//当点击“判断”按钮时。{//弹出问题对话框。上面显示“请输入需要判断的学生学号:”,下面有空框,可以输入。Stringnumber=JOptionPane.showInputDialog(this,请输入需要判断的学生学号:,面向对象程序设计判断,JOptionPane.QUESTION_MESSAGE);charn1[],n2[];//定义两个数组n1,n2。n1=newchar[2];//n1的存放空间是2个字符。n2=newchar[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中。Strings1=newString(n1);//把n1中的信息作为字符串s1重新定义,这样方便后面使用。Strings2=newString(n2);//把n2中的信息作为字符串s2重新定义,这样就可以输