当前位置: 首页 > news >正文

java怎么连接数据库mysql

文章目录

  • 前言
  • 一、JDBC是什么
  • 二、JDBC工作原理
  • 三、下载并导入mysql的驱动
    • 3.1 下载mysql-connector-java-5.1.47.jar
    • 3.2 idea项目导入jar包
  • 四、JDBC的使用(完整代码见文末)
    • 4.1 获取数据源
    • 4.2 获取连接对象
    • 4.3获取执行SQL的对象
    • 4.4 执行查询或者更新操作
    • 4.5 遍历结果集
    • 4.6 关闭资源
  • 五、完整代码
  • 拓展


前言

博主个人社区:开发与算法学习社区

博主个人主页:Killing Vibe的博客

欢迎大家加入,一起交流学习~~

在连接数据库之前,本文章将讲解JDBC是什么?工作原理是什么?再逐渐深入~

一、JDBC是什么

JDBC: Java操作数据库的规范

java.sql : 无论现在通过Java操作哪个具体的数据库,数据库厂商实现的驱动包都需要满足JDBC的标准(接口)

在这里插入图片描述

二、JDBC工作原理

JDBC为多种关系数据库提供了统一的访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类。

JDBC访问数据库层次结构:

在这里插入图片描述

  • 不管是啥数据库 MySQL、SQLLite、Oracle 等都得实现JDBC的接口,对于程序员来说,不管操作啥数据库都是相同的套路,只是更换了具体子类(驱动)

  • MySQL也一样,它提供的Java操作数据库的驱动包必须实现JDBC标准(类似于usb标准和usb驱动)

三、下载并导入mysql的驱动

下面告诉大家如何导入mysql的驱动包

3.1 下载mysql-connector-java-5.1.47.jar

资源链接:mysql-connector-java-5.1.47.jar

拓展:*.jar 就是把一系列编译好的class文件打包压缩后的文件,其他程序引入这个jar包就有了这个包中的所有类(等于别人写好的东西直接拿来用)

在这里插入图片描述

3.2 idea项目导入jar包

  1. 右键项目(模块)名,找到打开模块设置

在这里插入图片描述

  1. 找到 库 ,然后点击加号,把下载好的jar包导入进去

在这里插入图片描述

  1. 当外部库显示如下图,表示导入完成

在这里插入图片描述

四、JDBC的使用(完整代码见文末)

所有Java操作关系型数据库,无论是哪种数据库,套路都是一样的,JPA,MyBatis都是JDBC的封装而已。

其实连接数据库主要就分了六个步骤

  1. 获取数据源DataSource,配置连接地址,用户名,密码等
  2. 获取连接对象,就是发送网络请求,建立和数据库的连接Connection
  3. 获取执行SQL的对象PreparedStatement对象,封装的SQL语句
  4. 执行更新操作 executeUpdate => int 本次更新受影响的行数;执行查询executeQuery => Result结果集
  5. 遍历结果集 ResultSet对象,每当调用一次next方法就从结果集中取出一行数据,resultSetXX(“列名”) => 获取本行数据的具体属性值
  6. 操作关闭之后关闭资源,resultSet,Connection对象

4.1 获取数据源

在这里插入图片描述

解释一下URL里面的内容:

1.请求协议,类似于https协议,MySQL的驱动包背后都是一些网络请求,操作数据库其实就是在发起网络请求

jdbc:mysql://

2.配置MySQL的IP和端口号,127.0.0.1 是本机IP,3306是端口号,类似于一个程序在操作系统中的一个id。test是要想连接的数据库名称(自定义)

127.0.0.1:3306/test
  1. 连接的字符集编码格式是UTF-8, 不发起ssl请求,加密请求,不安全的连接
characterEncoding=UTF-8&useSSL=false

4.2 获取连接对象

这一步才会向数据库服务器发起请求

在这里插入图片描述

4.3获取执行SQL的对象

sql 语句根据自己的数据库和表来写,这里仅作示例:

在这里插入图片描述

4.4 执行查询或者更新操作

1.执行更新操作 executeUpdate 返回 int 本次更新受影响的行数

2.执行查询executeQuery 返回 Result结果集

示例如下:

在这里插入图片描述

4.5 遍历结果集

每当调用一次next方法就从结果集中取出一行数据,resultSet.XX(“列名”) => 获取本行数据的具体属性值

在这里插入图片描述

4.6 关闭资源

数据库属于资源操作,一定要记得关闭资源,结果集对象,连接对象

在这里插入图片描述

