1.实验目的 (2)掌握JDBC的常用方法,能够通过JDBC存储、查询、更改MySql数据库。 2.实验内容和步骤 (1)在数据库里新建一个学生表,学生主要信息如下,需要建立主键; 学号 文本 性别 文本 姓名 文本 家庭住址 文本 出生年月 文本 联系电话 文本 (2)新建一个学生类; (3)新建一个主函数类; a) 主函数里新建插入学生方法;insertStu(传入学号、姓名、性别、家庭住址、出生年月、联系电话6个参数),无返回值; b) 主函数里新建根据学号删除学生的方法deleteStu,无返回值; c) 主函数里新建新建根据学号更新学生的方法;updateStu(传入学号、姓名、性别、家庭住址、出生年月、联系电话6个参数),无返回值。 d) 主函数里新建根据学号查询学生的方法,query(传入学号),返回一个学生对象; e) 主函数里新建Main函数,调用插入函数,插入2个男生,3个女生;再删除一个女生,再更新一个男生,再查询一个男生。

时间: 2024-04-21 17:27:54 浏览: 108
ZIP

用JDBC向Students表中插入数据

本次实验需要使用Java编写JDBC程序,完成以下操作: 1. 在MySQL数据库中创建学生表,表结构如下: ```sql CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, -- 主键,自增长 `number` varchar(20) NOT NULL, -- 学号 `name` varchar(20) NOT NULL, -- 姓名 `gender` varchar(4) NOT NULL, -- 性别 `address` varchar(100) NOT NULL, -- 家庭住址 `birthday` varchar(20) NOT NULL, -- 出生年月 `phone` varchar(20) NOT NULL, -- 联系电话 PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` 2. 创建一个学生类,包含学号、姓名、性别、家庭住址、出生年月、联系电话等属性,以及对应的`get`和`set`方法; ```java public class Student { private int id; // 主键 private String number; // 学号 private String name; // 姓名 private String gender; // 性别 private String address; // 家庭住址 private String birthday; // 出生年月 private String phone; // 联系电话 // 构造方法、get/set方法省略 } ``` 3. 创建一个主函数类,包含以下方法: (1)插入学生方法`insertStu`,向学生表中插入一条学生记录; ```java public static void insertStu(String number, String name, String gender, String address, String birthday, String phone) throws SQLException { Connection conn = null; PreparedStatement ps = null; try { // 获取数据库连接 conn = getConn(); // 构造SQL语句 String sql = "INSERT INTO student(number, name, gender, address, birthday, phone) VALUES (?, ?, ?, ?, ?, ?)"; // 创建PreparedStatement对象 ps = conn.prepareStatement(sql); // 设置参数 ps.setString(1, number); ps.setString(2, name); ps.setString(3, gender); ps.setString(4, address); ps.setString(5, birthday); ps.setString(6, phone); // 执行SQL语句 ps.executeUpdate(); } finally { // 释放资源 close(conn, ps, null); } } ``` (2)删除学生方法`deleteStu`,根据学号删除一条学生记录; ```java public static void deleteStu(String number) throws SQLException { Connection conn = null; PreparedStatement ps = null; try { // 获取数据库连接 conn = getConn(); // 构造SQL语句 String sql = "DELETE FROM student WHERE number=?"; // 创建PreparedStatement对象 ps = conn.prepareStatement(sql); // 设置参数 ps.setString(1, number); // 执行SQL语句 ps.executeUpdate(); } finally { // 释放资源 close(conn, ps, null); } } ``` (3)更新学生方法`updateStu`,根据学号更新一条学生记录; ```java public static void updateStu(String number, String name, String gender, String address, String birthday, String phone) throws SQLException { Connection conn = null; PreparedStatement ps = null; try { // 获取数据库连接 conn = getConn(); // 构造SQL语句 String sql = "UPDATE student SET name=?, gender=?, address=?, birthday=?, phone=? WHERE number=?"; // 创建PreparedStatement对象 ps = conn.prepareStatement(sql); // 设置参数 ps.setString(1, name); ps.setString(2, gender); ps.setString(3, address); ps.setString(4, birthday); ps.setString(5, phone); ps.setString(6, number); // 执行SQL语句 ps.executeUpdate(); } finally { // 释放资源 close(conn, ps, null); } } ``` (4)查询学生方法`query`,根据学号查询一条学生记录; ```java public static Student query(String number) throws SQLException { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { // 获取数据库连接 conn = getConn(); // 构造SQL语句 String sql = "SELECT * FROM student WHERE number=?"; // 创建PreparedStatement对象 ps = conn.prepareStatement(sql); // 设置参数 ps.setString(1, number); // 执行查询操作 rs = ps.executeQuery(); // 解析查询结果 if (rs.next()) { Student stu = new Student(); stu.setId(rs.getInt("id")); stu.setNumber(rs.getString("number")); stu.setName(rs.getString("name")); stu.setGender(rs.getString("gender")); stu.setAddress(rs.getString("address")); stu.setBirthday(rs.getString("birthday")); stu.setPhone(rs.getString("phone")); return stu; } else { return null; } } finally { // 释放资源 close(conn, ps, rs); } } ``` (5)主函数`main`,调用插入函数,插入2个男生,3个女生;再删除一个女生,再更新一个男生,再查询一个男生。 ```java public static void main(String[] args) throws SQLException { // 插入2个男生 insertStu("20180001", "张三", "男", "北京市朝阳区", "2000-01-01", "13800138001"); insertStu("20180002", "李四", "男", "北京市海淀区", "2000-02-02", "13900139001"); // 插入3个女生 insertStu("20180003", "王五", "女", "北京市西城区", "2000-03-03", "13600136001"); insertStu("20180004", "赵六", "女", "北京市东城区", "2000-04-04", "13700137001"); insertStu("20180005", "周七", "女", "北京市丰台区", "2000-05-05", "13500135001"); // 删除一个女生 deleteStu("20180004"); // 更新一个男生 updateStu("20180002", "王麻子", "男", "北京市石景山区", "2000-02-02", "13900139002"); // 查询一个男生 Student stu = query("20180002"); System.out.println(stu.getNumber() + " " + stu.getName() + " " + stu.getGender() + " " + stu.getAddress() + " " + stu.getBirthday() + " " + stu.getPhone()); } ``` 4. 连接MySQL数据库,获取数据库连接的方法`getConn`和释放资源的方法`close`,可以放在一个工具类中; ```java public class JdbcUtil { private static final String DRIVER = "com.mysql.jdbc.Driver"; private static final String URL = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&characterEncoding=utf-8"; private static final String USERNAME = "root"; private static final String PASSWORD = "123456"; // 获取数据库连接 public static Connection getConn() throws SQLException { try { Class.forName(DRIVER); } catch (ClassNotFoundException e) { e.printStackTrace(); } return DriverManager.getConnection(URL, USERNAME, PASSWORD); } // 释放资源 public static void close(Connection conn, Statement stmt, ResultSet rs) { try { if (rs != null) { rs.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if (stmt != null) { stmt.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } ``` 完成以上步骤后,运行主函数,即可在MySQL数据库中插入、删除、更新、查询学生记录。
阅读全文

