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

news2024/11/25 11:48:46

🔥博客主页: 【小扳_-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.coloradmin.cn/o/1523014.html

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

相关文章

mac激活pycharm,python环境安装和包安装问题

1.PyCharm到官网下载就行 地址:Other Versions - PyCharm (jetbrains.com) 2.MacOS 下载python环境,地址: Python Releases for macOS | Python.org 3.PyCharm环境配置: 4. 如果包下载不下来可以换个源试试 pip install py…

如何在Ubuntu中查看编辑lvgl的demo和examples?

如何在Ubuntu中查看编辑lvgl的demo和examples? 如何在 Ubuntu系统中运行查看lvgl 1、拉取代码 在lvgl的github主页面有50多个仓库,找到lv_port_pc_eclipse这个仓库,点进去 拉取仓库代码和子仓库代码 仓库网址:https://github…

Maven: There are test failures.(已解决)

问题解决办法 进行package打包时报错如下: 然后这些并不能看出是测试的哪里的问题,可以点击上一级进行查看更详细的错误,越向上日志越详细,可以看到是52行出了错误, 52对应代码如下: 原因是存在注册的测…

分享一篇Oracle RAC实战安装11G

分享一次很久以前的Oracle rac项目实施。 1、拓扑结构 基础环境是2台H3C的服务器2台3PAR的双活存储,操作系统centos7.2。借用下别人家的拓扑先(这是一套典型的RAC架构)。 2、网卡TEAM操作 以eno51和en052组成Team1组为示例: nm…

校园闲置物品交易网站 |基于springboot框架+ Mysql+Java+Tomcat的校园闲置物品交易网站设计与实现(可运行源码+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 用户功能模块 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunwen…

章鱼网络 Community Call #19|​开启与 Eigenlayer 的合作

香港时间2024年3月8日12点,章鱼网络举行第19期 Community Call。 在过去的一个月,章鱼网络在成功完成 $NEAR Restaking 功能的安全审计之后,一直在稳步吸引关注。事实上,在整个行业中,我们是极少数已经推出 Restaking …

JavaWeb笔记 --- 三、MyBatis

三、MyBatis 概述 MyBatis是一个持久层框架,用于简化JDBC Mapper代理开发 在resources配置文件包中创建多级目录用 / MyBatis核心配置文件 enviroments:配置数据库连接环境信息。 可以配置多个enviroment,通过default属性切换不同的envir…

MySQL语法分类 DQL(5)分组查询

为了更好的学习这里给出基本表数据用于查询操作 create table student (id int, name varchar(20), age int, sex varchar(5),address varchar(100),math int,english int );insert into student (id,name,age,sex,address,math,english) values (1,马云,55,男,杭州,66,78),…

2核4g服务器能多少人在线?腾讯云2核4g服务器性能测评

腾讯云轻量应用服务器2核4G5M配置性能测评,腾讯云轻量2核4G5M带宽服务器支持多少人在线访问?并发数10,支持每天5000IP人数访问,腾讯云百科txybk.com整理2核4G服务器支持多少人同时在线?并发数测试、CPU性能、内存性能、…

FFmpeg 常用命令汇总

​​​​​​经常用到ffmpeg做一些视频数据的处理转换等,用来做测试,今天总结了一下,参考了网上部分朋友的经验,一起在这里汇总了一下。 1、ffmpeg使用语法 命令格式: ffmpeg -i [输入文件名] [参数选项] -f [格…

unity内存优化之AB包篇(微信小游戏)

1.搭建资源服务器使用(HFS软件(https://www.pianshen.com/article/54621708008/)) using System.Collections; using System.Collections.Generic; using UnityEngine;using System;public class Singleton<T> where T : class, new() {private static readonly Lazy<…

Unity的AssetBundle资源运行内存管理的再次深入思考

大家好&#xff0c;我是阿赵。   这篇文章我想写了很久&#xff0c;是关于Unity项目使用AssetBundle加载资源时的内存管理的。这篇文章不会分享代码&#xff0c;只是分享思路&#xff0c;思路不一定正确&#xff0c;欢迎讨论。   对于Unity引擎的资源内存管理&#xff0c;我…

【网络原理】TCP 协议中比较重要的一些特性(三)

目录 1、拥塞控制 2、延时应答 3、捎带应答 4、面向字节流 5、异常情况处理 5.1、其中一方出现了进程崩溃 5.2、其中一方出现关机&#xff08;正常流程的关机&#xff09; 5.3、其中一方出现断电&#xff08;直接拔电源&#xff0c;也是关机&#xff0c;更突然的关机&am…

校园博客系统 |基于springboot框架+ Mysql+Java的校园博客系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunwen参考 摘要 研究…

每日一练:LeeCode-125、验证回文串【字符串+双指针】

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&#xff0c;如果它是 回文串 &#xff0c;返回 true &#xff1b;否则&#…

mysql中的非空间数据导入sqlserver中空间化

以下操作都在Navicat Premium 15软件中操作 1、mysql导出数据 以导出csv为例 不修改导出路径的话默认就是在桌面 设置编码UTF-8 这边还是默认,最好不要修改,如果文本识别符号为空,导入的时候可能字段会错乱 开始即可 2、导入sqlserver数据库中

App的测试,和传统软件测试有哪些区别?增加哪些方面的测试用例

从上图可知&#xff0c;测试人员所测项目占比中&#xff0c;App测试占比是最高的。 这就意味着学习期间&#xff0c;我们要花最多的精力去学App的各类测试。也意味着我们找工作前&#xff0c;就得知道&#xff0c;App的测试点是什么&#xff0c;App功能我们得会测试&#xff0…

绩效考核设计:拟定工时标准,实现量化考核

该度假村工程维修部的主要工作是修灯泡、换水管、修门、开锁等&#xff0c;部门员工大多是老员工&#xff0c;随着年龄的增加&#xff0c;这些员工的工作积极性越来越差&#xff0c;“老油条”越来越多&#xff0c;其他部门对工程维修部的抱怨声也越来越大。一起来看看人力资源…

RTC的Google拥塞控制算法 rmcat-gcc-02

摘要 本文档描述了使用时的两种拥塞控制方法万维网&#xff08;RTCWEB&#xff09;上的实时通信&#xff1b;一种算法是基于延迟策略&#xff0c;一种算法是基于丢包策略。 1.简介 拥塞控制是所有共享网络的应用程序的要求互联网资源 [RFC2914]。 实时媒体的拥塞控制对于许…

【Java设计模式】二十五、自定义Spring IoC

文章目录 1、IoC类的定义1.1 定义bean相关的pojo类PropertyValue1.2 定义MutablePropertyValues类1.3 定义BeanDefinition类 2、定义注册表相关类2.1 BeanDefinitionRegistry接口2.2 SimpleBeanDefinitionRegistry类 3、定义解析器相关类3.1 BeanDefinitionReader接口3.2 XmlBe…