医院人员管理系统03_上午:JDBC连接数据库,完成简单的增删改查

news2024/9/9 7:26:15

文章目录

  • jdbc连接数据库
    • 什么是jdbc
    • 完成jdbc的步骤
      • 导入jar包
      • 写三个类
        • DBConn.java
          • 加载驱动类:找到对应的然后写上
          • 获取连接
          • 关闭连接
            • 代码解释
          • 最后写一个main方法调用测试一下
          • 运行结果
        • Students.java
        • StudentDao.java
  • 运行结果![](https://i-blog.csdnimg.cn/direct/ba2f9165ed954867889bfae19741d7c7.png)
  • 完整代码

jdbc连接数据库

点击目录最后面查看完整代码。

什么是jdbc

jdbc是 Java连接数据库的简称,提供连接各种常用数据库的能力。

完成jdbc的步骤

新建web动态项目

导入jar包

直接把连接的jar包拖入lib文件夹,然后build path在这里插入图片描述

写三个类

连数据库工具:util
数据访问类:dao
实体类:bean(entity)
在这里插入图片描述

DBConn.java

注意导包都是sql相关包

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
加载驱动类:找到对应的然后写上
//加载驱动类
	private static String driver = "com.mysql.jdbc.Driver";	

在这里插入图片描述

	//										navicat新建连接时的主机地址和端口号
	//                                       :127.0.0.1/
	//                           jdbc:数据库://localhost:3306/数据库名   问号及以后是字符编码设置
	private static String url = "jdbc:mysql://localhost:3306/students?useUnicode=true&characterEncoding=UTF-8";
获取连接

在这里插入图片描述

	//获取连接
	public static Connection getConnection(){
		Connection conn = null;
			//加载驱动
			Class.forName(driver);
			//获取连接
			conn = DriverManager.getConnection(url, "root","123456");//navicat新建连接时的用户名和密码
			System.out.println("连接成功");
		return conn;
	}

然后会有报错,把下面两行代码选中然后放入try/catch块即可
在这里插入图片描述
在这里插入图片描述

关闭连接

用完肯定要关啊
在这里插入图片描述

代码解释

在这里插入图片描述
写下面的代码就行,然后根据报错提示加入对应的try/catch即可

	//关闭连接
	public static void closeAll(ResultSet rs,PreparedStatement ps,Connection conn){
		if(rs != null){
				rs.close();
		}
		if(ps != null){
				ps.close();
		}
		if(conn != null){
				conn.close();
		}
	}
最后写一个main方法调用测试一下
public static void main(String[] args) {
		Connection connection = getConnection();
		closeAll(null,null,connection);
	}
运行结果

在这里插入图片描述

Students.java

实体类的代码很好写,确保和数据库字段一致即可,避免出现不一致导致的麻烦(不一致当然可以解决,但是我忘了……)
在这里插入图片描述
生成对应get,set方法,有参构造,无参构造,toString()方法。
再加一个:少了id的有参构造,因为在设计数据库时,id设置的是自增,不需要手动输入。所以在添加用户时,不用手动录入id,所以就调一个没有id的构造函数。
在这里插入图片描述
完整代码在最下面。

StudentDao.java

dao类比较规范的是写一个接口,再写一个实现类,这里为了简便,直接写在一起了。
这个就是业务控制层,在这里运行卖main就行。
用这个运行,不要发布到服务器
在这里插入图片描述

package com.web.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.web.entity.Students;
import com.web.util.DBConn;

public class StudentDao {
	
	private Connection conn = null;	
	//获取sql语句,执行
	private PreparedStatement ps = null;
	//结果集,存放数据库中获取的数据
	private ResultSet rs = null;
	/**
	 * 查询全部学生信息
	 * @return
	 */
	
	public List<Students> selectStuAll(){
		List<Students> list = new ArrayList<Students>();
		
		//获取连接,要不然你拿不到数据库数据
		conn = DBConn.getConnection();
		//执行sql语句
		String sql = "select * from stus";
		try {
			ps = conn.prepareStatement(sql);//获取执行sql的对象
			rs = ps.executeQuery();//真正执行sql语句,保存在rs
			//保存数据
			while(rs.next()){
				Students stus = new Students();
				stus.setId(rs.getInt("id"));
				stus.setName(rs.getString("name"));
				stus.setSex(rs.getString("sex"));
				stus.setAge(rs.getInt("age"));
				stus.setBirthday(rs.getString("birthday"));
				stus.setAddress(rs.getString("address"));
				
				list.add(stus);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			DBConn.closeAll(rs,ps,conn);
		}
		return list;
	}
	
	
	//查询
	public Students selectStudentById(int id){
		Students stu = null;
		//获取连接
		conn = DBConn.getConnection();
		//执行sql语句
		String sql = "select * from stus where id=?";
		try {
			ps = conn.prepareStatement(sql);//获取执行sql的对象
			//给问号赋值
			//      第几个问号,传的是什么
			//只能是?  问号是占位符
			ps.setInt(1,id);
			
			rs = ps.executeQuery();//真正执行sql语句,保存在rs
			while(rs.next()){
				stu = new Students();					
				stu.setId(rs.getInt("id"));
				stu.setName(rs.getString("name"));
				stu.setSex(rs.getString("sex"));
				stu.setAge(rs.getInt("age"));
				stu.setBirthday(rs.getString("birthday"));
				stu.setAddress(rs.getString("address"));					
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			DBConn.closeAll(rs,ps,conn);
		}		
		return stu;
	}
	
	//增加
	public void addStu(Students stu){
		conn = DBConn.getConnection();
		String sql = "insert into stus(name,sex,age,birthday,address) values(?,?,?,?,?)";
		try {
			ps = conn.prepareStatement(sql);
			ps.setString(1, stu.getName());
			ps.setString(2, stu.getSex());
			ps.setInt(3, stu.getAge());
			ps.setString(4, stu.getBirthday());
			ps.setString(5, stu.getAddress());
			//更新数据库
			ps.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			DBConn.closeAll(rs, ps, conn);
		}
	}
	
	
	//修改
	public void updateStu(Students stu){
		conn = DBConn.getConnection();
		String sql = "update stus set name=?,address=? where id = ?";
		
		try {
			ps = conn.prepareStatement(sql);
			ps.setString(1, stu.getName());
			ps.setString(2, stu.getAddress());
			ps.setInt(3, stu.getId());
			ps.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			DBConn.closeAll(rs, ps, conn);
		}
	}
	
	//删除
	public void delStu(int id){
		conn = DBConn.getConnection();
		String sql = "delete from stus where id = ?"; 
		
		try {
			ps = conn.prepareStatement(sql);
			ps.setInt(1,id);
			ps.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			DBConn.closeAll(rs, ps, conn);
		}
	}
	
	public static void main(String[] args) {
		StudentDao dao = new StudentDao();	
		
		//查询
		//Students s = dao.selectStudentById(2);
		//System.out.println(s);
		
		//添加
		
		//Students stu = new Students("Amy","女",22,"2002-12-6","临汾市");
	//	dao.addStu(stu);
		
		
		//修改
		//获取原本对象,然后对相应值继续宁修改
		//Students s = dao.selectStudentById(4);
	//	s.setName("李华华");
	//	s.setAddress("北京市");
	//	dao.updateStu(s);
		//查询所有数据
		
		//删除
		dao.delStu(7);
	List<Students> list = dao.selectStuAll();
		System.out.println(list);
	
	}
}

运行结果

完整代码

package com.web.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.web.entity.Students;
import com.web.util.DBConn;

public class StudentDao {
	
	private Connection conn = null;	
	//获取sql语句,执行
	private PreparedStatement ps = null;
	//结果集,存放数据库中获取的数据
	private ResultSet rs = null;
	/**
	 * 查询全部学生信息
	 * @return
	 */
	
	public List<Students> selectStuAll(){
		List<Students> list = new ArrayList<Students>();
		
		//获取连接,要不然你拿不到数据库数据
		conn = DBConn.getConnection();
		//执行sql语句
		String sql = "select * from stus";
		try {
			ps = conn.prepareStatement(sql);//获取执行sql的对象
			rs = ps.executeQuery();//真正执行sql语句,保存在rs
			//保存数据
			while(rs.next()){
				Students stus = new Students();
				stus.setId(rs.getInt("id"));
				stus.setName(rs.getString("name"));
				stus.setSex(rs.getString("sex"));
				stus.setAge(rs.getInt("age"));
				stus.setBirthday(rs.getString("birthday"));
				stus.setAddress(rs.getString("address"));
				
				list.add(stus);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			DBConn.closeAll(rs,ps,conn);
		}
		return list;
	}
	
	public Students selectStudentById(int id){
		Students stu = null;
		//获取连接
		conn = DBConn.getConnection();
		//执行sql语句
		String sql = "select * from stus where id=?";
		try {
			ps = conn.prepareStatement(sql);//获取执行sql的对象
			//给问号赋值
			//      第几个问号,传的是什么
			//只能是?  问号是占位符
			ps.setInt(1,id);
			
			rs = ps.executeQuery();//真正执行sql语句,保存在rs
			while(rs.next()){
				stu = new Students();					
				stu.setId(rs.getInt("id"));
				stu.setName(rs.getString("name"));
				stu.setSex(rs.getString("sex"));
				stu.setAge(rs.getInt("age"));
				stu.setBirthday(rs.getString("birthday"));
				stu.setAddress(rs.getString("address"));					
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			DBConn.closeAll(rs,ps,conn);
		}		
		return stu;
	}
	
	//增加
	public void addStu(Students stu){
		conn = DBConn.getConnection();
		String sql = "insert into stus(name,sex,age,birthday,address) values(?,?,?,?,?)";
		try {
			ps = conn.prepareStatement(sql);
			ps.setString(1, stu.getName());
			ps.setString(2, stu.getSex());
			ps.setInt(3, stu.getAge());
			ps.setString(4, stu.getBirthday());
			ps.setString(5, stu.getAddress());
			//更新数据库
			ps.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			DBConn.closeAll(rs, ps, conn);
		}
	}
	
	public void updateStu(Students stu){
		conn = DBConn.getConnection();
		String sql = "update stus set name=?,address=? where id = ?";
		
		try {
			ps = conn.prepareStatement(sql);
			ps.setString(1, stu.getName());
			ps.setString(2, stu.getAddress());
			ps.setInt(3, stu.getId());
			ps.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			DBConn.closeAll(rs, ps, conn);
		}
	}
	
	public void delStu(int id){
		conn = DBConn.getConnection();
		String sql = "delete from stus where id = ?"; 
		
		try {
			ps = conn.prepareStatement(sql);
			ps.setInt(1,id);
			ps.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			DBConn.closeAll(rs, ps, conn);
		}
	}
	
	public static void main(String[] args) {
		StudentDao dao = new StudentDao();	
		
		//查询
		//Students s = dao.selectStudentById(2);
		//System.out.println(s);
		
		//添加
		
		//Students stu = new Students("Amy","女",22,"2002-12-6","临汾市");
	//	dao.addStu(stu);
		
		
		//修改
		//获取原本对象,然后对相应值继续宁修改
		//Students s = dao.selectStudentById(4);
	//	s.setName("李华华");
	//	s.setAddress("北京市");
	//	dao.updateStu(s);
		//查询所有数据
		
		//删除
		dao.delStu(7);
	List<Students> list = dao.selectStuAll();
		System.out.println(list);
	
	}
}
package com.web.entity;

public class Students {
	private int id;
	private String name;
	private String sex;
	private int age;
	private String birthday;
	private String address;
	
	public Students(int id, String name, String sex, int age, String birthday, String address) {
		super();
		this.id = id;
		this.name = name;
		this.sex = sex;
		this.age = age;
		this.birthday = birthday;
		this.address = address;
	}
	public Students( String name, String sex, int age, String birthday, String address) {
		super();
		this.name = name;
		this.sex = sex;
		this.age = age;
		this.birthday = birthday;
		this.address = address;
	}
	
	
	public Students() {
		super();
		// TODO Auto-generated constructor stub
	}

	
	
	

	@Override
	public String toString() {
		return "Students [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + ", birthday=" + birthday
				+ ", address=" + address + "]";
	}
	
	
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getBirthday() {
		return birthday;
	}
	public void setBirthday(String birthday) {
		this.birthday = birthday;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	
}

package com.web.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBConn {
	//加载驱动类
	private static String driver = "com.mysql.jdbc.Driver";
	
	//获取连接
	//地址要记住
	//                                  137.0.0.1           数据库库名
	
	//private static String url = "jdbc:mysql://localhost:3306/students?serverTimezone=GMT%2B8";
	private static String url = "jdbc:mysql://localhost:3306/students?useUnicode=true&characterEncoding=UTF-8";

	//获取连接
	public static Connection getConnection(){
		Connection conn = null;
		try {
			//加载驱动
			Class.forName(driver);
			//获取连接
			conn = DriverManager.getConnection(url, "root","123456");
			System.out.println("连接成功");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return conn;
	}
	
	//关闭连接
	public static void closeAll(ResultSet rs,PreparedStatement ps,Connection conn){
		if(rs != null){
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if(ps != null){
			try {
				ps.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if(conn != null){
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}
	public static void main(String[] args) {
		Connection connection = getConnection();
		closeAll(null,null,connection);
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1918900.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

bC一体化:推拉联动双向引擎促增长

在数字化浪潮的推动下&#xff0c;快消品行业正面临着前所未有的变革。在过去的几十年里&#xff0c;快速消费品的渠道分销模式发展经历了几个重要的阶段。传统渠道分销模式&#xff0c;从多级分销商的“批发制胜”到“深度分销”的人海战术&#xff0c;在过去的几十年内虽各有…

工业智能网关的功能特点及应用

工业智能网关的功能特点及应用 工业智能网关作为工业互联网架构中的关键组件&#xff0c;扮演着数据桥梁与边缘计算核心的角色&#xff0c;它不仅促进了物理设备与云端平台之间的高效通信&#xff0c;还通过集成的高级功能推动了工业4.0时代的智能化转型。以下是对其功能特点及…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第二十五章 Source Insight 的安装和使用

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

智慧景区建设方案PPT(54页)

智慧景区建设方案摘要 背景简述智慧景区建设旨在通过信息技术改进和创新传统旅游景区&#xff0c;整合旅游资源和产业链&#xff0c;实现精准网络营销&#xff0c;提升旅游品牌价值&#xff0c;改善信息共享和业务协同&#xff0c;提高旅游产业链效率。基础设施包括高速光纤网络…

FunAudioLLM SenseVoice语音转录(ASR)与CosyVoice语音合成(TTS)及语音克隆使用案例;webui可视化页面操作使用

参考: https://fun-audio-llm.github.io/ 1、SenseVoice语音转录 在线体验:https://modelscope.cn/studios/iic/CosyVoice-300M 参考:https://github.com/FunAudioLLM/SenseVoice 下载: pip install -U funasr使用: from funasr import AutoModelmodel_dir = "…

Nature Climate Change | 气候暖化使土壤碳库易受微生物快速降解影响

本文首发于“生态学者”微信公众号&#xff01; 整个北半球土壤有机碳总量的一半富集在北极地区&#xff0c;其原因是气温较低导致微生物对永久冻土带土壤有机碳的分解缓慢&#xff0c;有利于有机碳的积累。但由于人类活动的影响&#xff0c;近几十年来北极出现了明显的升温&am…

第三方软件测试报告内容详解,如何获取专业软件测试报告?

在现代社会中&#xff0c;软件已经渗透到了各个行业的方方面面&#xff0c;而软件的质量也成为了企业成功的重要因素之一。然而&#xff0c;在软件开发过程中&#xff0c;由于人力、物力、时间等各种因素的限制&#xff0c;难免会出现一些问题和bug&#xff0c;而这些问题又可能…

【Linux系统】信号量(初次理解)

五个概念 多个执行流&#xff08;进程&#xff09;&#xff0c;能看到的一份资源&#xff1a;共享资源被保护起来的资源可以叫临界资源&#xff08;同步和互斥&#xff09; --- 用互斥的方式保护共享资源就叫临界资源互斥&#xff1a;任何时刻只能有一个进程在访问共享资源资源…

【待补充】【来可USB-CAN】个人使用总结

文章目录 EVN简介10. 环境搭建20. 环境测试 EVN windows7 LIKE USB-CAN简介 官网介绍、资料下载 https://www.njlike.com/product/CAN-interfaces/USBCAN/01121.html 10. 环境搭建 USB-CAN 驱动 下载地址&#xff1a;https://www.njlike.com/uploads/soft/190625/1_1425474881…

Redis实践经验

优雅的Key结构 Key实践约定&#xff1a; 遵循基本格式&#xff1a;[业务名称]:[数据名]:id例&#xff1a;login:user:10长度步超过44字节&#xff08;版本不同&#xff0c;上限不同&#xff09;不包含特殊字符 优点&#xff1a; 可读性强避免key冲突方便管理节省内存&#x…

Pandas基础03:数据排序与增删

上一节我们介绍了通过按行索引和按列索引找出相关数据的方法。本章节将进一步介绍如何筛选数据&#xff0c;并对数据进行排序、增删的方法。 示例表格和上一节相同。 1.数据筛选 Python中可以通过区域筛选&#xff0c;即获取某几行某几列的方法得到数据。例如&#xff0c;我要…

2024年了还在学pytestday1

1、按照博主的说法&#xff0c;提出疑问&#xff1a;应该在电脑本地终端安装还是在pythoncharm终端安装&#xff1f; ------在pythoncharm终端安装就行 避免老是忘记&#xff0c;还是记下来比较好。 2、在公司安装不成功&#xff0c;换豆瓣源也不行&#xff0c;连接手机热点尝…

MYSQL审批流程判断同一层级审批人是否全部通过审批

在做流程审批的时候&#xff0c;通常会出现某一层有多个审批人的情况&#xff0c;这个时候需要所有人都通过才会进入到下一步 数据结构如下图表格所示 每一个审批申请对应一个apply_id serial_no相同的代表是同一层级审批人 approval_status是审核状态 下面我们可以用一个SQL来…

Day50:单调栈 LeedCode 739. 每日温度 496.下一个更大元素 I 503. 下一个更大元素 II

739. 每日温度 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 示例 1: 输…

携程租车宝滑块和token 1002

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 前言(lianxi a…

6款文案生成器,自动生成文案告别创作烦恼

大家都知道&#xff0c;优质的文案都能为品牌和个人带来巨大的价值。但是对于许多人来说&#xff0c;要创作出优质的文案并非易事&#xff0c;有的人会因为创作灵感枯竭&#xff0c;而出现创作文案的烦恼&#xff0c;有的人会因为创作的文案需要重复修改&#xff0c;而出现文案…

STM32串口工作原理

STM32的串口是相当丰富的&#xff0c;功能也很强劲。最多可提供5 路串口&#xff0c;有分数波特率发生器、支持单线光通信和半双工单线通讯、支持LIN、智能卡协议和IrDA SIRENDEC 规范(仅串口3支持)、具有DMA等。 串口最基本的设置&#xff0c;就是波特率的设置。STM32的串口使…

太速科技-3U VPX飞腾处理器刀片计算机

3U VPX飞腾处理器刀片计算机 一 、产品概述 该产品是一款基于国产飞腾FT2000 4核或腾锐D2000 8核的高性能3U VPX刀片式计算机。产品提供了4个x4 PCIe 3.0总线接口&#xff0c;同时可配置为1个x16或2个x8 PCIe3.0接口&#xff0c;因此具有很强的扩展性&#xff0c;极大…

pwn入门--格式化字符串

pwn入门–格式化字符串 确定偏移&#xff1a; 32位&#xff1a; gdb中格式化字符串在栈上的位置的&#xff0c;左边序号值 就是偏移。 先到printf函数的调用位置&#xff1a; 观查栈上的数据&#xff1a; 64位&#xff1a; gdb中格式化字符串在栈上的位置的&#xff0c…

AI虚拟医生重塑医患关系

如今&#xff0c;越来越多的企业开始选择用AI虚拟数字人播报员替代真人出镜&#xff0c;这不仅有助于企业实现降本增效的目标&#xff0c;更能让广告传播趋向多样化和个性化。对于普通人而言&#xff0c;也摆脱了真人出镜的种种烦恼&#xff0c;让表达更加自由与便捷。AI虚拟数…