相关推荐

最新推荐

recommend-type

JDBC查询返回数据集一直为空,明明数据库(MySQL)有数据的解决办法

在使用Java的JDBC进行MySQL数据库操作时,有时可能会遇到这样一个困扰:明明数据库中存在数据,但是通过JDBC执行查询语句后返回的数据集却始终为空。这种情况通常是由于编码问题导致的,具体来说,是项目编码与...
recommend-type

MySql5.x升级MySql8.x的方法步骤

MySQL是世界上最受欢迎的关系型数据库管理系统之一,从MySQL 5.x版本升级到MySQL 8.x版本可以享受到更多新特性和性能优化。以下是一个详细的升级过程,包括关键步骤和注意事项。 **一、准备工作** 在升级之前,...
recommend-type

mysql数据库修改添加Date格式列的方法

在MySQL数据库中,修改或添加一个...通过以上步骤,你可以在MySQL数据库中创建、修改和操作Date格式的列,并在Java应用程序中进行相应的处理。确保对数据库操作进行适当的安全性和性能优化,以保证系统的稳定性和效率。
recommend-type

如何更改MySQL数据库的编码为utf8mb4

通过以上步骤,你的MySQL数据库将成功切换到utf8mb4编码,从而能更全面地支持各种Unicode字符,提供更加全球化和兼容性的数据存储环境。在进行这些操作时,务必备份数据,以防出现意外情况。同时,考虑到不同场景和...
recommend-type

