MySQL 篇- Java 连接 MySQL 数据库并实现数据交互

🔥博客主页: 【小扳_-CSDN博客】
❤感谢大家点赞👍收藏⭐评论✍

文章目录

        1.0 JDBC 概述

        2.0 实现 Java 连接 MySQL 数据库并实现数据交互的完整过程 

        2.1 安装数据库驱动包

        2.2 创建数据源对象

        2.3 获取数据库连接对象

        2.4 创建 SQL 语句

        2.5 执行 SQL 语句

        2.6 释放资源

        3.0 完整代码


        1.0 JDBC 概述

        JDBC(Java Database Connectivity)是 Java 编程语言用于与数据库进行交互的标准 API。它提供了一种统一的方式来访问不同数据库系统,并执行 SQL 查询、更新和管理数据库。

        通过 JDBC,开发人员可以轻松地连接到数据库、执行 SQL 查询、管理事务、处理异常等,实现与数据库的数据交互和管理。

        简单来说,Java 提出的一套关于数据库操作的接口,各个数据库厂商要把自己的 API 对接到适配到 JDBC 上。程序元只需要掌握一套 API 就可以操作不同的数据库了。

        2.0 实现 Java 连接 MySQL 数据库并实现数据交互的完整过程 

        2.1 安装数据库驱动包

        数据库厂商提供的这个原生 API 适配到 JDBC 转换程序,称为“数据库驱动包”。需要下载这个 .jar 文件,一个 .jar 文件通常包含了数据库厂商实现的 JDBC 接口。一个 .jar 文件是用来提供 JDBC 接口的实现,以便 Java 程序可以通过 JDBC API 与数据库进行交互。可以通过中央仓库来下载数据库驱动包:https://mvnrepository.com/

接着将 .jar 文件导入到 Java 文件目录中

1)接着,将 .jar 文件复制粘贴到 Java 文件目录中:

2)最后,右击 .jar 文件再点击添加为库:

3)添加成功的展示:

        2.2 创建数据源对象

        创建数据源是在应用程序中连接到数据库的一种常见方法。数据源通常是一个对象,它包含了连接数据库所需的信息,如 MySQL 数据库地址、用户名、密码。不同的数据库需要设置的参数有所不同。

        在 Java 中创建数据源并且连接到数据库服务器中相当于实现一个数据库客户端。

创建数据源代码:

        //1.0 创建数据源DataSource dataSource = new MysqlDataSource();((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/db01?characterEncoding=utf8&useSSL=false");((MysqlDataSource) dataSource).setUser("root");((MysqlDataSource) dataSource).setPassword("123456");

        首先 new 一个 MySQL 数据源,这里用到了向上转型,利用了多态特性。创建完数据源的对象后,需要对属性、方法进行设置:由于每一个数据库的方法都有所差别,需要用到向下转型,来专门访问数据库自己特有的方法、属性。

        比如,MySQL 中需要设置数据库服务器资源路径:

setUrl("jdbc:mysql://127.0.0.1:3306/数据库名?characterEncoding=utf8&useSSL=false") :该路径的大部分结构是不用改变的,一般情况下,只有唯一的参数,就是数据库名称。

setUser("用户名"):设置用户名,默认情况是 root ,root 是权限最大的账户。

setPassword("密码"):密码输入。

        2.3 获取数据库连接对象

        通过数据源对象获取数据库连接,以便在 Java 代码中执行数据库操作。通过得到的数据源对象 dataSource 的方法 getConnection() 从而获取数据库连接该对象。

        这个 Connection 对象,就代表着客户端与服务端之间的“连接对象”。 

代码如下:

        //2.0 与数据库建立联系Connection connection = dataSource.getConnection();

        需要注意的是,getConnection() 属于受查异常,可能会抛出 SQL Exception 异常。有两种方法解决:第一种,声明异常;第二种,捕获异常处理。

        一般来到这里,顺利的话,就可以获取 connection 对象了。

