JDBC Java对数据库增删改查(完整案例)

news2024/9/22 19:46:14

目录

一.综合上述7个步骤,实现向student表中插入一条数据。

1、注册驱动

2 、获取数据库连接对象

3、获取发送SQL语句对象

4、编写SQL语句,SQL语句最好是先在SQLyog里面写一遍并运行一下,保证SQL语句没有语法

错误,这里sid是自增长,所以不需要写

5、执行SQL语句

DML语句:对于插入数据、修改数据、删除数据操作,都调用executeUpdate()方法,返回受影响

的行数(int类型)

6、处理结果,如果返回的受影响行数不为0,说明数据插入成功

 7、释放资源,遵循“先开后关,后开先关”的原则

二.综合上述7个步骤,实现根据学号sid删除数据库表中一条数据。

三.综合上述7个步骤,实现根据学号sid删除数据库表中一条数据。

四.结果集

4.1接受结果集

 4.2.遍历ResultSet结果集中的数据



👌 棒棒有言:生活不可能一帆风顺,总会有波折,总会有险阻。生活是个爱开玩笑的孩子,也许今天给你所有,明天又会让你一无所有,无需烦恼,该来的总会来,再黑的夜晚也会有黎明到来的那一刻。不管生活有多么曲折,只要拥有幸福的态度就能挺过漫漫长夜,就能迎来美好的明天。

👌 本章简介:JDBC(Java Data Base Connectivity,java数据库连接),是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。换言之,有了JDBC API,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问Informix数据库又编写另一个程序等等,程序员只需用JDBC API写一个程序就够了,它可向相应数据库发送SQL调用。同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次,处处运行”的优势。

简单地说,JDBC 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果。

👍  作者:get棒棒给个关注呗

👍  重要:请给个关注哦!
 

一.综合上述7个步骤,实现向student表中插入一条数据。

1、注册驱动

2 、获取数据库连接对象

3、获取发送SQL语句对象

4、编写SQL语句,SQL语句最好是先在SQLyog里面写一遍并运行一下,保证SQL语句没有语法

错误,这里sid是自增长,所以不需要写

5、执行SQL语句

DML语句:对于插入数据、修改数据、删除数据操作,都调用executeUpdate()方法,返回受影响

的行数(int类型)

6、处理结果,如果返回的受影响行数不为0,说明数据插入成功

 7、释放资源,遵循“先开后关,后开先关”的原则

package com.cxyzxc.www.examples01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * JDBC连接数据 实现向数据库jdbcdatabase里student表中插入一条数据
 * 
 * @author 程序员张小厨
 * 
 */
public class Jdbc01InsertStudent {