Weka连接访问MySQL数据库的办法

总之,通过以上步骤,您可以成功地配置Weka以连接到MySQL数据库,从而利用Weka的强大功能处理和分析存储在MySQL中的数据。这在数据挖掘和机器学习任务中非常有用,特别是当您的数据量大或者需要实时更新数据库时。
recommend-type

黑板风格计算机毕业答辩PPT模板下载

资源摘要信息:"创意经典黑板风格毕业答辩论文课题报告动态ppt模板" 在当前数字化教学与展示需求日益增长的背景下,PPT模板成为了表达和呈现学术成果及教学内容的重要工具。特别针对计算机专业的学生而言,毕业设计的答辩PPT不仅仅是一个展示的平台,更是其设计能力、逻辑思维和审美观的综合体现。因此,一个恰当且创意十足的PPT模板显得尤为重要。 本资源名为“创意经典黑板风格毕业答辩论文课题报告动态ppt模板”,这表明该模板具有以下特点: 1. **创意设计**:模板采用了“黑板风格”的设计元素,这种风格通常模拟传统的黑板书写效果,能够营造一种亲近、随性的学术氛围。该风格的模板能够帮助展示者更容易地吸引观众的注意力,并引发共鸣。 2. **适应性强**:标题表明这是一个毕业答辩用的模板,它适用于计算机专业及其他相关专业的学生用于毕业设计课题的汇报。模板中设计的版式和内容布局应该是灵活多变的,以适应不同课题的展示需求。 3. **动态效果**:动态效果能够使演示内容更富吸引力,模板可能包含了多种动态过渡效果、动画效果等,使得展示过程生动且充满趣味性,有助于突出重点并维持观众的兴趣。 4. **专业性质**:由于是毕业设计用的模板,因此该模板在设计时应充分考虑了计算机专业的特点,可能包括相关的图表、代码展示、流程图、数据可视化等元素,以帮助学生更好地展示其研究成果和技术细节。 5. **易于编辑**:一个良好的模板应具备易于编辑的特性,这样使用者才能根据自己的需要进行调整,比如替换文本、修改颜色主题、更改图片和图表等,以确保最终展示的个性和专业性。 结合以上特点,模板的使用场景可以包括但不限于以下几种: - 计算机科学与技术专业的学生毕业设计汇报。 - 计算机工程与应用专业的学生论文展示。 - 软件工程或信息技术专业的学生课题研究成果展示。 - 任何需要进行学术成果汇报的场合,比如研讨会议、学术交流会等。 对于计算机专业的学生来说,毕业设计不仅仅是完成一个课题,更重要的是通过这个过程学会如何系统地整理和表述自己的思想。因此,一份好的PPT模板能够帮助他们更好地完成这个任务,同时也能够展现出他们的专业素养和对细节的关注。 此外,考虑到模板是一个压缩文件包(.zip格式),用户在使用前需要解压缩,解压缩后得到的文件为“创意经典黑板风格毕业答辩论文课题报告动态ppt模板.pptx”,这是一个可以直接在PowerPoint软件中打开和编辑的演示文稿文件。用户可以根据自己的具体需要,在模板的基础上进行修改和补充,以制作出一个具有个性化特色的毕业设计答辩PPT。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

提升点阵式液晶显示屏效率技术