经常出错的情况:

        出错一:Connection 类型选错

        很容易根据提示,会选择错误。正确的是选择第一个 Connection 是 JDBC 中的一个接口。

        出错二: MySQL 版本与数据库驱动包的版本不一致导致的错误

        即使两者之间的大版本相同,但是小版本不相同,可能也会出错。比如,MySQL8.0 的版本与 mysql-connector-java-8.0.7-dmr.jar 数据库驱动包,大版本都是 8.0 但是小版本不一致,也有可能出错,从而导致连不上数据库服务器,建议多试试几个版本的数据库驱动包。不过有其他方法来解决即使小版本不一致也可以正常连接上数据库服务器。

        其他原因有很多种,包括不限于:

        1)数据库服务器没有正确启动

        2)url 写错了

        3)用户名写错了

        4)密码写错了

        5)网络断开了

补充:进行客户端 - 服务器之间通信的时候,常见有两种通信的模式:

        1)有连接(JDBC 属于有连接):比如,打电话,需要对方接通电话才可以进行对话,要是对方挂断了,就没通信了。

        2)无连接:比如,微信发消息,不需要对方接通才能发送消息。无论对方是否接受,我都能把数据给发过去。

        2.4 创建 SQL 语句

        虽然是通过 Java 来操作数据库,实际上核心还是 SQL ,只不过是把 SQL 语句嵌入带 Java 中。

1)首先,用字符串的形式创建一条 SQL 语句。

2)接着,通过连接对象 connection 的方法 prepareStatement(字符串变量),将字符串进行预编译处理。

代码如下:

        // 3.0 创建SQL语句String sql = "insert into student values('张三三',14)";PreparedStatement preparedStatement = connection.prepareStatement(sql);

补充:如果一个字符串 sql 发送到数据库服务器上,是要先对 sql 进行解析,进行各种校验(判定 sql 是否符合语法要求等),这个解析操作也是要花费一定的开销,虽然开销不大,但是 mysql 服务器要同时给多个客户端提供服务,为了减轻数据库服务器的负担,就可以在客户端这边完成,此时把解析后的结果发给服务器,服务器直接执行即可。

        若从控制台输入数据,在 sql 语句中 values(?,?...) 用到 ? 占位符,通过 preparedStatement 对象来设置值来对应 sql 语句中 ?的符号。

