实验八基于图形用户界面的JDBC程序开发
- 格式:doc
- 大小:100.00 KB
- 文档页数:12
1淮海工学院计算机工程学院实验报告书课程名:面向对象程序设计A实验题目: 基于图形界面的JDBC程序开发班级:软嵌151学号:2015123349姓名:陈正宁一.实验目的(1)进一步理解掌握图形界面设计的步骤和方法;(2)掌握常用GUI组件的属性、方法及事件处理程序的编写;(3)理解常用的布局管理器,如BorderLayout、GridLayout、GridBagLayout、CardLayout、BoxLayout的用法,能够正确使用布局管理器对容器组件进行合理布局。
(4)掌握菜单的设计及其事件处理方法。
(5)掌握消息对话框、确认对话框、颜色对话框的用法。
(6)掌握JDBC的工作原理;(7)掌握通过JDBC-ODBC桥建立数据库连接的方法;(8)理解并能使用基本的SQL语句实现查询和增、删、改操作;(9)掌握Connection、DriverManager、Statement、ResultSet的用法;(10)能够利用JDBC实现对数据库中数据的增、删、改、查操作;(11)了解批处理和事务处理的实现方法。
二. 实验内容及要求(1)首先定义实体类,可以是教师类、学生类、图书类。
要求属性的名称和数据类型定义合理,定义必要的构造方法和若干对属性进行查询和修改的方法;定义toString()方法返回实体类的状态信息。
(2)编写图形界面的程序,合理利用标签、按钮、文本框、组合框、单选钮(或复选框)等常用组件与用户进行交互,完成对象的创建、查询、修改、删除。
要求:操作提示信息通过消息对话框显示;当有修改、删除操作时,通过确认对话框从用户处获得确认。
(3)考虑异常处理,如:当修改对象的某些属性值时,如果传入的值不合理,则拒绝操作并给出异常提示信息。
(4)正确地利用布局管理器对图形界面进行布局三.实验步骤(1)在Access或SQL Server中建立数据库及基础表。
在控制面板中正确配置ODBC数据源,并测试成功。
jdbc编程实验报告JDBC编程实验报告JDBC(Java Database Connectivity)是Java语言中用于访问数据库的API。
它提供了一种标准的方法来连接和操作各种类型的数据库,包括关系型数据库和非关系型数据库。
在本次实验中,我们将使用JDBC编程来连接MySQL数据库,并进行一些基本的操作。
实验环境:- 操作系统:Windows 10- 开发工具:Eclipse- 数据库:MySQL 8.0.23实验步骤:1. 下载并安装MySQL数据库,并创建一个名为“test”的数据库。
2. 在Eclipse中创建一个Java项目,并添加MySQL的JDBC驱动jar包。
3. 编写Java代码,连接MySQL数据库,并进行一些基本的操作,如插入、查询、更新和删除数据。
下面是一个简单的示例代码:```javaimport java.sql.*;public class JdbcDemo {public static void main(String[] args) {Connection conn = null;Statement stmt = null;ResultSet rs = null;try {// 加载MySQL的JDBC驱动Class.forName("com.mysql.cj.jdbc.Driver");// 连接MySQL数据库conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?ser verTimezone=UTC", "root", "123456");// 创建Statement对象stmt = conn.createStatement();// 插入数据String sql = "INSERT INTO student (name, age, gender) VALUES ('Tom', 18, 'male')";stmt.executeUpdate(sql);// 查询数据sql = "SELECT * FROM student";rs = stmt.executeQuery(sql);while (rs.next()) {System.out.println(rs.getInt("id") + "\t" + rs.getString("name") + "\t" + rs.getInt("age") + "\t" + rs.getString("gender"));}// 更新数据sql = "UPDATE student SET age = 19 WHERE name = 'Tom'"; stmt.executeUpdate(sql);// 删除数据sql = "DELETE FROM student WHERE name = 'Tom'";stmt.executeUpdate(sql);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {try {if (rs != null) rs.close();if (stmt != null) stmt.close();if (conn != null) conn.close();} catch (SQLException e) {e.printStackTrace();}}}```在上面的代码中,我们首先加载MySQL的JDBC驱动,然后使用DriverManager.getConnection()方法连接MySQL数据库。
基于图形界面的JDBC程序开发淮海工学院计算机科学系实验报告书课程名: 面向对象程序设计题目 : 基于图形界面的JDBC程序开发姓名 :班级:学号:评语:成绩: 指导教师:批阅时间: 年月日《面向对象程序设计》实验报告 - 1 -实验四基于图形界面的JDBC程序开发实验目的和要求目的:(1)理解JDBC的工作原理,熟悉java.sql包中与数据库访问相关的类及其用法,如DriverManager、 Connection、Statement、ResultSet。
(2)熟悉利用JDBC进行数据库访问的步骤:—加载JDBC驱动程序(Class.forName()—建立数据库连接(DriverManager.getConnection())—发布,,,命令(stmt=Con.createStatement(),stmt.executeQuery())取结果集并处理(ResultSet的next()方法和.get,,,()方法) ——关闭连接,释放对象(close())(3)掌握建立ODBC数据源的方法,会使用JDBC-ODBC Bridge进行数据库访问。
要求:(1) 进行规范的数据库设计~正确地定义关系数据表的结构及表间联系(包括:字段的数据类型、宽度、精度、主键、外键、缺省值)。
(2)要求界面布局紧凑、流畅、美观~实现的功能较为完善(3)本实验分两次完成~第一次可以先做一些准备测试~旨在熟悉,,,, ,,,编程接口中相关类的使用方法~测试中可以先基于字符界面实现功能~再逐步过渡到图形界面实验内容编写图形界面程序~利用JDBC实现图书,同学通讯录,校园卡,团员,教师,学生管理系统。
(任选1题~也可自拟题目~但需指导教师同意:)实验步骤(1)在Access或SQL Server中建立数据库及基础表。
在控制面板中正确配置,,,,数据源~并测试成功。
(2)编写图形界面的Application~利用JDBC-ODBC Bridge进行数据库访问~实现要求的功能。
广州中医药大学医学信息工程学院实验报告课程名称:网络数据库编程专业班级:计算机科学与技术( 2010 )级学生学号:2010081126学生姓名:吕吕实验名称:实验成绩:课程类别:必修□限选 公选□其它□实验八 WEB常用设计模式的应用实验类型:应用性实验实验日期: 2013.04.24[实验目的]1.熟悉J2EE的构架。
2.掌握MVC设计模式的应用3.熟悉JSP+TAG模式的应用[实验内容](可参考示例)(以下为理论题)1.选用一熟悉的基于WEB的管理信息系统,如用MVC设计模式,请分别写出对应的M、V、C模块,并用实例说明如何实现,画出对应的示意图等。
答:MVC英文即Model-View-Controller,即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层。
目前Web学生信息管理系统都能支持多平台访问与控制,采用分布数据管理方式。
学生可以通过网络实现信息查询、选课、个人信息统计、下载学习资料、上传作业、报告乃至实现网络化学习,该系统主要有如下几个功能模块:基于MVC架构进行开发设计,MVC组件类型和对应的功能模块如下图所示:该学生信息管理系统中,对应的M、V、C模块如下图所示:2.MVC模式与JAVABEAN+Servlet+JSP有什么区别?答:MVC是模型(Model),视图(View)和控制(Controller)的缩写,其目的实现Web系统的职能分工。
其中Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现;View层用于与用户的交互,通常用JSP来实现;Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。
所以说,MVC模式是一种软件设计的典型模式,JA V ABEAN+Servlet+JSP 是MVC实现的具体技术。
实验报告
学院计算机学院班级学号姓名
课程名称Java程序设计实验日期
实验名称数据库应用开发成绩
实验目的:深入理解JDBC数据库驱动程序的概念,掌握JDBC提供的访问数据库相关接口和类的应用,掌握使用JDBC的Java数据库应用程序开发的基本步骤和方法。
实验条件:使用JDK和Eclipse
实验目的
本实验要求学生使用JDBC提供的接口和类编写一个Java应用程序,实现对学生数据信息的查询、删除、插入、更新等操作。
学生数据库(student)在MySQL数据库服务器中创建。
1. 在MySQL中创建学生数据库student,其中一个学生信息表stuinfo结构如下:
图1 stuinfo表结构
2. 设计一个Java程序,界面如图2所示,实现以下功能:
(1)点击“全部检索”按钮,检索stuinfo表的所有记录,显示在上面的JTable组件中;
(2)输入查询学号,点击“查询”按钮,查询该学生信息显示在左边面板中,查询不到时弹出信息提示。
(3)左边面板中输入学生信息,点击“添加”按钮,将此学生信息插入stuinfo表中,弹出插入是否成功的提示框。
(4)点击“删除”按钮,依据上边学号值删除该学生记录,弹出删除是否成功的提示框。
(5)点击“更新”按钮,依据上边学号值更新该学生的其它信息,弹出更新是否成功的提示框。
实验结果
实验总结
每次对学生进行增删改查后,表要实时变化。
我在界面的代码中写了一个refresh函数,每当有有数据变化,它都会将当前表所在的JScrollPane移除,之后TableModel再从数据库中读取数据,重新建立一个表格,再将其添加到新建的JScrollPane中,放到界面中去。
项目名称:用户管理系统开发环境:1. JDK 6.02. Eclipse3.3或MyEclipse6.03. Oracle 10g软件功能:1.注册功能: 用户可以注册成本软件的用户。
(注:权限是普通用户)如下图:2.登录功能: 用户输入用户名和密码。
断用户是否存在存在:提取用户的权限权限如果是:管理员的话则显示如下图权限如果是:普通用户的话则显示如下图:3.普通用户的修改功能普通用户可以修改自己的name ,pass ,mail 不能修改权限和ID。
运行效果如下图:4.普通用户的查询功能普通用户可以查询自己的详细信息运行效果如下图:5.管理员的添加功能管理员的添加和普通用户的注册一样。
Id自动分配。
权限是普通用户:运行效果如图:6.管理员的修改功能:管理员可以修改任何人的信息。
(注:可以把普通用户修改成管理员)根据id 修改某个用户信息运行效果如图:7.管理员的查询功能:管理员可以有三个查询方式:运行效果如图:1.全部查询:运行效果如图:2.根据id查询某一个用户:运行效果如图:3.根据用户名查询:支持模糊查询运行效果如图:8.管理员的删除功能:运行效果如图:工作流程图:import java.sql.Connection;import java.sql.SQLException; import java.sql.Statement;public class administrator { final static connection connect= new connection();final static Connection conn = connect.connectDbByOci();String selectAdminTable = "select *from admintable";String adminTable = "create table admintable(username varchar(20))"; String selectAdmin = "select * from admintable whereusername='admin'"; String insertDefaultAdmin = "insert into admintable(username) values('admin')"; String selectAdminOnUsertable = "select * from usertable where username='admin'";String insertAdminToUsertable = "insert into usertable(username,passwd,usermail)values('admin','1234','admin@1234')";public administrator(){ try { Statement stmt = conn.createStatement(); //stmt.executeUpdate(selectAdmin);stmt.executeUpdate(selectAdminTable);//查看管理员的表是否存在if (stmt!=null) {stmt.close();}}catch(SQLException e){ try { Statement stmt = conn.createStatement(); //stmt.executeUpdate(defaultAdmministator); stmt.executeUpdate(adminTable);//创建管理员表 if (stmt!=null) {stmt.close();用户注册用户登录判断用户是否存存在 普通用户Y esNo判断用户权限 管理员普通用户管理员修改个人信息查询个人信息查询用户添加用户删除用户修改用户查询全部用户 根据ID 查询 根据NAME 查}}catch (SQLException a){a.printStackTrace();}}try{Statement stmt = conn.createStatement();if(stmt.executeUpdate(selectAdmin)==0)//查看有没有admin这个管理员账号{stmt.executeUpdate(insertDefaultAdmin);}if(stmt.executeUpdate(selectAdminOnUsertable)==0){stmt.executeUpdate(insertAdminToUsertable);}if (stmt!=null){stmt.close();}}catch(SQLException e){e.printStackTrace();}}public administrator(String username,String passwd,String usermail)//可提供创建管理员的方法{String insertAdmintable = "insert into admintable(username) values('"+username+"')";String selectAdminuser = "select * from usertable where username='"+username+"'";String insertAdminUser = "insert into usertable(username,passwd,usermail) values('"+username+"','"+passwd+"','"+usermail+"')";try{Statement stmt = conn.createStatement();stmt.executeUpdate(insertAdmintable);if(stmt.executeUpdate(selectAdminuser)==0){stmt.executeUpdate(insertAdminUser);}else{System.out.println("更新失败!请换个管理员用户名");}if (stmt!=null){stmt.close();}}catch (SQLException c){c.printStackTrace();}}}import java.sql.*;public class connection {final static String sDBDriver = "oracle.jdbc.driver.OracleDriver";final static String sConnStr = "jdbc:oracle:oci8:system/manager@ORCLLGG";//oci方法//final static String sConnStr = "jdbc:oracle:thin:@localhost:1521:ORCLLGG";//thin方法连接数据库public connection(){}public Connection connectDbByOci(){Connection conn=null;try{Class.forName(sDBDriver);//conn = DriverManager.getConnection(sConnStr,"sys as sysdba","oracle");conn = DriverManager.getConnection(sConnStr);}catch (Exception e){System.out.println("error:"+e.getMessage());}return conn;}}import java.sql.Connection;import java.sql.SQLException;import java.sql.Statement;//import java.util.Scanner;public class CreateUserTable {final static connection connect= new connection();final static Connection conn = connect.connectDbByOci();String createUserinfo = "create table usertable(id number,username varchar(20),passwd varchar(20),usermail varchar(20))";//存放用户信息表String selectUserTable = "select * from usertable";//定义触发器String idSeq = "create sequence user_id start with 1 increment by 1 nomaxvalue";String selectSeq = "select sequence_name from all_sequences where sequence_name='USER_ID'";String idTrigger = "create or replace trigger id_trg before insert on usertable for each row begin if inserting then select user_id.nextval into :new.id from dual;end if;end;";public CreateUserTable(){try{Statement stmt = conn.createStatement();/*if (stmt.executeUpdate(selectMailTable) != 0)//存放用户邮箱的表selectMailTable{stmt.executeUpdate(query);}*/stmt.executeUpdate(selectUserTable);//查看是否有这个用户表if (stmt!=null){stmt.close();}}catch(SQLException e){try{Statement stmt = conn.createStatement();stmt.executeUpdate(createUserinfo);//创建用户表if (stmt!=null){stmt.close();}}catch (SQLException a){a.printStackTrace();}//System.out.println("ssss");}try //为用户表中的id列自动建值,默认管理员的id是1{Statement stmt = conn.createStatement();if(stmt.executeUpdate(selectSeq)==0){stmt.executeUpdate(idSeq);//序列//stmt.executeUpdate(idTrigger);//触发器}//stmt.executeUpdate(idSeq);//序列stmt.executeUpdate(idTrigger);//触发器}catch(SQLException e){e.printStackTrace();}}}public class Main {public static void main (String []args){new CreateUserTable();new administrator();new Outline().welcome();}}import java.util.Scanner;import java.sql.*;public class Outline {final static connection connect= new connection();final static Connection conn = connect.connectDbByOci();void welcome(){Scanner sc = new Scanner(System.in);System.out.println("欢迎使用neusoft的用户管理系统");System.out.println("============================");System.out.println("用户登录--------------------1");System.out.println("用户注册--------------------2");System.out.println("退出程序--------------------3");int InputNu=sc.nextInt();switch (InputNu){case 1:log();break;case 2:regedit();break;case 3:quit();break;default: System.out.println("请输入正确的号码:1|2|3");}}void log(){Scanner sc = new Scanner(System.in);System.out.println("用户登录界面");System.out.println("============================");System.out.println("请输入你的用户名");String oldname=sc.next();System.out.println("请输入你的密码");String oldpasswd=sc.next();String authtication = "select * from usertable where username='"+oldname+"' and passwd='"+oldpasswd+"'";String adminAuthtication = "select * from admintable where username='"+oldname+"'";int adminId = 0;//判断是否是管理员try{Statement stmt = conn.createStatement();if (stmt.executeUpdate(authtication) ==0){System.out.println("用户名或密码错误,请重新登录");log();}else{System.out.println("登录成功");adminId=stmt.executeUpdate(adminAuthtication);//将受影响的语句的行数返回给adminidif (adminId==0){System.out.println(oldname+"你好! "+"你的权限是:管理员");System.out.println("修改自己的信息--------------------1");System.out.println("查询自己的信息--------------------2");System.out.println("退出程序--------------------------3");int number=sc.nextInt();switch (number){case 1:{String userinfo = "select * from usertable where username='"+oldname+"'";System.out.println("你现在的信息是:");try{ResultSet rs = stmt.executeQuery(userinfo);while(rs.next()){System.out.println("用户名"+rs.getString(2)+" 密码"+rs.getString(3)+" 邮箱"+rs.getString(4));}//取查询的结果System.out.println("请输入要修改的姓名");String newname=sc.next();System.out.println("请输入要修改的密码");String newpasswd=sc.next();System.out.println("请输入要修改的邮箱");String newmail=sc.next();String alterUserinfo = "update usertable set username='"+newname+"',passwd='"+newpasswd+"',usermail='"+newmail+"' where username='"+oldname+"'";if(stmt.executeUpdate(alterUserinfo)!=0){System.out.println("修改成功");}else{System.out.println("修改失败");}if(rs!=null){rs.close();}if (stmt!=null){stmt.close();}}catch(SQLException e){e.printStackTrace();}}break;case 2:{String userinfo = "select * from usertable where username='"+oldname+"'";System.out.println("你现在的信息是:");try{ResultSet rs = stmt.executeQuery(userinfo);while(rs.next()){System.out.println("用户名"+rs.getString(2)+" 密码"+rs.getString(3)+" 邮箱"+rs.getString(4));}if (stmt!=null){stmt.close();}}catch(SQLException e){e.printStackTrace();}}break;case 3:quit();break;default: System.out.println("请输入正确的号码:1|2|3");}}else{System.out.println(oldname+"你好! "+"你的权限是:普通用户");System.out.println("添加用户--------------------1");System.out.println("删除用户--------------------2");System.out.println("修改用户--------------------3");System.out.println("查询用户--------------------4");System.out.println("程序退出--------------------5");int number=sc.nextInt();switch(number){case 1://添加用户{System.out.println("请输入用户名");String name=sc.next();System.out.println("请输入密码");String passwd=sc.next();System.out.println("请输入邮箱");String mail=sc.next();String insertUserinfo = "insert into usertable(username,passwd,usermail) values('"+name+"','"+passwd+"','"+mail+"')";String adminauthtication = "select * from usertable where username='"+name+"'";try{if(stmt.executeUpdate(adminauthtication)==0){stmt.executeUpdate(insertUserinfo);System.out.println("用户添加成功");}else{System.out.println("添加失败,用户已存在,请换个用户名");}if (stmt!=null){stmt.close();}}catch(SQLException e){e.printStackTrace();}}break;case 2://删除用户{System.out.println("请输入要删除的用户ID号");int id=sc.nextInt();String deluser="delete from usertable where id='"+id+"'";try{stmt.executeUpdate(deluser);System.out.println("删除用户成功");}catch (SQLException e){e.printStackTrace();}}break;case 3://修改用户{System.out.println("请输入要修改的用户ID");int id=sc.nextInt();System.out.println("请输入要修改的用户名");String newname=sc.next();System.out.println("请输入要修改的密码");String newpasswd=sc.next();System.out.println("请输入要修改的邮箱");String newmail=sc.next();System.out.println("请输入要修改的用户权限(admin/normal)");String newpower=sc.next();String alteruserinfo="update usertable set username='"+newname+"',passwd='"+newpasswd+"',usermail='"+newmail+"' w here id='"+id+"'";String insertadmin="insert into admintable(username) values('"+newname+"')";try{stmt.executeUpdate(alteruserinfo);System.out.println(newpower);if(newpower.equals("admin"))//字符常量的比较{stmt.executeUpdate(insertadmin);System.out.println("普通用户变为管理员用户");}System.out.println("普通用户修改成功");}catch(SQLException e){e.printStackTrace();}}break;case 4://查询用户{System.out.println("查询全部用户--------------------------1");System.out.println("根据ID查询用户------------------------2");System.out.println("根据姓名查询用户----------------------3");int snumber=sc.nextInt();if(snumber==1)//全部{String allinfo="select * from usertable";try{ResultSet rs = stmt.executeQuery(allinfo);while(rs.next()){System.out.println("ID:"+rs.getString(1)+" 用户名:"+rs.getString(2)+" 密码:"+rs.getString(3)+"邮箱:"+rs.getString(4));//可直接输出4列的全部信息}}catch (SQLException e){e.printStackTrace();}}if(snumber==2)//ID{System.out.println("请输入要查询的ID");int idnumber=sc.nextInt();String idinfo= "select * from usertable where id='"+idnumber+"'";try{ResultSet rs = stmt.executeQuery(idinfo);while(rs.next()){System.out.println("ID:"+rs.getString(1)+" 用户名:"+rs.getString(2)+" 密码:"+rs.getString(3)+"邮箱:"+rs.getString(4));//可直接输出4列的全部信息}}catch(SQLException e){e.printStackTrace();}}if(snumber==3)//姓名{System.out.println("请输入要查询的用户名(支持模糊查询)");String name=sc.next();String nameinfo= "select * from usertable where username like '%"+name+"%'";try{ResultSet rs = stmt.executeQuery(nameinfo);while(rs.next()){System.out.println("ID:"+rs.getString(1)+" 用户名:"+rs.getString(2)+" 密码:"+rs.getString(3)+"邮箱:"+rs.getString(4));//可直接输出4列的全部信息}}catch(SQLException e){e.printStackTrace();}}}break;case 5:{quit();break;}default: System.out.println("请输入正确的号码:1|2|3|4|5");}}}if (stmt!=null){stmt.close();}}catch(SQLException e){e.printStackTrace();}//System.out.println(adminId);}void regedit(){Scanner sc = new Scanner(System.in);System.out.println("用户注册界面");System.out.println("=============================");System.out.println("请输入你的用户名");String name=sc.next();System.out.println("请输入你的密码");String passwd=sc.next();System.out.println("请输入你邮箱");String mail=sc.next();String authtication = "select * from usertable where username='"+name+"'";String insertUserinfo = "insert into usertable(username,passwd,usermail) values('"+name+"','"+passwd+"','"+mail+"')";Statement stmt = null;try{stmt = conn.createStatement();if(stmt.executeUpdate(authtication)==0){stmt.executeUpdate(insertUserinfo);System.out.println("用户注册成功");}else{System.out.println("注册失败,用户已存在,请换个用户名");//quit();regedit();//循环调用}if (stmt!=null){stmt.close();}}catch(SQLException e){e.printStackTrace();}}void quit(){System.exit(0);}}。
简述jdbc的开发步骤
JDBC是Java平台中用于连接关系型数据库的标准API,它允许Java程序直接访问各种关系型数据库。
以下是JDBC的开发步骤:
1. 确定需求:在开发JDBC应用程序之前,需要明确应用程序需要连接的数据库类型、数据库地址和数据库用户名、密码等信息。
2. 下载JDBC驱动程序:从JDBC制造商的官方网站下载适用于操作系统的JDBC驱动程序。
3. 编写JDBC驱动程序的代码:编写JDBC驱动程序的代码,实现与数据库的连接,并执行各种连接和查询操作。
4. 安装和配置JDBC驱动程序:在应用程序中安装和配置JDBC驱动程序,确保它能够正确地与数据库连接。
5. 编写JDBC应用程序代码:使用JDBC API编写Java应用程序代码,实现与数据库的连接,并执行各种连接和查询操作。
6. 测试和调试:测试JDBC应用程序代码,确保它能够正确地连接到数据库并执行各种操作。
如果出现问题,调试代码并解决问题。
JDBC的开发步骤包括确定需求、下载JDBC驱动程序、编写JDBC驱动程序的代码、安装和配置JDBC驱动程序、编写JDBC应用程序代码和测试和调试。
JDBC 驱动程序的编写是连接数据库的关键,需要实现与数据库的连接和查询操作。
应用程序代码的编写则是实现与数据库交互的关键,需要使用JDBC API编写Java 应用程序代码,实现与数据库的连接和查询操作。
在开发JDBC应用程序时,需要特别注意安全问题,例如防止SQL注入和跨站脚本攻击等。
20 —20 学年第学期Java程序设计课程实验报告第8 次学院:专业:班级:姓名:学号:任课教师:// 打开链接System.out.println("连接数据库...");conn = DriverManager.getConnection(DB_URL, USER, PASS);// 执行查询System.out.println(" 实例化Statement对象...");stmt = conn.createStatement();String sql;sql = "SELECT userID, userName, score FROM chengji";ResultSet rs = stmt.executeQuery(sql);// 展开结果集数据库while (rs.next()) {// 通过字段检索int userID = rs.getInt("userID");String userName = rs.getString("userName");String score = rs.getString("score");// 输出数据System.out.print("userID: " + userID);System.out.print(", userName: " + userName);System.out.print(", score: " + score);System.out.print("\n");}// 完成后关闭rs.close();stmt.close();conn.close();} catch (SQLException se) {// 处理 JDBC 错误se.printStackTrace();} catch (Exception e) {// 处理 Class.forName 错误e.printStackTrace();} finally {// 关闭资源try {if (stmt != null) stmt.close();} catch (SQLException se2) {}// 什么都不做try {if (conn != null) conn.close();} catch (SQLException se) {se.printStackTrace();}}System.out.println("Goodbye!");}}实验结果连不上数据库遇到问题及解决方法。
java实验报告GUI与JDBCJava 实验报告:GUI 与 JDBC一、实验目的1、深入理解和掌握Java 图形用户界面(GUI)的设计和实现方法,能够使用常用的 GUI 组件创建具有交互功能的界面。
2、熟悉和掌握 Java 数据库连接(JDBC)技术,能够实现与数据库的连接、数据查询、插入、更新和删除等操作。
3、通过将 GUI 与 JDBC 结合,开发具有实际应用价值的数据库管理系统,提高综合运用 Java 知识解决实际问题的能力。
二、实验环境1、操作系统:Windows 102、开发工具:Eclipse IDE3、数据库:MySQL 80三、实验内容(一)GUI 设计1、创建一个简单的登录界面,包括用户名和密码输入框以及登录和取消按钮。
使用布局管理器对界面组件进行合理布局,使其美观、易用。
2、设计一个主界面,包含菜单、工具栏、列表框、文本框等组件。
实现菜单和工具栏的功能响应,如文件的打开、保存,数据的查询、添加、修改和删除等。
(二)JDBC 操作1、建立与 MySQL 数据库的连接,配置数据库驱动程序和连接参数。
2、实现对数据库中用户表的查询操作,将查询结果显示在列表框中。
3、完成用户信息的添加、修改和删除功能,并及时更新界面显示。
(三)GUI 与 JDBC 整合1、在登录界面中,验证用户输入的用户名和密码是否与数据库中的用户信息匹配。
若匹配成功,进入主界面;否则,提示登录失败。
2、在主界面中,通过菜单或工具栏触发相应的 JDBC 操作,实现对数据库的管理,并将操作结果实时反馈到界面上。
四、实验步骤(一)GUI 设计步骤1、创建一个新的 Java 项目,并在项目中创建一个新的 Java 类作为登录界面。
2、导入所需的 GUI 组件库,如`javaawt`和`javaxswing`。
3、使用`JFrame`类创建登录窗口,并设置窗口的标题、大小和位置等属性。
4、在窗口中添加用户名和密码输入框,使用`JTextField`类创建。
《⾯向对象程序设计》实验指导书《⾯向对象程序设计》实验指导书郭⽟柱⼴东商学院信息学院⼆0⼀0 年⼗⼆⽉⽬录实验⼀ Java基础实验实验⼆ Java⾯向对象特性试验--Java中的类、对象和⽅法实验三类的继承、多态、接⼝、访问控制符与修饰符实验四 Java资源及其利⽤实验五 Java 语⾔的异常处理实验六输⼊输出流实验七图形⽤户界⾯设计实验⼋ Java Applet及多线程试验附录1 实验报告格式实验⼀ Java 基础实验⼀、实验⽬的与要求1. 学习编写简单的Java 程序。
2. 学习掌握Java 基本数据类型及其基本运算。
3. 学习掌握Java 的基本流程控制语句。
⼆、相关知识1. 了解JDK 的⼯作环境,以及如何使⽤JDK 进⾏编程。
2. 熟悉集成软件 eclipse3.5及其使⽤。
⼆、实验内容1. 编写Hello.java 程序并运⾏。
2. ⽤Java 语⾔编写⼀个应⽤程序在屏幕上输出1000之内的素数。
3. ⼀个数如果恰好等于它的因⼦之和,这个数就称为“完数”,⽐如28=1+2+4+7+14。
编写⼀个应⽤程序在屏幕上输出1000之内的完数。
4. 求满⾜1!+2!+3!+ …+n!≤9999的最⼤整数n 。
5. ⼀个三位的整数如果它的各位数字的⽴⽅之和等于这个三位数,就称此数为⽔仙花数,⽐如 333173371++=,编写⼀个应⽤程序在屏幕上输出所有⽔仙花数。
6. 下⾯程序的输出结果是什么?实验⼆ Java⾯向对象特性试验-Java中的类、对象和⽅法⼀、实验⽬的与要求1. 掌握类的定义和使⽤。
2. 掌握对象的声明、创建和使⽤。
3. 掌握构造⽅法的定义和使⽤。
4. 掌握类⽅法(静态⽅法)和⾮类⽅法(⾮静态⽅法)的区别和使⽤。
5. 掌握成员变量和局部变量的区别和使⽤。
⼆、实验内容1. 编写⼀个Java程序,定义⼀个表⽰学⽣的类,类名Student,其成员变量有:学号、班级姓名、性别、年龄;成员⽅法:(1)获得班号(2)获得姓名(3)获得年龄(4)修改年龄;创建⼀个Student的对象,修改该对象的年龄,并输出该对象的年龄。
实验3 JDBC数据库操作
一、实验目的
1.掌握JDBC数据库操作。
2.复习Swing图形用户界面程序的编写。
二、实验环境
JDK1.7+Eclpise3.2
三、实验内容
1、编写一个程序,用一个JTable组件显示数据库shop中goods表的内容。
界面如下
点击相应的按钮完成相应的功能。
例如点击插入按钮,弹出对话框
输入数据,按确定按钮可以把记录插入数据库中,同时在JTable组件中刷新数据。
2、编写一个程序,使用Swing组件添加和查询数据库student中stuphoto表的内容。
界面
如下,点击添加菜单项,在添加学生信息界面添加学生:
点击添加学生信息按钮,添加一个学生,添加成功显示对话框:
点击查询菜单项,在查询学生信息界面查询学生信息:
四、实验结果
五、实验总结:。
应用Java Swing GUI界面技术实现的Java JDBC数据库操作技术的应用实例1.1.1问题设计一个实现对下面的EBook数据库表进行CRUD-----“增(CREATE)、删(DELETE)、改(UPDATE)、查(READER)”操作的J2SE程序。
物理数据库系统不限制,可以为MS SQLServer、MYSQL和Oracle等。
1.1.2本示例的源程序代码1、DesktopApplication程序类的功能说明实现对EBook数据库表进行CRUD-----“增(CREATE)、删(DELETE)、改(UPDATE)、查(READER)功能实现的基础上尝试了应用Java Swing GUI编程技术,理解了事件的监听机制的原理、桌面程序的布局等知识。
2、编程工具为NetBeans IDE3、本示例的数据库为MySql数据库系统4、本示例的源程序代码import javax.swing.*;import javax.swing.table.*;import java.awt.*;import java.awt.event.*;import java.util.*;import java.sql.*;class Table extends JFrame implements ActionListener{/*-------------------------------菜单栏的各项元素定义-----------------------*//*下拉菜单*/private JMenuBar menubar;private JMenu menu;private JMenuItem iselect,iinsert,idel,iupdate;/*插入时的输入框*/private JTextField Tebook_id;private JTextField Tebook_name;private JTextField Tebook_kind;private JTextField Tebook_price;/*显示标签*/private JLabel label_title;private JLabel label_id;private JLabel label_name;private JLabel label_kind;private JLabel label_price;private JLabel label_updateid; //显示更新的记录集号的标签// 出错后的提示标签private JLabel exception_interger=new JLabel("请输入数字!"); //提示出错为没有输入数字的标签private JPanel panel; //面板//private JTextArea textarea;//文本区域private Container contrainer;//容器private JButton insert_enter; // 插入确定按钮private JButton del_enter; // 删除确定按钮private JButton update_select_enter; // 更新选择按钮private JButton update_detail_enter; // 更新确定按钮//初始化表格public Table(){/*-------------------------------初始化界面----------------------*/menubar= new JMenuBar();menu = new JMenu("对数据表的处理");iselect = new JMenuItem("显示数据表");iinsert = new JMenuItem("插入数据");idel = new JMenuItem("删除数据");iupdate = new JMenuItem("更新数据");//添加监视器iselect.addActionListener(this);iinsert.addActionListener(this);idel.addActionListener(this);iupdate.addActionListener(this);menu.add(iselect);menu.add(iinsert);menu.add(idel);menu.add(iupdate);menubar.add(menu);setJMenuBar(menubar);contrainer=this.getContentPane();this.setTitle("对下面的EBook数据库表进行CRUD-");this.setSize(400,400);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);contrainer.validate();}/*显示表格的函数(JFrame)*/public void Show_Table(Vector row, Vector tableHead) {/*表格行向量*/ /*表格头名称*/contrainer.removeAll();/*-------------------------------初始化界面----------------------*/menubar= new JMenuBar();menu = new JMenu("对数据表的处理");iselect = new JMenuItem("显示数据表");iinsert = new JMenuItem("插入数据");idel = new JMenuItem("删除数据");iupdate = new JMenuItem("更新数据");//添加监视器iselect.addActionListener(this);iinsert.addActionListener(this);idel.addActionListener(this);iupdate.addActionListener(this);menu.add(iselect);menu.add(iinsert);menu.add(idel);menu.add(iupdate);menubar.add(menu);this.setJMenuBar(menubar);/*------------------------------声明表格模型----------------------*/ DefaultTableModel tableModel = new DefaultTableModel();tableModel.setDataVector(row, tableHead);/*表格使用模型*/JTable table = new JTable(tableModel);table.setRowHeight(20);JScrollPane scrollPane = new JScrollPane(table);contrainer=this.getContentPane();contrainer.add(scrollPane);contrainer.add(table);this.setTitle("对下面的EBook数据库表进行CRUD-");this.setSize(400,400);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);contrainer.validate();}/*插入新数据到表格的函数(JFrame)*/public void Insert_Table(){contrainer.removeAll();label_title = new JLabel("请输入书信息");label_id= new JLabel("自动编号");label_name= new JLabel("书名");label_kind= new JLabel("类别");label_price= new JLabel("价格");Tebook_name=new JTextField();Tebook_kind=new JTextField();Tebook_price=new JTextField();insert_enter=new JButton("提交");panel=new JPanel();panel.setLayout(null);label_title.setBounds(0, 60, 90, 60);label_id.setBounds(30, 100, 60, 25);label_name.setBounds(95, 100, 60, 25);label_kind.setBounds(160, 100, 60, 25);label_price.setBounds(230, 100, 60, 25);Tebook_name.setBounds(95, 120, 60, 25);Tebook_kind.setBounds(160, 120, 60, 25);Tebook_price.setBounds(230, 120, 60, 25);insert_enter.setBounds(305, 120, 70, 25);//对确定按钮添加侦听器ActioListenerinsert_enter.addActionListener(this);//各个元素添加到面板上panel.add(label_title);panel.add(label_id);panel.add(label_name);panel.add(label_kind);panel.add(label_price);panel.add(Tebook_name);panel.add(Tebook_kind);panel.add(Tebook_price);panel.add(insert_enter);this.setSize(400,400);contrainer=this.getContentPane();contrainer.add(panel);contrainer.validate();}/*删除数据函数(JFrame)*/public void Del_Table(){contrainer.removeAll();label_title = new JLabel("请输入要删除的书的ID号");Tebook_id = new JTextField("请输入要删除的书的ID号");del_enter = new JButton("删除");panel=new JPanel();panel.setLayout(null);label_title.setBounds(0, 60, 190, 60);Tebook_id.setBounds(30, 100, 100, 20);del_enter.setBounds(200, 120, 70, 25);//添加删除按钮的监听:del_enter.addActionListener(this);panel.add(label_title);panel.add(Tebook_id);panel.add(del_enter);this.setSize(400,400);contrainer=this.getContentPane();contrainer.add(panel);contrainer.validate();}/*选择要更新的记录号的函数(JFrame)*/public void Update_Table_Select(){contrainer.removeAll();label_title = new JLabel("请输入要更新的书的ID号");Tebook_id = new JTextField("请输入要更新的书的ID号");update_select_enter = new JButton("选择该书更新");panel=new JPanel();panel.setLayout(null);label_title.setBounds(0, 60, 190, 60);Tebook_id.setBounds(30, 100, 100, 20);update_select_enter.setBounds(200, 120, 160, 25);//添加删除按钮的监听:update_select_enter.addActionListener(this);panel.add(label_title);panel.add(Tebook_id);panel.add(update_select_enter);this.setSize(400,400);contrainer=this.getContentPane();contrainer.add(panel);contrainer.validate();}/*更新该记录的函数(JFrame)*/public void Update_Table_Detail(int ebook_id) { //获取记录集contrainer.removeAll();label_title = new JLabel("请更新该书信息");label_id= new JLabel("编号");label_name= new JLabel("书名");label_kind= new JLabel("类别");label_price= new JLabel("价格");//将文本框中内容,初始化为要修改的记录内容try{Class.forName( "com.mysql.jdbc.Driver" ); //注册Connection con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/MySql" , "root" , "wby666" );Statement prepstmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATA BLE);//出现下面这一种问题java.sql.SQLException: Before start of result set的原因是:// ResultSet 始终有一个游标指向其当前数据行。
实验4基于图形用户界面的JDBC程序开发 (2)淮海工学院计算机科学系实验报告书课程名:__ Java___________题目:_基于图形用户界面的JDBC程序开发班级:__ ___________学号:__ __________姓名:__ __________ _一、实验目的熟练运用GUI标准组件和布局管理器,正确合理地利用常用AWT和Swing组件进行图形界面的设计;理解Java的事件处理机制,正确运用Java的事件处理机制及事件委托模型编写图形界面组件的事件处理程序;理解Java多线程机制,掌握线程使用方法。
理解JDBC的数据库访问编程原理,正确利用JDBC技术编写以数据库应用为核心的软件系统,并在设计中灵活运用之前所学的Java语言面向对象的编程技术。
二、实验环境操作系统:windows 2000 或 Window XP集成开发环境:JDK1.6及以上版本三、实验学时2学时,必做实验。
四、实验容(1)进一步熟悉JavaGUI标准组件和布局管理器、正确合理地利用常用AWT和Swing组件进行图形界面的设计;理解Java的事件处理机制,正确运用Java的事件处理机制及事件委托模型编写图形界面组件的事件处理程序;实践程序调试方法、纠错能力及编程规性等;理解JDBC的数据库访问编程原理,正确利用JDBC技术编写以各种数据库应用;(2)按以下各题目具体要求调试或编写相关算法程序五、实验步骤与结果1 请按照以下功能要求编写并调试相关程序(1) 请定义一个抽象的“科学图书”类,其中包含1个公共的抽象方法:图书介绍;1个属性为:图书类别 (字符串类型);(2) 定义一个“计算机图书”子类(继承于“科学图书”类),其中包括2个域:、定价;2个构造方法:一个为无参构造方法,在该无参构造方法中将“图书类别”设置为“计算机图书”,一个带2个参数(、定价);不少于2个成员方法:分别用来查看、修改定价,图书介绍文字可自编,并编写输出计算机图书全部信息的toString()方法。
实验二JDBC编程一、目的通过Java数据库访问程序的编写、调试,使学生掌握JDBC编程的基本方法,熟悉常用的JDBC API,促进学生对概念的理解,培养动手能力。
二、基本要求学生需要按时达到指定实验室上机。
调试教学中使用的程序示例,并加以修改,增加程序的功能;实现数据库访问的优化。
完成实验后,需要按时提交实验报告。
三、实验内容(1)复习数据库SQL语句的编写。
(2)编写Java数据库(使用ODBC-JDBC驱动)公共模块。
(3)建立数据库应用模型,对数据库进行操作。
(4)调试程序,实现数据库的访问。
3.1数据源的确定可能是我不知道怎么配置,我的电脑是Windows7系统,和学校WindowsXP 系统的电脑配置方法不太一样,需要在C:\Windows\System32路径中,找到odbcad32.exe才能顺利修改数据源。
数据源设置好了以后就可以编辑代码并正常运行了。
下面以一张截图展示我的数据库3.2数据库信息查询.一3.2.1代码import java.sql.*; /*此处提供了SQL包,就可以放心使用SQL语句了*/ public class Students{public static void main(String args[]){ //look out this "S" of "string" !String driver="sun.jdbc.odbc.JdbcOdbcDriver";/*这里定义了driver做驱动器使用,为了美观事先定义,其实放在Class.forName 的括号里也是完全正确的*/String url="jdbc:odbc:students";/*此处指定了数据库,要注意两者名字一定要一样,否则找不到数据源*/ String query="select name,num,course,score from students"; //focus on the SQL language :select...from... ! /*需要执行的SQL语句*/Connection con=null; /*链接的定义*/Statement s=null; /*Statement对象的定义,两者赋值null 是为了在try块出现异常的时候不会被判断为逻辑错误,认为变量没有赋值*/try{ /*第一个try块实现了驱动器的启动*/Class.forName(driver); //look out this "class" should write in Huge one!/*注意此处的Class需要大写!*/}catch(ClassNotFoundException e){System.err.println("ClassNotFoundException:"+e.getMessage());}try{ /*第二个try块实现查询功能*/con=DriverManager.getConnection(url);/*刚刚定义的url在这里用上,此时程序才真正与数据库相连*/s=con.createStatement(); /*新建一个Statement*/ResultSet r=s.executeQuery(query); /*query在这里用上,执行SQL语句,也就是按照我们的要求实现我们想完成的功能*/System.out.println("name:" + " num:" + " course:" + " score:");while(r.next()){ /*逐行查询,只要有值就执行while里的语句*//*注意以下的每一项name,num等都要与数据库中的题目想吻合*/ String r1=r.getString("name");String r2=r.getString("num");String r3=r.getString("course");String r4=r.getString("score");/*注意这些名字一定要与数据库中的名字吻合!当然也可以用数字代替,但是我的数据库第一列是ID,所以要注意name是2,num是3,以此类推*/System.out.println(r1+ r2+ r3+ r4);}}catch(SQLException e){e.printStackTrace();}finally{try{s.close(); /*关闭Statement对象*/con.close(); /*关闭连接*/}catch(SQLException e){e.printStackTrace();}} System.out.println("i am lagent");/*这条语句是一开始用于查找错误使用的*/ }}3.2.2运行截图13.3数据库信息查询.二3.3.1代码import java.sql.*;import java.util.*;public class Statement1{ /* pay attention the name of class must not be the same with the public style ! The first time i named it "Statement" so that it can't run successfully *//*英文是编程当时留下的痕迹,当时讲类名写作Statement,与关键字相同,因此出错不能正常运行,我的总结是在拿不准的情况加一个数字就可以避免这样的尴尬情况*/public static void main(String arg[]){String driver="sun.jdbc.odbc.JdbcOdbcDriver";String url="jdbc:odbc:Students";String query="select * from students where score > 90"; /*整个程序与第一次编写的没有太大变动和突破,主要是对SQL功能的了解和语句利用的熟练,当时的想法是多写多体会,没考虑创新,在此也就不对语句做重复分析了*/ Connection con=null;Statement s=null;try{Class.forName(driver);}catch(ClassNotFoundException e){System.err.println("ClassNotFoundException:"+e.getMessage());}try{con=DriverManager.getConnection(url);s=con.createStatement();ResultSet r=s.executeQuery(query);System.out.println("name:"+" num:"+" course:"+" score");while(r.next()){String r1=r.getString("name");String r2=r.getString("num");String r3=r.getString("course");String r4=r.getString("score");System.out.println(r1+r2+r3+r4);}}catch(SQLException e){e.printStackTrace();}finally{try{s.close();con.close();}catch(SQLException e){e.printStackTrace();}}}}3.3.2运行截图23.4数据库信息查询.三3.4.1代码import java.sql.*;import java.util.*;import java.io.*;public class PreparedStatement1{public static void main(String arg[]){String driver="sun.jdbc.odbc.JdbcOdbcDriver";String url="jdbc:odbc:Students";String query="select * from students where score > ?";/*要实现按键盘输入的参数来选择查询数据库中的数据,因此需要用“?”*/ Connection con=null;PreparedStatement ps=null;ResultSet r=null;try{Class.forName(driver);}catch(ClassNotFoundException e){System.err.println("ClassNotFoundException:"+e.getMessage());}try{System.out.println("您想要查询分数的下限是:");con=DriverManager.getConnection(url);BufferedReader br=new BufferedReader(new InputStreamReader(System.in));/*带有缓冲区,可以实现从键盘的输入,从字符流中对文本*/try{int ms=Integer.parseInt(br.readLine().trim());/*将键盘输入的参数赋值给ms*///this told me to pay a try and catch , so i put them in a try kuaips=con.prepareStatement(query);/*注意在这里就实现预编译了,这里要注意prepare:小些打头,不是prepared*/ ps.setInt(1,ms); /*1是付给第一个“?”,这里就只有1个*/r=ps.executeQuery();/*因为已经预编译,这里不用在写query*/ }catch(Exception e){System.out.println(e);}System.out.println("name:"+" num:"+" course:"+" score");while(r.next()){String r1=r.getString("name");String r2=r.getString("num");String r3=r.getString("course");String r4=r.getString("score");System.out.println(r1+r2+r3+r4);}}catch(SQLException e){e.printStackTrace();}finally{try{ps.close();con.close();}catch(SQLException e){e.printStackTrace();}}}}3.4.2运行截图31.程序开始运行的程序界面:2.输入参数后的程序界面:3.5数据库信息的增添、删除、修改3.5.1代码import java.sql.*;public class ALL{Connection con=null;Statement s=null;PreparedStatement ps=null;String driver="sun.jdbc.odbc.JdbcOdbcDriver";String url="jdbc:odbc:students";String query="select name,num,course,score from students";public void init(){ /*用init()将定义的对象和变量都初始化*/ try{Class.forName(driver);}catch(ClassNotFoundException e){System.err.println("ClassNotFoundException:"+e.getMessage());}try{con=DriverManager.getConnection(url);s=con.createStatement();}catch(SQLException e){e.printStackTrace();}}public void output(){ /*先输出数据库的数据*/ try{ResultSet r=s.executeQuery(query);System.out.println("name:" + " num:" + " course:" + " score:");while(r.next()){String r1=r.getString("name");String r2=r.getString("num");String r3=r.getString("course");String r4=r.getString("score");System.out.println(r1+ r2+ r3+ r4);}}catch(SQLException e){e.printStackTrace();}}public void add(){try{System.out.println("增加语句之后:");s.executeUpdate("INSERT INTO students(name,num,course,score) V ALUES('三毛','20115407','JA V A高级应用',59)");/*执行更新方法,注意V ALUES后所赋的值对V ALUES前的数据库题目要一一对应,而且在所赋的值一定是用单引号包括*/}catch(Exception e){e.printStackTrace();}}public void change(){try{System.out.println("改变分数之后");ps=con.prepareStatement("UPDATE students SET score=0 WHERE name='三毛'");/*将name为三毛的一栏数据中的score改为0*/ps.executeUpdate();}catch(Exception e){e.printStackTrace();}}public void destroy(){try{s.close();con.close();ps.close();}catch(SQLException e){ e.printStackTrace();}}public static void main(String arg[]){ALL a=new ALL();try{a.init();a.output();a.add();a.output();a.change();a.output(); /*把需要实现的功能分开放在方法中,再在主函数中调用,逻辑清晰而且十分简洁漂亮*/}catch(Exception e){e.printStackTrace();}finally{a.destroy();}}}3.5.2运行截图4四、实验方法与实验步骤(1)根据课堂所学知识,写出JDBC编程的步骤,熟悉JDBC编程所用的类及接口,如Connection、Statement、ResultSet等等;(2)创建程序所要访问的数据库,打开控制面板,建立ODBC数据源,记录给数据库所起的数据源名称。
实验八 JDBC编程一、实验目的熟悉使用JDBC来进行数据库应用程序的设计,熟悉通过JDBC接口编程访问数据库并对数据库进行操作。
二、实验要求1.认真完成实验内容并得到正确的程序运行结果。
2.为你的程序加上注释,使得其清晰可读。
3.利用调试程序来修改你程序的逻辑错误4.本次实验要求写实验报告;三、实验原理■什么是JDBC?JDBC技术事实上是一种能通过JAVA语言访问任何结构化数据库的应用程序接口(API)。
相对于ODBC(Open Database Connectivity开放数据库连接)的解释,可以把JDBC看作Java Database Connectivity(Java数据库连接)。
JDBC是由一组用Java语言编写的类与接口组成。
现在,JDBC已成为一种供工具/数据库开发者使用的标准API,用户可以用纯Java API来编写数据库的应用程序。
使用JDBC可以很容易地把SQL语句传送到任何关系型数据库中。
换言之,用户不需要为每一个关系数据库单独写一个程序。
用JDBC API写出唯一的程序,能够将SQL语句发送到相应的任何一种数据库。
Java与JDBC的结合,使程序员可以只写一次数据库应用软件后,就能在各种数据库系统上运行。
■在客户端通过JDBC来访问和操纵数据库的流程。
->建立与数据库的连接;->创建语句对象;->执行查询并返回结果集对象;->处理结果集对象;->关闭结果集和语句对象;->提交更新;->关闭与数据库的连接。
四、主要仪器及耗材计算机及Eclipse软件五、实验内容与步骤使用一个数据库管理系统(access、sql server或mysql)创建一张表,表名student,字段:学号、姓名、性别、出生日期,并在该表中录入至少3条数据。
编写GUI程序,在窗口内创建学号、姓名、性别、出生日期对应的标签及文本框,学号文本框中输入学号后,从数据库查询出对应的学生信息,并在相应文本框中显示。
实验4基于图形用户界面的JDBC程序开发 (2)淮海工学院计算机科学系实验报告书课程名:__ Java___________题目:_基于图形用户界面的JDBC程序开发班级:__ ___________学号:__ __________姓名:__ __________ _一、实验目的熟练运用GUI标准组件和布局管理器,正确合理地利用常用AWT和Swing组件进行图形界面的设计;理解Java的事件处理机制,正确运用Java的事件处理机制及事件委托模型编写图形界面组件的事件处理程序;理解Java多线程机制,掌握线程使用方法。
理解JDBC的数据库访问编程原理,正确利用JDBC技术编写以数据库应用为核心的软件系统,并在设计中灵活运用之前所学的Java语言面向对象的编程技术。
二、实验环境操作系统:windows 2000 或 Window XP集成开发环境:JDK1.6及以上版本三、实验学时2学时,必做实验。
四、实验内容(1)进一步熟悉JavaGUI标准组件和布局管理器、正确合理地利用常用AWT和Swing组件进行图形界面的设计;理解Java的事件处理机制,正确运用Java的事件处理机制及事件委托模型编写图形界面组件的事件处理程序;实践程序调试方法、纠错能力及编程规范性等;理解JDBC的数据库访问编程原理,正确利用JDBC技术编写以各种数据库应用;(2)按以下各题目具体要求调试或编写相关算法程序五、实验步骤与结果1 请按照以下功能要求编写并调试相关程序(1) 请定义一个抽象的“科学图书”类,其中包含1个公共的抽象方法:图书介绍;1个属性为:图书类别 (字符串类型);(2) 定义一个“计算机图书”子类(继承于“科学图书”类),其中包括2个域:出版社、定价;2个构造方法:一个为无参构造方法,在该无参构造方法中将“图书类别”设置为“计算机图书”,一个带2个参数(出版社、定价);不少于2个成员方法:分别用来查看出版社、修改定价,图书介绍文字可自编,并编写输出计算机图书全部信息的toString()方法。
(3) 编写一个图形用户界面,用来测试能否正确创建计算机图书类的对象、能否正常调用其方法,参考界面如下。
必须实现的基本功能是:1)单击图中的“新增计算机图书”按钮,则可显示出新增的计算机图书信息(显示信息的控件不限,用文本域、列表框、表格均可),要求添加的计算机图书不少于2本,如下图所示:图1 运行截图——新增计算机图书2)单击图中的“修改定价”按钮,可修改其中某本图书的定价,并在下方显示出修改后的结果请按照实验内容具体要求完成相关设计与编程,实验步骤;(1) 程序代码import java.awt.*;import java.awt.event.*;class CM extends Frame implements ActionListener{CMBook start; //当做链表的开头Panel 操作栏;Label 出版社,定价,显示;TextField 出版社栏,定价栏;Button 新增计算机图书,修改定价;TextArea 显示内容;CM(){super("计算机图书类操作图形用户界面");start=null;显示=new Label();显示内容=new TextArea();显示内容.setSize(80,50);新增计算机图书=new Button("新增计算机图书");修改定价=new Button("修改定价");新增计算机图书.addActionListener(this);修改定价.addActionListener(this);操作栏=new Panel();操作栏.setSize(60,5);出版社=new Label("出版社");定价=new Label("定价");出版社栏=new TextField(10);定价栏=new TextField(5);操作栏.add(出版社);操作栏.add(出版社栏);操作栏.add(定价);操作栏.add(定价栏);操作栏.add(新增计算机图书);操作栏.add(修改定价);setTitle("计算机图书类操作的图形界面");add(操作栏,BorderLayout.NORTH);add(显示内容,BorderLayout.CENTER);add(显示,BorderLayout.SOUTH);setBounds(300,300,500,500);setVisible(true);validate();}public void actionPerformed(ActionEvent e){if(e.getSource()==新增计算机图书){String one=出版社栏.getText();String two=定价栏.getText();if(Integer.parseInt(two)<0){显示.setText("价格不能为负数");}else{CMBook mid=new CMBook(one,Integer.parseInt(two));mid.next=start;start=mid;显示内容.append(mid.toString());}}else if(e.getSource()==修改定价){int pricenew;CMBook point;String one,two,three;one=出版社栏.getText();two=定价栏.getText();point=start;while(true){if(point==null){显示.setText("查找不到该类别");break;}if(point.出版社.equals(one)){point.定价=Integer.parseInt(two);显示内容.append("价格修改完成"+point.toString());break;}else{point=point.next;}}}}}abstract class Book{String 图书类别;abstract String 图书介绍();}class CMBook extends Book{CMBook next; //额外增加一个引用String 出版社;int 定价;String 图书介绍(){return "书籍是人类进步的阶梯";}CMBook(){图书类别="计算机图书";next=null;}CMBook(String 出版社,int 定价){this.出版社=出版社;this.定价=定价;图书类别="计算机图书";next=null;}String 查看出版社(){return 出版社;}void 修改定价(int 定价){this.定价=定价;}public String toString(){return ("类别"+图书类别+"|出版社"+出版社+"|定价"+定价+"图书介绍|书籍是人类进步的阶梯\n");}}public class Bookcdx{public static void main(String args[]){new CM();}}(2) 相应运行结果2、(选做题) 改正以下程序中出现的错误,并进行注释说明import java.applet.applet;import java.awt.*;public class test extends Applet{Label prompt1,prompt2;TextField inputNo1,inputName1Department MyDept1;void init(){ prompt1=new Label("请输入部门的编号:");inputNo1=new TextField(5);prompt2=new Label("请输入部门的名称:");inputName1=new TextField(5);add(prompt1);add(inputNo1);add(prompt2);add(inputName1);MyDept1=new Department ( );inputNo1.addAction(this);}public paint(graphic g){g.drawstring(MyDept1.toString(),20,100);}public void action(ActionEvent e){if(e.getSource==inputNo1)MyDept1.setDeptNo(inputNo1.getText());else if(e.getSource()=inputName1)MyDept1.m_DeptName=new String(inputName1.getText()); repaint();return True;}}final class Department{int m_DeptNo=10;static m_DeptName;String getDeptNo(){return m_DeptNo;}setDeptNo(int newno){if(newno>0){m_DeptNo=newno;return true;}elsereturn false;}public String toString(){return("部门编号:"+getDeptNo()+"; "+"部门名称:" +m_DeptName+"; ");}}改正:import java.applet.*;// 引入包import java.awt.*; // 引入包import java.awt.event.*;//分号public class Test extends Applet implements ActionListener // extend错误{Label prompt1,prompt2;TextField inputNo1,inputName1;//分号Department MyDept1;public void init() //少public{ prompt1=new Label("请输入部门的编号:");inputNo1=new TextField(5);prompt2=new Label("请输入部门的名称:");inputName1=new TextField(5);add(prompt1);add(inputNo1);add(prompt2);add(inputName1);//添加inputName1MyDept1=new Department ( );inputNo1.addActionListener(this);//添加thisinputName1.addActionListener(this);this.setVisible(true);//显示输出}public void paint(Graphics g)// 单词错误Graphics{g.drawString(MyDept1.toString(),20,100); //drawString}public void actionPerformed(ActionEvent e)//action 拼写错误{if(e.getSource()==inputNo1)MyDept1.setDeptNo(Integer.parseInt(inputNo1.getText())); //类型转换成字符else if(e.getSource()==inputName1)//判断是相等用==MyDept1.m_DeptName=new String(inputName1.getText());//repaint();//return True; //返回为空不需要}}class Department //final不需要{int m_DeptNo=10; //分号String m_DeptName; //类型没有给出String getDeptNo() //S{return Integer.toString(m_DeptNo); //类型}boolean setDeptNo(int newno)//返回类型没有给出{if(newno>0){m_DeptNo=newno;return true;}elsereturn false;}public String toString() //S{return("部门编号:"+getDeptNo()+"; "+"部门名称:" +m_DeptName+"; ");}}3、(选做题) 请按照以下功能要求编写并调试相关程序实验内容:(1) 熟练Tomcat安装与配置;(2) 熟练servlet部署、三种开发方式;(3) 练习JDBC连接;(4) 练习基于JDBC与Servlet的数据库查询、更新(添加、删除、修改)(一)实验步骤:熟悉Tomcat安装,servlet部署步骤;(1) 依次创建WEB-INF、classes、lib、web.xml等目录结构(2) 完成相关Servlet程序并调试(二)以继承HttpServlet方式开发Servlet,完成基于Servlet的JDBC连接(数据库选择SQLServer2000以上)和数据查询应用。