![点阵式液晶显示屏显示程序设计](https://iot-book.github.io/23_%E5%8F%AF%E8%A7%81%E5%85%89%E6%84%9F%E7%9F%A5/S3_%E8%A2%AB%E5%8A%A8%E5%BC%8F/fig/%E8%A2%AB%E5%8A%A8%E6%A0%87%E7%AD%BE.png) # 1. 点阵式液晶显示屏基础与效率挑战 在现代信息技术的浪潮中,点阵式液晶显示屏作为核心显示技术之一,已被广泛应用于从智能手机到工业控制等多个领域。本章节将介绍点阵式液晶显示屏的基础知识,并探讨其在提升显示效率过程中面临的挑战。 ## 1.1 点阵式显
recommend-type

在SoC芯片的射频测试中,ATE设备通常如何执行系统级测试以保证芯片量产的质量和性能一致?

SoC芯片的射频测试是确保无线通信设备性能的关键环节。为了在量产阶段保证芯片的质量和性能一致性,ATE(Automatic Test Equipment)设备通常会执行一系列系统级测试。这些测试不仅关注芯片的电气参数,还包含电磁兼容性和射频信号的完整性检验。在ATE测试中,会根据芯片设计的规格要求,编写定制化的测试脚本,这些脚本能够模拟真实的无线通信环境,检验芯片的射频部分是否能够准确处理信号。系统级测试涉及对芯片基带算法的验证,确保其能够有效执行无线信号的调制解调。测试过程中,ATE设备会自动采集数据并分析结果,对于不符合标准的芯片,系统能够自动标记或剔除,从而提高测试效率和减少故障率。为了
recommend-type

CodeSandbox实现ListView快速创建指南

资源摘要信息:"listview:用CodeSandbox创建" 知识点一:CodeSandbox介绍 CodeSandbox是一个在线代码编辑器,专门为网页应用和组件的快速开发而设计。它允许用户即时预览代码更改的效果,并支持多种前端开发技术栈,如React、Vue、Angular等。CodeSandbox的特点是易于使用,支持团队协作,以及能够直接在浏览器中编写代码,无需安装任何软件。因此,它非常适合初学者和快速原型开发。 知识点二:ListView组件 ListView是一种常用的用户界面组件,主要用于以列表形式展示一系列的信息项。在前端开发中,ListView经常用于展示从数据库或API获取的数据。其核心作用是提供清晰的、结构化的信息展示方式,以便用户可以方便地浏览和查找相关信息。 知识点三:用JavaScript创建ListView 在JavaScript中创建ListView通常涉及以下几个步骤: 1. 创建HTML的ul元素作为列表容器。 2. 使用JavaScript的DOM操作方法(如document.createElement, appendChild等)动态创建列表项(li元素)。 3. 将创建的列表项添加到ul容器中。 4. 通过CSS来设置列表和列表项的样式,使其符合设计要求。 5. (可选)为ListView添加交互功能,如点击事件处理,以实现更丰富的用户体验。 知识点四:在CodeSandbox中创建ListView 在CodeSandbox中创建ListView可以简化开发流程,因为它提供了一个在线环境来编写代码,并且支持实时预览。以下是使用CodeSandbox创建ListView的简要步骤: 1. 打开CodeSandbox官网,创建一个新的项目。 2. 在项目中创建或编辑HTML文件,添加用于展示ListView的ul元素。 3. 创建或编辑JavaScript文件,编写代码动态生成列表项,并将它们添加到ul容器中。 4. 使用CodeSandbox提供的实时预览功能,即时查看ListView的效果。 5. 若有需要,继续编辑或添加样式文件(通常是CSS),对ListView进行美化。 6. 利用CodeSandbox的版本控制功能,保存工作进度和团队协作。 知识点五:实践案例分析——listview-main 文件名"listview-main"暗示这可能是一个展示如何使用CodeSandbox创建基本ListView的项目。在这个项目中,开发者可能会包含以下内容: 1. 使用React框架创建ListView的示例代码,因为React是目前较为流行的前端库。 2. 展示如何将从API获取的数据渲染到ListView中,包括数据的获取、处理和展示。 3. 提供基本的样式设置,展示如何使用CSS来美化ListView。 4. 介绍如何在CodeSandbox中组织项目结构,例如如何分离组件、样式和脚本文件。 5. 包含一个简单的用户交互示例,例如点击列表项时弹出详细信息等。 总结来说,通过标题“listview:用CodeSandbox创建”,我们了解到本资源是一个关于如何利用CodeSandbox这个在线开发环境,来快速实现一个基于JavaScript的ListView组件的教程或示例项目。通过上述知识点的梳理,可以加深对如何创建ListView组件、CodeSandbox平台的使用方法以及如何在该平台中实现具体功能的理解。