五、完整代码

完整代码如下,仅作示例,相关属性需要根据自己实际情况修改

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

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

/**
 * @author Dianzhi Han
 * @version 1.0
 * @description: TODO
 * @date 2022/10/27 20:24
 */
public class JdbcTest {
    public static void main(String[] args) throws SQLException {
        // 1.获取数据源 - 数据具体是从哪个数据库来的
        // DataSource这个接口无论哪种具体的数据库驱动都要实现此接口,具体是什么数据库名称数据库名称 + DataSource
        // MySQLDataSource
        // SQliteDataSource
        MysqlDataSource dataSource = new MysqlDataSource();
        // 1.1 设置数据源的连接地址,用户名,密码等属性
        // 发起TCP请求,按照指定的协议(jdbc协议)连接到数据库的服务端
        // 大家根据自己的MySQL的情况,数据库的名称,密码,用户名等等需要修改
        dataSource.setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8&useSSL=false");
        dataSource.setUser("root");
        dataSource.setPassword("123");
        // 2.获取数据库连接 - Connection接口的对象
        // 这一步才会向数据库服务器发起请求
        Connection connection = dataSource.getConnection();
        // 3.执行具体的SQL语句,每个SQL语句对应一个PrepareStatement对象
        String sql = "select sex from teacher where username = ?";
        PreparedStatement statement = connection.prepareStatement(sql);
        // 1就是将第一个?的内容替换为具体的值(此处就把name = ? => name = 孙悟空)
        // set数据类型要和数据库的列属性保持一致
        statement.setString(1,"孙悟空");
        // 4.具体执行操作,增删改 excuteUpdate() => int 本次修改操作受影响的行数
        // 查询操作 select =》 excuteQuery() => ResultSet =》 查询结果集
        ResultSet resultSet = statement.executeQuery();
        // 5.遍历结果集
        while (resultSet.next()) {
            String pass = resultSet.getString("sex");
            System.out.println(pass);
        }
        // 6.数据库属于资源操作,一定要记得关闭资源,结果集对象,连接对象
        resultSet.close();
        connection.close();
    }
}

拓展

  1. 获取数据源有两种方式,一个是DataSource(实际用到的),另一种是DriverManager(不推荐使用),关于两者的区别这里就不展开了

  2. 具体执行SQL的对象也有两种方式,一个是PreparedStatement对象(推荐使用),另外一个是Statement对象(不推荐使用),两者区别大家可以去网上看一下~

相关文章:

  • AI绘画逆着玩火了,敢不敢发自拍看AI如何用文字形容你?
  • 是时候掌握SpringMVC源码了-初探篇
  • 上手Python之set(集合)
  • Visual Studio 2022开发Arduino详述
  • 【机器人定位引导中的机器视觉技术】
  • 零售商贩mysql表设计:主题信息表(theme)
  • 本文带你了解透彻云计算(前世,今生,未来)
  • ARM发布Cortex-X3和Cortex-A715
  • 麻雀算法极限学习机SSA-ELM回归预测及其MATLAB代码实现
  • 云原生DevOps篇:jenkins发送通知到企业微信机器人
  • LeetCode337:打家劫舍III
  • 【飞桨PaddleSpeech语音技术课程】— 语音识别-流式服务-模型部分
  • isomap降维算法--学习笔记
  • 【Linux】yum vim 基础工具的使用
  • QT学习_03_坐标系统和内存回收机制
  • 10个最佳ES6特性 ES7与ES8的特性
  • Java 网络编程(2):UDP 的使用
  • laravel 用artisan创建自己的模板
  • leetcode98. Validate Binary Search Tree
  • MQ框架的比较
  • python3 使用 asyncio 代替线程
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • select2 取值 遍历 设置默认值
  • sessionStorage和localStorage
  • swift基础之_对象 实例方法 对象方法。
  • 创建一种深思熟虑的文化
  • 从零搭建Koa2 Server
  • 关于List、List?、ListObject的区别
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 精彩代码 vue.js
  • 老板让我十分钟上手nx-admin
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 模型微调
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 手写一个CommonJS打包工具(一)
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • #NOIP 2014# day.2 T2 寻找道路
  • (2)Java 简介
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (poj1.2.1)1970(筛选法模拟)
  • (WSI分类)WSI分类文献小综述 2024
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (规划)24届春招和25届暑假实习路线准备规划
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (算法)求1到1亿间的质数或素数
  • (一)Java算法:二分查找
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • **PHP分步表单提交思路(分页表单提交)
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径