代码如下:

    public static void main(String[] args) throws SQLException {DataSource dataSource = new MysqlDataSource();((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/db01?characterEncoding=utf8&useSSL=false");((MysqlDataSource) dataSource).setUser("root");((MysqlDataSource) dataSource).setPassword("123456");Connection connection = dataSource.getConnection();Scanner scanner = new Scanner(System.in);String name = scanner.next();int age = scanner.nextInt();String sql = "insert into student values(?,?)";PreparedStatement preparedStatement = connection.prepareStatement(sql);preparedStatement.setString(1,name);preparedStatement.setInt(2,age);int n = preparedStatement.executeUpdate();System.out.println(n);preparedStatement.close();connection.close();}

        2.5 执行 SQL 语句

        执行 SQL 语句,把刚才解析好的语句发给数据库服务器。可以通过 preparedStatement 对象的两个方法将 SQL 语句发送给服务器:

        1)executeUpdate():insert 、update 、delete 操作统一都是用 executeUpdate() 方法发送请求给服务器。执行这个方法,就会在内部,给数据库服务器发起请求,请求中就是包含了解析后的 sql ,等待数据库执行 sql ,返回响应,获取到返回值。这个返回值试一个 int 类型,表示这个操作影响了多少行数据。

代码如下:

        //4.0 发送已经解析好的sql语句到数据库服务器中int n = preparedStatement.executeUpdate();System.out.println(n);

        2)executeQuery():针对 select 操作使用的方法,将解析后的 sql 发送给服务器,返回响应是一个结果集合。

遍历结果集合:通过 resultSet.next() 作为判断是否为空条件,通过 resultSet.getInt("列名")来获取整型数据,比如 resultSet.getString("列名") 获取字符串等等类型的数据。

代码如下:

        //得到的是一个结果集ResultSet resultSet = preparedStatement1.executeQuery();while(resultSet.next()){String name = resultSet.getString("name");int age = resultSet.getInt("age");System.out.println(age + " " + name );}

        2.6 释放资源

        在完成数据库操作后,及时关闭数据库连接以释放资源。以上需要释放的资源有:preparedStatement、connection 。

代码如下:

        preparedStatement.close();connection.close();

        3.0 完整代码

import com.mysql.cj.jdbc.MysqlDataSource;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class demo {public static void main(String[] args) throws SQLException {//1.0 创建数据源DataSource dataSource = new MysqlDataSource();((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/db01?characterEncoding=utf8&useSSL=false");((MysqlDataSource) dataSource).setUser("root");((MysqlDataSource) dataSource).setPassword("123456");//2.0 与数据库建立联系Connection connection = dataSource.getConnection();// 3.0 创建SQL语句String sql = "insert into student values('张三三',14)";PreparedStatement preparedStatement = connection.prepareStatement(sql);String sql1 = "select * from student";PreparedStatement preparedStatement1 = connection.prepareStatement(sql1);//4.0 发送已经解析好的sql语句到数据库服务器中int n = preparedStatement.executeUpdate();System.out.println(n);//得到的是一个结果集ResultSet resultSet = preparedStatement1.executeQuery();while(resultSet.next()){String name = resultSet.getString("name");int age = resultSet.getInt("age");System.out.println(age + " " + name );}//5.0 释放资源preparedStatement.close();connection.close();}
}

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

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

相关文章

8.Python从入门到精通—Python 字符串,转义字符,字符串运算符

8.Python从入门到精通—Python 字符串,转义字符,字符串运算符 Python 字符串创建字符串访问字符串中的字符字符串切片字符串操作符字符串方法 Python 转义字符Python字符串运算符 Python 字符串 在 Python 中,字符串是一种基本数据类型,用于表示文本数据…

构建部署_Docker常用命令

构建部署_Docker常见命令 启动命令镜像命令容器命令 启动命令 启动docker:systemctl start docker 停止docker:systemctl stop docker 重启docker:systemctl restart docker 查看docker状态:systemctl status docker 开机启动&…

Java微服务分布式事务框架seata

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 往期热门专栏回顾 专栏…

SSH远程连接断开后,程序继续运行

1、问题 我们在使用SSH连接远程服务器跑代码的时候,可能会遇到 代码需要跑很久 的情况,你可能会想 断开远程连接,但是,代码仍然要继续跑。 (eg: 晚上关电脑,但是想让代码继续跑着,第二天想看结果) 2、scre…

哪里有视频素材网站免费下载?高清烟花视频素材哪里有?

如果你在寻找那些能点亮夜空的绚丽烟花视频素材,或者无水印的高清视频素材,那下面这些资源网站将会是你的宝库。今天,我要分享给你一些最佳的无水印视频素材下载网站,让你的视频制作闪耀起来。 1.蛙学府 这个网站是视频创作者的天…

Centos strema 9 环境部署Glusterfs9

本文档只是创建复制卷,分布式卷,分布式复制卷,纠删卷 操作系统 内核 角色 Ip地址 说明 CentOS Stream 9 x86_64 5.14.0-427.el9.x86_64 客户端 client 192.168.80.119 挂载存储业务机器 CentOS Stream 9 x86_64 5.14.0-427.el9.x8…

开展“人工智能+”行动,Gooxi与你一起奔赴新质未来

在今年两会上,“新质生产力”成为了反复被提及的热词。在政府发布的工作报告中“大力推进现代化产业体系建设,加快发展新质生产力”更是被置于政府工作任务的首位。具体说来,发展新质生产力包括产业链升级、培育新产业、推进数字经济建设三方…

linux安装anconda

第一步: 下载anaconda 下载地址:(选择Linux版本的) https://repo.anaconda.com/archive/第二步: 把下载好的anaconda放到指定的路径 然后在该路径下(我是直接放属于我的根目录下) 输入以下命令…

国创证券|资源再生概念持续活跃,超越科技两连板,大地海洋等走高

资源再生概念15日盘中再度走强,截至发稿,超越科技涨停斩获两连板,深水海纳涨超14%,大地海洋涨超12%,华新环保涨近9%,天奇股份、格林美、怡球资源等涨超5%。 消息面上,3月13日,国务院…

ElasticSearch架构设计

一、基础概念 Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作: 一个分布式的实时文档…

【2024第一期CANN训练营】2、AscendCL概述

文章目录 【2024第一期CANN训练营】2、AscendCL概述1. AscendCL架构及基本概念1.1 什么是AscendCL?1.2 AscendCL的优势1.3 AscendCL应用场景1.4 基本概念 2. AscendCL接口调用流程2.1 流程概述2.2 详细步骤2.3 头文件和库文件 3. 准备开发和运行环境3.1 部署环境3.2…

便携式气象站的工作原理

TH-BQX9便携式自动气象观测仪器是一种集成了多种传感器和自动化技术的气象监测设备,以其便携性、自动化和高精度等特点,广泛应用于气象、环保、农业、科研等领域。 首先,它的便携性是其最大的优势之一。设计紧凑、轻便易携,使得用…

【送书福利!第一期】《ARM汇编与逆向工程》

🐮博主syst1m 带你 acquire knowledge! ✨博客首页——syst1m的博客💘 😘《CTF专栏》超级详细的解析,宝宝级教学让你从蹒跚学步到健步如飞🙈 😎《大数据专栏》大数据从0到秃头👽&…

202212 CSP认证 | JPEG 解码

JPEG 解码 一道特别幸福简单的第三题…都不敢想象在考场上碰见这种题目会有多幸福。直接按照题目意思做就好了,感觉比第二题还简单…而且数组特别小完全没有超时压力 补充一个对小数处理的部分,包括本题涉及的四舍五入取整以及输出取整:C 实…

小迪安全42WEB攻防-通用漏洞文件包含LFIRFI伪协议

#知识点: 1、解释什么是文件包含 2、分类-本地LFI&远程RFI 3、利用-配合上传&日志&会话 4、利用-伪协议&编码&算法等 #核心知识: 1、本地包含LFI&远程包含RF1-区别 一个只能包含本地,一个可以远程加载 具体形成原因由代码和环境配置文件决定…

2024智慧农场系统微信小程序前端如何上传以及配置

2024智慧农场系统微信小程序前端如何上传以及配置 首先下载微信开发者工具 下载好以后打开,然后导入项目 前端修改:siteinfo.js 里面的域名信息 改完之后开始在微信开发者工具中开发工具中编译、上传、发布即可

【how2j练习题】HTML部分综合练习

练习题 1 <html><h1>英雄联盟 &#xff08;电子竞技类游戏&#xff09;</h1> <p> <strong>《英雄联盟》</strong>&#xff08;简称lol&#xff09;是由美国<i>Riot Games</i>开发&#xff0c;中国大陆地区由腾讯游戏运营的网络…

软考78-上午题-【面向对象技术3-设计模式】-结构型设计模式01

一、适配器模式 1-1、意图 个类的接口转换成客户希望的另外一个接口。 Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 1-2、结构 适配器模式分为&#xff1a; 1、适配器类模式&#xff1b; 2、适配器对象模式 类适配器使用多重继承对一个接口与另…

goland设置保存文件时不将4个空格转为TAB

goland设置保存文件时不将4个空格转为TAB 版本&#xff1a;GoLand 2022.3 设置路径&#xff1a; Settings -> Editor -> Code Style -> Go -> Run gofmt图示&#xff1a;

理解数字证书,守护你的大数据世界

随着大数据时代的来临&#xff0c;信息的安全性和可靠性成为了公众和企业关注的焦点。在这样的背景下&#xff0c;数字证书作为一种保障信息安全的重要工具&#xff0c;其重要性日益凸显。本文将从数字证书的基本概念、工作原理及其在大数据时代的应用等方面&#xff0c;为大家…