	public static void main(String[] args) {
		Connection connection = null;
		Statement statement = null;

		try {
			// 1、注册驱动
			Class.forName("com.mysql.jdbc.Driver");

			// 2 、获取数据库连接对象
			String url = "jdbc:mysql://127.0.0.1:3306/jdbcdatabase";
			String user = "root";
			String password = "123456";
			connection = DriverManager.getConnection(url, user, password);

			// 3、获取发送SQL语句对象
			statement = connection.createStatement();

			// 4、编写SQL语句,SQL语句最好是先在SQLyog里面写一遍并运行一下,保证SQL语句没有语法错误,这里sid是自增长,所以不需要写
			String sql = "INSERT  INTO `student`(`name`,`age`,`gender`,`phone`,`identitycard`,`address`) VALUES ('王五',21,'男','13825869876','340825200109151928','安徽合肥包河区');";

			// 5、执行SQL语句
			// DML语句:对于插入数据、修改数据、删除数据操作,都调用executeUpdate()方法,返回受影响的行数(int类型)
			// DQL语句:对于查询数据,调用executeQuery()方法,返回一个结果集(ResultSet类型)
			int result = statement.executeUpdate(sql);

			// 6、处理结果,如果返回的受影响行数不为0,说明数据插入成功
			if (result != 0) {
				System.out.println("数据插入成功");
			} else {
				System.out.println("数据插入失败");
			}

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			// 7、释放资源,遵循“先开后关,后开先关”的原则
			if (connection != null) {
				try {
					connection.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}

			if (statement != null) {
				try {
					statement.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}

		}

	}

}

二.综合上述7个步骤,实现根据学号sid删除数据库表中一条数据。

1、注册驱动

2 、获取数据库连接对象

3、获取发送SQL语句对象

4、编写SQL语句,SQL语句最好是先在SQLyog里面写一遍并运行一下,保证SQL语句没有语法

错误

 5、执行SQL语句

DML语句:对于插入数据、修改数据、删除数据操作,都调用executeUpdate()方法,返回受影响

的行数(int类型)DQL语句:对于查询数据,调用executeQuery()方法,返回一个结果集

(ResultSet类型)

6、处理结果,如果返回的受影响行数不为0,说明数据删除成功

7、释放资源,遵循“先开后关,后开先关”的原则

package com.cxyzxc.www.examples01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * JDBC连接数据 实现删除数据库jdbcdatabase里student表中的一条数据
 * 
 * @author 程序员张小厨
 * 
 */
public class Jdbc02DeleteStudent {

	public static void main(String[] args) {
		Connection connection = null;
		Statement statement = null;

		try {
			// 1、注册驱动
			Class.forName("com.mysql.jdbc.Driver");

			// 2 、获取数据库连接对象
			String url = "jdbc:mysql://127.0.0.1:3306/jdbcdatabase";
			String user = "root";
			String password = "123456";
			connection = DriverManager.getConnection(url, user, password);

			// 3、获取发送SQL语句对象
			statement = connection.createStatement();

			// 4、编写SQL语句,SQL语句最好是先在SQLyog里面写一遍并运行一下,保证SQL语句没有语法错误
			String sql = "DELETE FROM `student` WHERE `sid` = 1003;";

			// 5、执行SQL语句
			// DML语句:对于插入数据、修改数据、删除数据操作,都调用executeUpdate()方法,返回受影响的行数(int类型)
			// DQL语句:对于查询数据,调用executeQuery()方法,返回一个结果集(ResultSet类型)
			int result = statement.executeUpdate(sql);

			// 6、处理结果,如果返回的受影响行数不为0,说明数据删除成功
			if (result != 0) {
				System.out.println("数据删除成功");
			} else {
				System.out.println("数据删除失败");
			}

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			// 7、释放资源,遵循“先开后关,后开先关”的原则
			if (connection != null) {
				try {
					connection.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}

			if (statement != null) {
				try {
					statement.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}

		}

	}

}

三.综合上述7个步骤,实现根据学号sid删除数据库表中一条数据。

1、注册驱动

2 、获取数据库连接对象

3、获取发送SQL语句对象

4、编写SQL语句,SQL语句最好是先在SQLyog里面写一遍并运行一下,保证SQL语句没有语法

错误

 5、执行SQL语句

DML语句:对于插入数据、修改数据、删除数据操作,都调用executeUpdate()方法,返回受影响

的行数(int类型)DQL语句:对于查询数据,调用executeQuery()方法,返回一个结果集

(ResultSet类型)

6、处理结果,如果返回的受影响行数不为0,说明数据删除成功

7、释放资源,遵循“先开后关,后开先关”的原则

package com.cxyzxc.www.examples01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * JDBC连接数据 实现修改数据库jdbcdatabase里student表中的一条数据
 * 
 * @author 程序员张小厨
 * 
 */
public class Jdbc03UpdateStudent {

	public static void main(String[] args) {
		Connection connection = null;
		Statement statement = null;

		try {
			// 1、注册驱动
			Class.forName("com.mysql.jdbc.Driver");

			// 2 、获取数据库连接对象
			String url = "jdbc:mysql://127.0.0.1:3306/jdbcdatabase";
			String user = "root";
			String password = "123456";
			connection = DriverManager.getConnection(url, user, password);

			// 3、获取发送SQL语句对象
			statement = connection.createStatement();

			// 4、编写SQL语句,SQL语句最好是先在SQLyog里面写一遍并运行一下,保证SQL语句没有语法错误
			String sql = "UPDATE `student` SET `name`='李红',`age`=19,`gender`='女',`phone`='13111223344',`identitycard`='340825200308151936',`address`='安徽合肥高新区' WHERE `sid`=1002;";

			// 5、执行SQL语句
			// DML语句:对于插入数据、修改数据、删除数据操作,都调用executeUpdate()方法,返回受影响的行数(int类型)
			// DQL语句:对于查询数据,调用executeQuery()方法,返回一个结果集(ResultSet类型)
			int result = statement.executeUpdate(sql);

			// 6、处理结果,如果返回的受影响行数不为0,说明数据修改成功
			if (result != 0) {
				System.out.println("数据修改成功");
			} else {
				System.out.println("数据修改失败");
			}

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			// 7、释放资源,遵循“先开后关,后开先关”的原则
			if (connection != null) {
				try {
					connection.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}

			if (statement != null) {
				try {
					statement.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}

		}

	}

}

四.结果集

JDBC中执行DQL查询语句后,使用ResultSet存放查询到的结果集数据。

4.1接受结果集

ResultSet resultSet = statement.executeQuery(String sql);

1、注册驱动

2 、获取数据库连接对象

3、获取发送SQL语句对象

4、编写SQL语句,SQL语句最好是先在SQLyog里面写一遍并运行一下,保证SQL语句没有语法

错误String sql = "SELECT * FROM `student` WHERE `sid`= 1002;";

 5、执行SQL语句

// DML语句:对于插入数据、修改数据、删除数据操作,都调用executeUpdate()方法,返回受影

响的行数(int类型) DQL语句:对于查询数据,调用executeQuery()方法,返回一个结果集

(ResultSet类型)ResultSet resultSet = statement.executeQuery(sql); 

 4.2.遍历ResultSet结果集中的数据

ResultSet以表(table)结构进行临时结果的存储,需要通过JDBC API将其中的数据依次获取。

数据行指针:初始位置在第一行数据前,每调用一次boolean next()方法ResultSet的指针向下移动

一行,结果为true,表示当前行有数据。 

*resultSet.getXxx(int columnIndex):根据字段的索引顺序获取表中字段的数据,索引从1开 始,

Xxx表示字段类型 

*resultSet.getXxx(String columnLabel):根据字段的名称获取表中字段的数据。

 6、处理结果,对返回的resultSet结果集进行处理,需要将结果集中的数据取出来

 查询一条数据时,使用if判断resultSet.next()为true,说明resultSet结果集中有一条数据,

如果resultSet.next()为false,说明resultSet结果集中没有数据。

查询所有数据时,使用while循环判断resultSet.next()为true,说明resultSet结果集中还有

一条数据,如果resultSet.next()为false,说明resultSet结果集中没有数据了。

查询一条数据,根据记录中字段的索引获取字段数据

if (resultSet.next()) {
	//根据记录中字段的索引获取字段数据,字段索引从1开始
	int sid = resultSet.getInt(1);
	String name = resultSet.getString(2);
	int age = resultSet.getInt(3);
	String gender = resultSet.getString(4);
	String phone = resultSet.getString(5);
	String identitycard = resultSet.getString(6);
	String address = resultSet.getString(7);
	System.out.println(sid + "-" + name + "-" + age + "-" + gender+ "-" + phone + "-" + identitycard + "-" + address);
}

查询一条数据,根据记录中字段的名称获取字段数据

if (resultSet.next()) {
	//根据记录中字段的名称获取字段数据
	int sid = resultSet.getInt("sid");
	String name = resultSet.getString("name");
	int age = resultSet.getInt("age");
	String gender = resultSet.getString("gender");
	String phone = resultSet.getString("phone");
	String identitycard = resultSet.getString("identitycard");
	String address = resultSet.getString("address");
	System.out.println(sid + "-" + name + "-" + age + "-" + gender+ "-" + phone + "-" + identitycard + "-" + address);
}

查询所有数据,根据记录中字段的索引获取字段数据

while (resultSet.next()) {
	//根据记录中字段的索引获取字段数据,字段索引从1开始
	int sid = resultSet.getInt(1);
	String name = resultSet.getString(2);
	int age = resultSet.getInt(3);
	String gender = resultSet.getString(4);
	String phone = resultSet.getString(5);
	String identitycard = resultSet.getString(6);
	String address = resultSet.getString(7);
	System.out.println(sid + "-" + name + "-" + age + "-" + gender+ "-" + phone + "-" + identitycard + "-" + address);
}

查询所有数据,根据记录中字段的名称获取字段数据

while (resultSet.next()) {
	//根据记录中字段的名称获取字段数据
	int sid = resultSet.getInt("sid");
	String name = resultSet.getString("name");
	int age = resultSet.getInt("age");
	String gender = resultSet.getString("gender");
	String phone = resultSet.getString("phone");
	String identitycard = resultSet.getString("identitycard");
	String address = resultSet.getString("address");
	System.out.println(sid + "-" + name + "-" + age + "-" + gender+ "-" + phone + "-" + identitycard + "-" + address);
}

 

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

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

相关文章

C语言百日刷题第十二天

前言 今天是刷题第12天&#xff0c;放弃不难&#xff0c;但坚持一定很酷~ 临近期末&#xff0c;刷几套模拟题 C语言百日刷题第十二天前言选择题判断题编程题选择题 1.设a1;b2;c3;d4;则表达式a<b?a:c<d? a:d的结果是____。 A、3 B、1 C、4 D、2 正确选项&#xf…

Linux多线程(一):什么是线程?

文章目录一、前言二、什么是线程&#xff1f;三、线程是如何实现的&#xff1f;四、基本概念梳理五、后记一、前言 什么是线程&#xff1f;操作系统书籍上可能会给你这样的解释与定义&#xff1a; 线程是在进程内部运行的执行流线程比进程的执行力度更细&#xff0c;线程的调…

年底无情被裁,我面试大厂的这几个月…

2022年接近尾声&#xff0c;“金九十”今年也变成了“铜九铁十”。 大厂不断缩招&#xff0c;不容忽视的疫情影响&#xff0c;加上不断攀升的毕业生人数&#xff0c;各种需要应对的现实问题让整个求职季难上加难。 在这个异常残酷的求职季&#xff0c;很多人的困惑、面临的问…

VM系列模块基本信息

外形尺寸&#xff1a; VM501/604/608 30.0mmX26.0mmX4.3mm 贴插封装-20 VM511/614/618 60.0mmX36.0mmX4.8mm 直插-22 VM704 30.0mmX26.0mmX6.0mm 直插-20 VM704S 32.0mmX32.0mmX15.0mm 直插-20 数字接口&#xff1a;UARTI2C UART&#xff1a;TTL/R…

03-SpringBoot进阶

知识回顾 知识目标 1、SpringBoot单元测试【掌握】 2、SpringBoot 整合 MybatisPlus【重点】 3、SpringBoot添加分页插件【掌握】 4、SpringBoot定义拦截器【掌握】 5、SpringBoot使用类型转换器【掌握】 6、文件上传【掌握】 7、SpringBoot异常处理【掌握】 8、SpringBoot定…

Navicat 16 和表空间 | 第 一 部分

优点 你知道 Navicat 16 支持表空间吗&#xff1f;表空间是表&#xff08;以及索引、大型对象和长数据&#xff09;的存储结构&#xff0c;它将数据库中的数据组织成与在文件系统上存储数据的位置相关的逻辑存储组。它的主要功能是联接物理存储层和逻辑存储层。通过将表分配给表…

c盘空间怎么扩大?

电脑系统主要存储在C盘&#xff0c;用户还可能会将一些软件、文件夹存储在C盘&#xff0c;所以电脑C盘必须拥有足够充足的空间&#xff0c;为了大家更好地使用电脑&#xff0c;这里小编带来的就是电脑扩大C盘空间的教程。 1、右击桌面的计算机图标&#xff0c;然后选择管理! 2、…

过滤器的使用

过滤器的使用过滤器介绍过滤器的使用配置过滤器过滤器路径的配置规则前置、后置、环绕过滤器过滤器链过滤器的优先级过滤器介绍 过滤器(Filter)是位于客户端与服务器资源之间的一道过滤技术&#xff0c;可以在客户端请求到达目标资源之前进行预处理业务。 过滤器作用 执行多个…

【Java实战】系统设计需要注意的细节

目录 一、前言 二、设计规约 1.【强制】存储方案和底层数据结构的设计获得评审一致通过&#xff0c;并沉淀成为文档。 2.【强制】在需求分析阶段&#xff0c;如果与系统交互的 User 超过一类并且相关的 UseCase 超过 5 个&#xff0c;使用用例图来表达更加清晰的结构化需求。…

小说电子书阅读系统毕业设计,小说电子书阅读系统设计与实现,毕业设计论文源码开题报告需求分析

项目背景和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个基于web网页的电子书阅读系统&#xff0c;整个网站项目使用了B/S架构&#xff0c;基于java的springboot框架下开发&#xff1b;管理员通过后台录入信息、管理信息&#xff0c;设置网站信息&#xff0c;管理会…

4款游戏开发引擎优缺点分析

随着微信生态中&#xff0c;小程序应用指数级的增长&#xff0c;许多休闲游戏变成为了众多游戏厂商流量变现的新手段。以近期很火的“羊了个羊”为例&#xff0c;它便是我们常常所说的小游戏。 游戏和小游戏的区别 要盘点小游戏开发引擎之前&#xff0c;我们得先来了解下游戏…

vue3+ts 实现文件在线预览

一、背景 企业微信自建项目中要求PC端也能进行文件预览&#xff0c;但是企业微信提供的接口只能在移动端使用&#xff0c;通过查阅资料修改成贴合项目的方法。参考&#xff1a;https://blog.csdn.net/w_t_y_y/article/details/115767747 kkFileView官方文档 二、preview-file…

浅析能源物联网技术在校园能耗监测系统中的应用与研究

摘要:绿色环保已成为时代的主题&#xff0c;与此同时&#xff0c;节能减排也成为我国蓝天保卫战的重要措施。我国大型公共建筑年耗电量约占全国城镇总耗电量的22%&#xff0c;每平方米年耗电量是普通居民住宅的10&#xff5e;20倍&#xff0c;是欧洲、日本等发达国家同类建筑的…

《四》多线程基础——Java线程生命周期及转换

Java并发编程系列文章 《一》多线程基础——Java线程与进程的基本概念 《二》多线程基础——Java线程入门类和接口 《三》多线程基础——Java线程组和线程优先级 《四》多线程基础——Java线程生命周期及转换 《五》多线程基础——Java线程间的通信&#xff08;互斥与协作&…

Git统计代码行数;Java实现统计代码行数,忽略空行、注释行

前言 某天&#xff0c;产品叫我算下某个项目的代码行数&#xff0c;我一愣&#xff0c;这怎么统计&#xff1f;总不可能一个文件一个文件算吧&#xff1f;后面我找了下&#xff0c;git是可以统计提交到仓库的所有的代码的&#xff0c;不过有个问题&#xff0c;就是假如有些文件…

在STM32F103C8T6上使用RT_Thread Nano移植控制台和Finsh

一、移植环境&#xff1a; 开发环境&#xff1a;Keil MDK 5.33 硬件平台&#xff1a;STM32F103C8T6 RT_Thread版本&#xff1a;RT-Thread Nano V3.1.5 二、在RT-Thread Nano V3.1.5添加uart控制台 1.需要在rtconfig.h开启以下两个宏 1&#xff09;#define RT_USING_CONSO…

ITK (1)窗宽窗位的意义与设置

背景与意义 医学图像与传统可视化图像相比&#xff0c;其具有更大的“灰度”范围。如&#xff0c;普通图像&#xff08;灰度图像&#xff09;的灰度范围一般是256级&#xff08;即图像中最亮的点的灰度值定义为0&#xff0c;最亮的定义为255&#xff0c;也就是2^8&#xff0c;…

【图像处理OpenCV(C++版)】——2.1 深入理解OpenCV之Mat类及相关成员函数

前言&#xff1a; &#x1f60a;&#x1f60a;&#x1f60a;欢迎来到本博客&#x1f60a;&#x1f60a;&#x1f60a; &#x1f31f;&#x1f31f;&#x1f31f; 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义&#xff0c;适用于平时学习、工作快…

【论文阅读31】《OptCuts: Joint Optimization of Surface Cuts and Parameterization》

目录 一些疑惑 0 引言 1 introduction 2 related work 2.1 parameterization with fixed connectivity 2.2 Separate Cut Computation 3 problem statement ​编辑​ 3.1 数学形式1 3.2 数学形式2 3.3 能量函数 3.3.1 接缝线长度&#xff08;归一化&#xff09;&am…

程序员们,你会考虑使用中文编程吗?

众所周知&#xff0c;编程语言有一条无形的“鄙视链”。 Java和C#相互不服&#xff0c;并且看不起写Python的&#xff0c;Python看不起PHP&#xff0c;PHP看不起前端。而中文编程就在这个语言“鄙视链”的底端艰难生存。 有人对中文编程嗤之以鼻&#xff0c;相比于“人生苦短…