用JDBC写一个学生管理系统(添加、删除、修改、查询学生信息)
首先需要用Navicat Premium创建一个student表
用Java连接好MySQL数据库(需要copy一个mysql-connector-java-5.1.44-bin.jar包,该包可在网上找到)后,我们开始用Java写一个学生管理系统:
我们首选需要定义好添加、删除、修改、查询的方法,并把他们放到DBLink类中:
package com.zzuer.tool;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;public class DBLink {/*** 连接MySQL数据库实例test* 这里都需要引入java.sql.···jar包* 因为一下三个方法都要连接,所以直接定义一个连接的方法,为了简化代码* @return*/private Statement createStatement(){try {//加载驱动Class.forName("com.mysql.jdbc.Driver");//连接MySQL数据库,并返回Connection类型的对象String url = "jdbc:mysql://127.0.0.1/test";//此处链接本地的MySQL数据库中的实例testConnection connection = DriverManager.getConnection(url, "root", "root");//用户名和密码都为root(因计算机有所不同)//创建Statement对象,相当于 Navicat Premium 中 New Query,并返回return connection.createStatement();} catch (Exception e) {e.printStackTrace();}//若连接异常,则返回nullreturn null;}/*** 添加、删除、修改学生信息* @param sql 要执行的SQL语句*/public boolean update(String sql) {Connection connection = null;Statement statement = null;try {//调用createStatement()方法statement = createStatement();//执行SQL语句,并返回影响的行数int affect = statement.executeUpdate(sql);//无论怎样都要先执行finally里的语句之后,再执行return;return affect>0;} catch (Exception e) {e.printStackTrace();} finally {//释放资源close(connection,statement);}return false;}/*** 查询学生信息* @param sql*/public void select(String sql) {Connection connection = null;Statement statement = null;ResultSet resultset = null;try {statement = createStatement();//执行sql语句,并把学生信息存储在resultset资源中resultset = statement.executeQuery(sql);if(resultset.next()) {//next指向一行数据,执行完后跳到下一行,你可以近似把它看C语言中的“指针”String id = resultset.getString("id");String name = resultset.getString("name");String mobile = resultset.getString("mobile");String address = resultset.getString("address");System.out.println("学号:"+id+",姓名:"+name+",手机号:"+mobile+",地址:"+address);} else {System.out.println("系统异常,无法查询!");}} catch (Exception e) {e.printStackTrace();} finally {close(resultset,connection,statement);}}/*** 判断一个学生是否存在* 本质上还是查询学生信息,只是返回值不同,有则返回true,无则返回false* @param sql* @return*/public boolean exist(String sql) {Connection connection = null;Statement statement = null;ResultSet resultset = null;try {statement = createStatement();resultset = statement.executeQuery(sql);return resultset.next();//若存在则返回学生信息} catch (Exception e) {e.printStackTrace();} finally {//要及时释放资源close(resultset,connection,statement);}return false;//若不存在则返回false}/*** 定义一个close方法,主要是为了简化代码,* 因为上面三个都要释放资源* @param connection* @param statement*/private static void close(Connection connection,Statement statement) {try {if (connection != null) {connection.close();}} catch (SQLException e) {e.printStackTrace();}try {if (statement != null) {statement.close();}} catch (SQLException e) {e.printStackTrace();}}/*** 与上面close()方法属于重载* @param resultset* @param connection* @param statement*/private static void close(ResultSet resultset,Connection connection,Statement statement) {try {if (resultset != null) {resultset.close();}} catch (SQLException e) {e.printStackTrace();}close(connection,statement);}
}
主类:
import java.util.Scanner;import com.zzuer.tool.DBLink;public class Main {static DBLink db = new DBLink();public static void main(String[] args) {System.out.println("*********************************");System.out.println("*\t\t\t\t*");System.out.println("*\t欢迎使用学生信息管理系统\t*");System.out.println("*\t\t\t\t*");System.out.println("*********************************");while (true) {menu();}}static void menu() {System.out.println("1、添加学生信息");System.out.println("2、删除学生信息");System.out.println("3、修改学生信息");//地址传递System.out.println("4、查询学生信息");//nameSystem.out.println("请输入操作,以Enter键结束:");Scanner scanner = new Scanner(System.in);int option = scanner.nextInt();switch (option) {case 1:{System.out.println("请输入学号:");String id = scanner.next();String sql = "select id from student where id='"+id+"'";if(db.exist(sql)) {System.out.println("该学号已存在,无法添加!");return;}System.out.println("请输入姓名:");String name = scanner.next();System.out.println("请输入手机号:");String mobile = scanner.next();System.out.println("请输入地址:");String address = scanner.next();sql = "insert into student(id,name,mobile,address) values ('"+id+"','"+name+"','"+mobile+"','"+address+"')";if(db.update(sql)) {System.out.println("添加成功!");return;}System.out.println("系统异常,添加失败");break;}case 2:{System.out.println("请输入要删除学生的学号:");String id = scanner.next();String sql = "select id from student where id='"+id+"'";if(!db.exist(sql)) {System.out.println("该学号不存在,无法删除!");return;}sql = "delete from student where id='"+id+"'";if(db.update(sql)) {System.out.println("删除成功!");return;}System.out.println("系统异常,删除失败!");break;}case 3:{System.out.println("请输入要修改学生的学号:");String id = scanner.next();String sql = "select id from student where id='"+id+"'";if(!db.exist(sql)) {System.out.println("该学号不存在,无法修改!");return;}System.out.println("请输入新的姓名:");String name = scanner.next();System.out.println("请输入新的手机号:");String mobile = scanner.next();System.out.println("请输入新的地址:");String address = scanner.next();sql = "update student set name='"+name+"',mobile='"+mobile+"',address='"+address+"' where id='"+id+"'";if(db.update(sql)) {System.out.println("修改成功!");}System.out.println("系统异常,修改失败!");break;}case 4:{System.out.println("请输入要查询学生的学号:");String id = scanner.next();String sql = "select id from student where id='"+id+"'";if(!db.exist(sql)) {System.out.println("该学号不存在,查询无果!");return;}sql = "select id,name,mobile,address from student where id='"+id+"'";db.select(sql);break;}default:System.out.println("I'm Sorry,there is not the "+option+" option,please try again.");}}
}
相关文章:

tensorflow在训练和验证时监视不同的summary的操作
如果想在训练和验证时监视不同的summary,将train summary ops和val summary ops放进不同的集合中即可。 train_writer tf.summary.FileWriter(log_dir /train, sess.graph) val_writer tf.summary.FileWriter(log_dir /val, sess.graph)# 假设train_loss和val_l…

Anaconda3 离线安装和配置 Django-3.2.7 使用 MySQL-5.7 数据库
Django文档 Settings / Core Settings / DATABASES 一节阐述了django与数据库交互配置的内容。 先在 MySQL 5.7 版本数据库中创建一个名为 learning_log_db 的数据库,和名为 myuser 的用户,并分配权限。 create databases learning_log_db; create use…

用JDBC写一个学生管理系统(添加、删除、修改、查询学生信息)(二)
本文上接用JDBC写一个学生管理系统(添加、删除、修改、查询学生信息) 这次主要是对上一文中的查询方法做一下调整,用创建内部类的方法来实现学生信息的查询。 我们先要定义一个接口IRowMapper: import java.sql.ResultSet;public…

(原)ubuntu中使用conda安装tensorflow-gpu
转载请注明出处: https://www.cnblogs.com/darkknightzh/p/9834567.html 参考网址: https://www.anaconda.com/blog/developer-blog/tensorflow-in-anaconda/ 之前的一篇,直接安装tensorflow的: https://www.cnblogs.com/darkknig…
SVO中 Inverse Compositional Image Alignment方法的学习笔记
SVO中 Inverse Compositional Image Alignment方法的学习笔记这篇文章光流法简介逆向光流法结尾这篇文章 在SVO系统中的"Relaxation Through Feature Alignment"部分使用的是一种特别的LK光流法:the inverse compositional Lucas-Kanade algorithm&#x…

Head First设计模式之目录
只有沉淀、积累,才能远航;沉沉浮浮,脚踏实地。 这本书已经闲置了好久,心血来潮,决定写个目录,让自己坚持看完这本书 创建型模式 抽象工厂模式(Abstract factory pattern): 提供一个接口, 用于创建相关或依赖…

HANA 数据库备份hang住的解决办法
今天遇到 HANA 数据库备份hang住的情况。经过查 SAP NOTE 解决,记录一下过程。两个NOTE如下: 2452735 - HANA Backup failing with "[447]: backup could not be completed: [110122] A data backup cannot be created because another data backu…

简单DP【p2642】双子序列最大和
Description 给定一个长度为n的整数序列,要求从中选出两个连续子序列,使得这两个连续子序列的序列和之和最大,最终只需输出最大和。一个连续子序列的和为该子序列中所有数之和。每个连续子序列的最小长度为1,并且两个连续子序列之…

JDBC工具类
本文主要是将JDBC最基础的增删改查的工具类的代码详细的罗列出来: 一、我们先来看一看项目结构: 二、配置JDBC工具类 1.我们先处理异常 我们知道几乎不可能一次性就写出完美的代码,都是要经过很多次的调试才行,那在调试过程中就难免会出现…

SVO 学习笔记(三)
SVO 学习笔记(三)这篇博客InitializationFrame_Handler_MonoprocessFirstFrameprocessSecondFrameprocessFramerelocalizeFrame结尾这篇博客 这篇博客将介绍SVO源代码中的frame_handler_mono、initialization两个文件的代码流程。前者是SVO系统类&#x…

CMAKE设置INSTALL工程,分别设置头文件、Lib和DLL的输出路径
使用CMAKE管理工程,可以设置工程中的INSTALL项目运行时安装的路径,使用命令:install。 可以简单的设置安装文件的路径和文件夹: set(head_files//要安装的头文件 ) install(TARGETS ${head_files} DESTINATION ${CMAKE_BINARY_DI…

2021年中国工业互联网安全大赛核能行业赛道writeup之hacker
附加题 hacker,题目描述:hacker,附件下载 hackerhttps://download.csdn.net/download/qpeity/33230528解压缩得到一个EXE文件 ARE_YOU_SDPD.exe,在一个文件夹下运行看一下。 用 IDA 反汇编一下,发现找不到程序入口&am…

利用人工智能(Magpie开源库)给一段中文的文本内容进行分类打标签
当下人工智能是真心的火热呀,各种原来传统的业务也都在尝试用人工智能技术来处理,以此来节省人工成本,提高生产效率。既然有这么火的利器,那么我们就先来简单认识下什么是人工智能吧,人工智能是指利用语音识别、语义理…

动态环境下的SLAM:DynaSLAM 论文学习笔记
动态环境下的SLAM:DynaSLAM 论文学习笔记这篇文章论文摘要系统流程相关环节的实现方法神经网络检测图中动态物体(Mask R-CNN)Low-Cost Tracking使用多视图几何的方法检测图中动态物体(Multi-view Geometry)跟踪与建图&…

用C语言编写:判断一个≥2的整型数是否存在于斐波那契数列中?
自己写的,感觉挺有成就感的,就展示出来吧! 判断一个≥2的整型数是否存在于斐波那契数列中? 若存在,则返回第几项;若不在,则返回-1 #include <stdio.h> long generate(long n);//函数声…

团队作业8——第二次项目冲刺(Beta阶段)--第六天
会议照片: 燃尽图: 项目进展: 练习模式能够给出正确的答案,部分模块正在正在测试。 团队贡献比: 队员 角色 团队贡献比 陈麟凤 PM 17% 张志杰 DEV 18% 黄海鸿 TEST 16% 康建灿 TEST 16% 许明涛 DEV…

2021年中国工业互联网安全大赛核能行业赛道writeup之隐写
附件题:隐写 题目描述:隐写 附件下载: 2021-10-12T15_44_19.17491400_00scene.jpg.zip-网络攻防文档类资源-CSDN下载 先用 010Editor 查看这个图片,能直接看到图片的头部是否完整正常,能直接看到是否隐藏了fla…

SVO 学习笔记(深度滤波)
SVO 学习笔记(深度滤波)这篇博客论文中的深度滤波深度滤波的代码流程更新Seed对象初始化Seed对象结尾这篇博客 这篇博客将介绍SVO论文中的Mapping部分,主要介绍深度滤波器在获取新的图像帧后,更新相应地图点深度的过程。ÿ…

寻找孪生素数(当p为素数时,p+2也为素数)
数学家希尔伯特在1900年国际数学家大会的报告上提出一个“孪生素数猜想”,即: 存在无穷多个素数p,使得p 2是素数。p和p2这一对差为2的素数,被称为“孪生素数”。 看起来,这个猜想是成立的,我们总能找到很多…

C++利用cin输入时检测回车的方法
今天做TJU的OJ ,其中一道题是先读入一个字符串,再读入一个整数,循环往复,直到字符串是空,也就是说回车键结束循环。 但是cin对空格和回车都不敏感,都不影响继续读入数据,所以需要一种新的方式检…

使用grep过滤make的输出内容
make的输出内容其实分为两种,有些是到标准输出,有些是到标准错误,由于标准输出和标准错误默认都是屏幕,所以平时区分不出来, 实际上一般是error和warning信息到标准错误,其余的到标准输出。 如果要过滤erro…

2021年中国工业互联网安全大赛核能行业赛道writeup之机房密码
附件题:机房密码 题目描述: (具体描述忘记了) 经过黑客人员的不屑努力,在上位机上发现了登录密码的一半信息,剩下的一半要靠你们继续努力辣!!! ZmxhZyU3Qmgwd19hX0M 附件…

ORB-SLAM2系统的实时点云地图构建
ORB-SLAM2系统的实时点云地图构建这篇博客点云地图构建的流程代码介绍点云地图构建类对象小调整获取关键帧点云地图构建与叠加在地图中设置当前相机位置点云地图到Octomap的转换地图效果结尾这篇博客 (PS:修改于2020-9-21,添加了关于System和Tracking类…

使用maven导入jar包
我们都经历过自己写代码时有时就要引用一些第三方的jar包,这个我们都会,但在公司里进行团队开发时,是不允许我们自己导入jar包的,是由项目组长之类的统一导入jar包,我们在这里来了解一下这个过程: a、先创建…

Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法...
Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法 www.MyException.Cn 发布于:2012-09-15 19:09:28 浏览:164次0Struts2中action接收参数的三种方法及ModelDriven和Preparable接口结合JAVA反射机制的灵活…

关于CSS的长度单位及颜色表示
长度单位 1.q 1/4mm. 2.px 计算机语言中的像素。大多数网页制作常用图片分辨率为72,即每英寸像素为72,1英寸等于2.54cm。那么通过换算可以得出每厘米等于28像素。 3.em 它是描述相对于应用在当前元素的字体尺寸,所以它也是相对长度单位。一班浏览器字体大…

2021年中国工业互联网安全大赛核能行业赛道writeup之鱿鱼游戏
目录 一、尝试 二、Writeup 附加题 鱿鱼游戏(来自最近一部很火的韩剧) 题目描述: 小王由于操作不规范,误将不明U盘插入到上位机中,导致上位机中的某些关键文件被加密,但攻击者在U盘中还留下了一个可执行…

视觉惯性SLAM: VI ORB-SLAM
视觉惯性SLAM: VI ORB-SLAM这篇博客视觉惯性SLAM预备知识符号说明:相机投影变换矩阵IMU数据更新方程IMU数据的预积分VI ORB-SLAM各环节工作方式InitializationTrackingLocalMappingLoop ClosingFull BAIMU初始化估计bgb_{g}bg估计尺度sss和重力向量gWg_{W}gW&am…

AEC、AGC、ANS在视音频会议中的作用?
AGC是自动增益补偿功能(Automatic Gain Control),AGC可以自动调麦克风的收音量,使与会者收到一定的音量水平,不会因发言者与麦克风的距离改变时,声音有忽大忽小声的缺点。ANS是背景噪音抑制功能(…

Java中的拆箱与装箱
我们先来了解一下拆箱与装箱的概念: 装箱:将基本数据类型转换为包装类; 拆箱:将包装类转换为基本数据类型 我们来看两串代码: Integer b1 127;Integer b2 127;System.out.println(b1b2);//trueInteger b3 128;Inte…