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();

    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Java+SpringMvc+vue+element实现驾校管理系统详细设计

基于JavaSpringMvcvueelement实现驾校管理系统详细设计 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末…

SQLiteC/C++接口详细介绍之sqlite3类(十二)

返回目录:SQLite—免费开源数据库系列文章目录 上一篇:SQLiteC/C接口详细介绍之sqlite3类(十一) 下一篇:SQLiteC/C接口详细介绍之sqlite3类(十三) ​37.sqlite3_load_extension 用于在SQLit…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Web)下篇

onRequestSelected onRequestSelected(callback: () > void) 当Web组件获得焦点时触发该回调。 示例: // xxx.ets import web_webview from ohos.web.webviewEntry Component struct WebComponent {controller: web_webview.WebviewController new web_webv…

如果要做优化,CSS提高性能的方法有哪些?

文章目录 一、前言二、实现方式内联首屏关键CSS异步加载CSS资源压缩合理使用选择器减少使用昂贵的属性不要使用import其他 三、总结参考文献 一、前言 每一个网页都离不开css,但是很多人又认为,css主要是用来完成页面布局的,像一些细节或者优…

苹果Vision Pro官方应用商店(网页版)正式上线

该网站为用户提供了丰富多样的应用资源,包括娱乐、教育、健康、购物、工具等各种类型的应用和游戏。 1、Apps & Games Arcade:提供各种应用和游戏,包括最新推出的、热门的以及专门为Apple Vision Pro设计的应用和游戏。 2、What’s New:展示最新推出的应用和游戏,让…

计算机网络----计算机网络的基础

目录 一.计算机网络的相关概念 二.计算机网络的功能 三.计算机网络的发展 四.计算机网络的组成 五.计算机网络的分类 六.计算机的性能指标 1.速率 2.带宽 3.吞吐量 4.时延 5.时延带宽积 6.往返时延RTT 7.利用率 七.计算机的分层结构 八.ISO/OSI参考模型 九.OSI…

Text-to-SQL 工具Vanna + MySQL本地部署 | 数据库对话机器人

今天我们来重点研究与实测一个开源的Text2SQL优化框架 – Vanna 1. Vanna 简介【Text-to-SQL 工具】 Vanna 是一个基于 MIT 许可的开源 Python RAG(检索增强生成)框架,用于 SQL 生成和相关功能。它允许用户在数据上训练一个 RAG “模型”&a…

前端React篇之React的生命周期有哪些?

目录 React的生命周期有哪些?挂载阶段(Mounting)更新阶段(Updating)卸载阶段(Unmounting)错误处理阶段(Error Handling) React常见的生命周期React主要生命周期 React的生…

(附数据集)基于lora参数微调Qwen1.8chat模型的实战教程

基于lora微调Qwen1.8chat的实战教程 日期:2024-3-16作者:小知运行环境:jupyterLab描述:基于lora参数微调Qwen1.8chat模型。 样例数据集 - qwen_chat.json(小份数据) - chat.json(中份数据&…

怎么判断发票扫描OCR软件好用不好用?

发票扫描OCR(Optical Character Recognition)是一种将纸质发票上的文字、数字等信息转化为可编辑的文本格式的技术。在现代企业中,随着数字化转型的推进,发票扫描OCR技术变得越来越重要。然而,面对市场上众多的发票扫描…

如何通过人才测评系统来寻找个人的潜能

潜力这个词,有的时候真是虚无缥缈,人们总说人的潜力是无限,又总说人的潜力是有限的,想一想两句话也都有道理,人的潜能怎么可能无限大?但在某些时候,你也许可以做的更好,但是对于这个…

C#,动态规划问题中基于单词搜索树(Trie Tree)的单词断句分词( Word Breaker)算法与源代码

1 分词 分词是自然语言处理的基础,分词准确度直接决定了后面的词性标注、句法分析、词向量以及文本分析的质量。英文语句使用空格将单词进行分隔,除了某些特定词,如how many,New York等外,大部分情况下不需要考虑分词问题。但有些情况下,没有空格,则需要好的分词算法。…

【ESP32接入国产大模型之MiniMax】

1. MiniMax 讲解视频: ESP32接入语言大模型之MiniMax MM智能助理是一款由MiniMax自研的,没有调用其他产品的接口的大型语言模型。MiniMax是一家中国科技公司,一直致力于进行大模型相关的研究。 随着人工智能技术的不断发展,自然语…

前端Vue与uni-app中的九宫格、十二宫格和十五宫格菜单组件实现

在前端 Vue 开发中,我们经常会遇到需要开发九宫格、十二宫格和十五宫格菜单按钮的需求。这些菜单按钮通常用于展示不同的内容或功能,提供给用户快速访问和选择。 一、引言 在前端开发中,九宫格、十二宫格和十五宫格菜单按钮是一种常见的布局…

【Canvas与艺术】下雪籽特效

【要点】 控制一个点的x,y坐标及下落速度&#xff0c;就能画出一个雪籽&#xff1b;创建n个雪籽&#xff0c;下雪籽的模拟效果就有了。 【效果图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content…

VMwareWorkstation16与Ubuntu 22.04.6 LTS下载与安装

一、准备工作 VMware Workstation Pro 16官网下载&#xff1a; https://customerconnect.vmware.com/cn/downloads/info/slug/desktop_end_user_computing/vmware_workstation_pro/16_0。下载需要账号登录。 二、安装 双击exe文件稍等一会会弹出安装程序&#xff0c;如图 这…

LAMP架构部署--yum安装方式

这里写目录标题 LAMP架构部署web服务器工作流程web工作流程 yum安装方式安装软件包配置apache启用代理模块 配置虚拟主机配置php验证 LAMP架构部署 web服务器工作流程 web服务器的资源分为两种&#xff0c;静态资源和动态资源 静态资源就是指静态内容&#xff0c;客户端从服…

Javaweb day17 day18 day19

mysql-DDL 数据库操作 写法 客户端工具 &#xff08;也可以使用idea&#xff09; 表 写法 约束 数据类型 案例 写法 表的查询修改删除 写法 删除

如何在 Linux ubuntu 系统上搭建 Java web 程序的运行环境

如何在 Linux ubuntu 系统上搭建 Java web 程序的运行环境 基于包管理器进行安装 Linux 会把一些软件包放到对应的服务器上&#xff0c;通过包管理器这样的程序&#xff0c;来把这些软件包给下载安装 ubuntu系统上的包管理器是 apt centos系统上的包管理器 yum 注&#xff1a;…

武汉灰京文化:直播游戏新时代的游戏宣传方式

随着互联网和科技的迅速发展&#xff0c;游戏产业也日益繁荣。传统的游戏宣传方式逐渐显现出一些不足&#xff0c;传统的广告渠道和媒体报道在一定程度上已经不能满足游戏行业的需求。然而&#xff0c;随着直播平台的兴起&#xff0c;直播游戏成为了一种新的游戏宣传方式&#…