MySQL中 java 的 JDBC 编程使用方法及驱动包的下载和使用

news2024/11/8 18:42:51

文章目录

  • 1.简介
  • 2.JDBC 的使用
    • 2.1 先安装对应数据库的驱动包~~
    • 2.2 把安装好的 jar 驱动包导入到项目中~~
      • 2.2.1 在项目中创建目录,把 jar 包拷贝进来。
      • 2.2.2 右键创建的目录
  • 3.编写数据库代码插入一个记录
  • 4.查看插入记录后的数据表
  • 5.如何编写代码实现查找操作

1.简介

实际开发中要绝大多数要通过代码来执行 sql 语句,这就需要让其他的编程语言来操作数据库服务器。



API 是什么意思:

例子:某个东西可以带给我某个功能。

例子:我可以和我的朋友一起吃法、一起学习、一起打游戏。

例如 java 的标准库就会给我们提供一些 API,这个 API 中有一些随机数、scanner、集合类等。

mysql 也会提供这样的一组 API ,可以通过这组API来完成增删改查的操作~~

2.JDBC 的使用

2.1 先安装对应数据库的驱动包~~



要下载其中的 MySQL 驱动包,可以去官网下载也可以去 “中央仓库” 下载。

中央仓库 相当于是手机上的应用商店。

安装驱动包的网址:https://mvnrepository.com/


查询步骤:

1、访问网站



2、搜索 mysql


搜所结果第一个就是目标。


3、点进去往下滑动找到适合的版本(要和自己的数据库服务器对应)



往下滑找到大版本是5.1即可。



4、点击选中的版本后进入以下页面,点击此处下载


安装完成。

2.2 把安装好的 jar 驱动包导入到项目中~~

2.2.1 在项目中创建目录,把 jar 包拷贝进来。


1、点击圈出的部分



2.出现以下页面后,给目录命名。



3、选中目录,完成项目的创建。



4、创建一个新的目录。



5、点击后来到以下页面,目录名字随便起。



6、将之前装好的 jar 包 ctrl c v 过来即可,会出现以下界面。



7、完成

2.2.2 右键创建的目录


1、点击圈出的



2、在出现的窗口中点击ok即可



3、jar 包顺利导入

3.编写数据库代码插入一个记录


新建一个 java 文件,以插入一个记录为例子。

public class JdbcInsertDemo {
    public static void main(String[] args) {
        // 使用 jdbc 往数据库中插入一个记录
        // 需要提前准备好数据库(java)和数据表(student)
        // 1.创建数据源,描述了数据库服务器在哪
        // 2.和数据库建立网络连接(写的 jdbc 代码本质上是一个 MySQL 客户端,要通过网络和服务器进行通信)
        // 3.构造一个 sql 语句来完成 插入操作
        // 4.执行 sql 语句(控制服务器给客户端发送请求)
        // 5.断开与数据库的连接,并且释放必要的资源
    }
}




1、创建数据源,描述了数据库服务器在哪

需要注意的是,不同的数据库,对于数据源的描述是存在差异的。
有的数据库是通过用户名密码来认证,也有的不是,比如 SQLite

 DataSource dataSource = new MysqlDataSource();

这相当于是 向上转型

创建数据源需要用到 DataSource 类,这个类的包是 javax.sql
这个包中放的就是一些与 jdbc 相关的类。



下面要开始设置数据库所在的 地址端口数据库名

((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false");


这里就相当于是 向下转型

URL 指的是唯一资源地址符,描述了互联网的唯一的一个资源的位置,也就是生活中所说的 “网址”。


jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false

  • jdbc 表示的是 这个 url 是给 jdbc中的 mysql 来使用的
  • 127.0.0.1 表示的是 数据库服务器所在的 IP 地址
  • 3306 表示的是 mysql 安装的时候配置的 端口号,一般默认是 3306。
  • java 表示这是 访问的 数据库名
  • charactEncoding=utf8 表示 描述了 请求的字符编码方式,一般都是设置成 utf8
  • useSSL=false 表示 关闭加密功能


接下来设置登录的 用户名密码(用户名默认是root)

((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("000000");


这里需要 注意 的是除了 数据库名密码 不同的人操作的可能是不一样的。
其他的都是和我的一样的。



2、和数据库建立网络连接。

上面的操作,只是描述了服务器在哪,并没有真正进行访问。

紧接着进行的 “连接操作” 才是真正的开始通过阅读进行通信。

Connection connection = dataSource.getConnection();


在提示的所有 Connection 中,选择下图中选择圈中的那一个。



上面写的那一条语句可能会抛异常。




下面就是会抛出的异常。



java 的异常,分为两类。

  1. 受查异常(必须要显示处理)
  2. 非受查异常(可以忽略)

受查异常是 try 自己把这个异常捕获处理了。
throws 交给别人来处理。

上面的 SQLException 就是一个受查异常。



这里main方法的 throws 意思是让 jvm 自己处理。
而 jvm 的处理方式很简单,就是直接摆烂。



3、构造一个 sql 语句来完成 插入操作


下面的代码只是相当于描述了 sql 是什么样的,还没有真正的构造 sql 。

// 描述 sql 语句的
 String sql = "insert into student values (1, '张三')";


下面的代码才是真正 构造 sql 语句的代码。

// jdbc 还需要搭配一个特点的对象来描述这里的 sql 的情况
PreparedStatement preparedStatement = connection.prepareStatement(sql);//这一步才是真正的构造 sql


需要注意的是,每次指行 sql 语句的时候,都需要构造一下。



4、执行 sql 语句(控制服务器给客户端发送请求)

下面代码输出的结果就是收到影响数据的行数。

// 如果是增删改则是使用 executeUpdate()
// 如果是查则是使用 executeQuery()
// 返回结果的含义就是执行完 sql 语句后几行数据受到了影响
int ret = preparedStatement.executeUpdate(); 
System.out.println("ret = " + ret);




这个就表示当前有一行数据受到了影响。



5、断开与数据库的连接,并且释放必要的资源

断开连接的原因:

连接本质上就是找个地方记录一下 “和谁建立连接了”。
当连接不在需要的时候,就需要释放连接,把之前的记录给 “擦除掉”

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


资源释放的顺序和创建的顺序是相反的。


整体代码展示。

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

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class JdbcInsertDemo {
    public static void main(String[] args) throws SQLException {
        // 使用 jdbc 往数据库中插入一个记录
        // 需要提前准备好数据库(java)和数据表(student)

        // 1.创建数据源,描述了数据库服务器在哪
        DataSource dataSource = new MysqlDataSource();
        // 设置数据库所在的位置,当前是固定写法
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("000000");

        // 2.和数据库建立网络连接(写的 jdbc 代码本质上是一个 MySQL 客户端,要通过网络和服务器进行通信)
        Connection connection = dataSource.getConnection();

        // 3.构造一个 sql 语句来完成 插入操作
        // 描述 sql 语句的
        String sql = "insert into student values (1, '张三')";
        // jdbc 还需要搭配一个特点的对象来描述这里的 sql 的情况
        PreparedStatement statement = connection.prepareStatement(sql);//这一步才是真正的构造 sql

        // 4.执行 sql 语句(控制服务器给客户端发送请求)
        // 如果是增删改则是使用 executeUpdate()
        // 如果是查则是使用 executeQuery()
        // 返回结果的含义就是执行完 sql 语句后几行数据受到了影响
        int ret = statement.executeUpdate();
        System.out.println("ret = " + ret);

        // 5.断开与数据库的连接,并且释放必要的资源
        statement.close();
        connection.close();
    }
}

4.查看插入记录后的数据表


先来看一看数据表原来是什么样的。




运行代码后发现现在有一行数据收到了影响。

再来看看现在的数据表。



可以发现数据添加成功。



虽然实现了插入,但是当前的代码不够灵活。
更多的时候,我们希望插入的数据是动态的。

所以可以使用 Scanner 来完成更加灵活的插入,即输入什么就插入什么。

方法是使用 PreparedStatement 来通过占位符的替换的方式,实现多态的 sql 构造。

下面代码就是对于上面代码修改过的部分

// 2.和数据库建立网络连接(写的 jdbc 代码本质上是一个 MySQL 客户端,要通过网络和服务器进行通信)
Connection connection = dataSource.getConnection();

Scanner input = new Scanner(System.in);
System.out.println("请输入学号:");
int id = input.nextInt();
System.out.println("请输入姓名:");
String name = input.next();

// 3.构造一个 sql 语句来完成 插入操作
// 描述 sql 语句的
String sql = "insert into student values (?, ?)";
// jdbc 还需要搭配一个特点的对象来描述这里的 sql 的情况
PreparedStatement statement = connection.prepareStatement(sql);//这一步才是真正的构造 sql
statement.setInt(1, id);
statement.setString(2, name);
System.out.println("sql:" + statement);


把 id 这个值以 int 的形式替换到第一个 ?里。

把 name 这个值以 String 的形式替换到第二个 ?里。
\

System.out.println("sql:" + statement);


用来打印执行好的 sql 结果。

下面执行代码观看结果,可以看到当前执行好的 sql 结果及受影响的数据行数。



下面查看数据表。



发现数据成功插入。

5.如何编写代码实现查找操作


前面的步骤和 增删改 类似,只是改造的 sql 语句不一样。

 // 1.创建数据源,描述了数据库服务器在哪
 DataSource dataSource = new MysqlDataSource();
// 设置数据库所在的位置,当前是固定写法
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("000000");

// 2.和数据库建立网络连接(写的 jdbc 代码本质上是一个 MySQL 客户端,要通过网络和服务器进行通信)
Connection connection = dataSource.getConnection();

// 3.构造一个 sql 语句来完成 插入操作
// 描述 sql 语句
String sql = "select * from student";
//这一步才是真正的构造 sql
PreparedStatement statement = connection.prepareStatement(sql);


select * from student

这是一条查询数据表的 sql 语句,其他都是和增删改一样的。

下面的代码就是查询操作有改动的代码。

//结果集合
// 查询使用executeQuery
ResultSet resultSet = statement.executeQuery();
//拿到每一行 - next 相当于是使光标移动到下一行
while (resultSet.next()) {
    // 使用getXX 的方式得到每一列
    // 如果是int就是 getInt,如果是String,就是getString...
    // 这里的参数就是数据表的列名
    int id = resultSet.getInt("id"); // 代码的作用是得到 id 这一列的值
    String name = resultSet.getString("name"); // 代码的作用是得到 name 这一列的值
    //输出查询的结果
    System.out.println(id + ":" + name);
}




最终会是下面的状况。



下面代码的作用是取到这一列具体的值,数据表有几列的数据就写几条语句。

 int id = resultSet.getInt("id");
String name = resultSet.getString("name");


之后就是释放资源的操作了,释放的顺序要和创建时的顺序相反。

// 释放资源 - 释放顺序和创建顺序相反
resultSet.close();
statement.close();
connection.close();


下面访问数据表看看数据是什么样。



运行代码观察结果



可以看到代码的输出结果和数据库显示出来的一模一样的结果。


如果是 加限制条件 的查询,只需要把 sql 语句改了即可。

例如查询 id 为 1 的 学生。

此时需要将 sql 改为 select * from student where id = 1

运行代码会输出一下结果,同时也可以发现和数据库显示的结果相同。



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

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

相关文章

数据库实验2 数据库安全性定义与检查

前言:记得验收时问了一个问题吧,就是用户和角色的区别是什么 实验2.1自主存取控制实验 1.实验目的 掌握自主存取控制权限的定义和维护方法。 2.实验内容和要求 定义用户、角色,分配权限给用户、角色,回收权限,以相应的用户名登录数据库验证权限分配…

分享巧记Linux命令的方法

最近有些学弟经常私信问我说,他们自己是Linux方面的小白,对于Linux的命令了解十分的少,虽然每次跟着我推荐的学习视频教程可以进行操作,但是离开了视频,就又是两眼抓瞎,什么也想不起来。不知道怎么样通过命…

【数据结构】队列与Queue接口

目录 一、队列 二、 Java里的Queue接口 1、概述 2、常用方法 1.入队 2.出队 3.获取队首元素 4、判空 三、单链表实现队列 1、准备字段 2、实现入队 3、实现出队 4、实现获取队首元素 5、实现判空 四、循环队列的实现 1、前言 2、字段准备 3、实现入队 4、实现…

一致性哈希

一、简介 这个算法是一种特殊的哈希算法,目的是解决分布式缓存的问题。 普通哈希算法在分布式存储具有较大的局限性,简单的讲就是难以扩展。 一致性哈希相对而言具有较好的容错性和可扩展性,更加适合现在的分布式存储。 二、经典哈希版本 …

SpringBoot+Vue项目实践课程教学管理平台

文末获取源码 开发语言:Java 使用框架:spring boot 前端技术:JavaScript、Vue.js 、css3 开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库:MySQL 5.7/8.0 数据库管理工具:phpstudy/Navicat JD…

✿✿✿JavaScript --- JSON

目录 1.JSON的简介 2.JSON的语法规则 3.JSON 字符串转换为 JavaScript 对象 4.常用的JSON相关的函数 5.JSON对象的遍历 6.补充:JS中的this关键字 1.JSON的简介 JSON( JavaScript Object Notation ) 是用于存储和传输数据的格式&#xf…

Android studio配置大内存,编译速度更快!

本文使用的是windows 10系统,Android studio 版本是Android Studio Chipmunk | 2021.2.1(松鼠) 目录为什么要配置大内存?默认内存是多少?如何扩大内存配置?这个配置保存在哪个文件?文件在哪里&a…

二叉树10:二叉树的最小深度

主要是我自己刷题的一些记录过程。如果有错可以指出哦,大家一起进步。 转载代码随想录 原文链接: 代码随想录 leetcode链接:111. 二叉树的最小深度 题目: 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近…

Asp.Net Core实现最基本的Http服务

概述 和.NetFramework时代不同,Core是可以自承载的,也就说开发好的Web项目,可以打包成exe直接运行的,而不必放到IIS这样的环境中。接下来,我们写点代码,体验一下Asp.Net Core自带的Http功能。 初体验 所谓…

嵌入式微功耗RTU的功能与特点介绍、技术参数详情

平升电子嵌入式微功耗RTU,可灵活嵌入至各类仪表、传感器和工业设备中,定时采集设备数据并通过4G/5G/NB-IoT远传至监管软件,实现设备联网。 嵌入式微功耗RTU设计小巧、方便集成,微功耗运行,支持标准水资源/水文/环保/M…

Biotin-PEG-AC,Biotin-PEG-Acrylate,生物素PEG丙烯酸酯线性杂双功能PEG试剂

英文名称:Biotin-PEG-AC,Biotin-PEG-Acrylate 中文名称:生物素-聚乙二醇-丙烯酸酯 生物素-聚乙二醇-丙烯酸酯是一种含有生物素和丙烯酸酯的线性杂双功能聚乙二醇试剂。它是一种有用的带有PEG间隔基的交联或生物结合试剂。生物素能与亲和素和…

智创万物,数赢未来——如何助推数智时代的发展浪潮

数智化核心特征 可视化 消费者的行为可以看得见,生产者的行为也可以看得见。产业互联网或者消费互联网非常重要的一点就是要对消费者行为和生产者行为的可视化,其背后是数字化的力量。 可量化 可量化意味着企业家可以对管理流程进行改造,…

echarts的legend——图例样式的配置

认识图例: 以上几张图表中,红色圆圈部分即图例 echarts图表中的图例,有形状,颜色,位置等等各种样式的不同配置。 echarts官网配置项手册里有非常详细的内容,我们挑几种常用的看看,加深对legend属…

深度学习——物体检测算法:R-CNN,SSD,YOLO(笔记)

一,R-CNN 1.区域卷积神经网络R-CNN 首先从输入图像中提取若干个锚框,并标注好它们的类别和偏移量。然后用卷积神经网络对每一个锚框进行前向传播抽取特征。最后用每个提议区域的特征来预测类别和边界框。 ①使用启发式搜索算法来选择锚框 ②使用预训练…

【第一周学习——认识 O(N*logN) 的排序[ 归并排序 、堆排序、快速排序 ]

前言: 👏作者简介:我是笑霸final,一名热爱技术的在校学生。 📝个人主页:个人主页1 || 笑霸final的主页2 📕系列专栏:《数据结构与算法》 📧如果文章知识点有错误的地方&a…

力扣(LeetCode)187. 重复的DNA序列(C++)

哈希表 直观思考,由于限定了答案长度 101010 ,只需要一次遍历字符串,统计所有长度为 101010 的子串的出现次数(哈希表) ,最后遍历哈希表,维护答案,记录出现 222 次(及以上)的字符串 。 class Solution { …

【BBuf的CUDA笔记】二,解析 OneFlow BatchNorm 相关算子实现

0x1. 前言 在ResNet中(https://github.com/pytorch/vision/blob/main/torchvision/models/resnet.py),关于BatchNorm的调用一共有两种模式,第一种是ReLU接在BN之后: out self.bn1(out) out self.relu(out)另外一种…

MicFunPred——最新16S rRNA扩增子数据功能预测数据库

近年来,基于扩增子测序进行物种的功能预测是研究微生物群落功能的主要方面,目前最常用的软件包括Tax4Fun以及PICRUSt2。关于这两款软件的使用方法详可参见凌波微课|扩增子研究第十六讲:扩增子测序结果中的物种功能预测。 Tax4Fun使用最近邻匹…

2022年终总结-两年Androider的成长之路

金句分享 生活金句 1.可难道我们生命中做的每一件事不都是为了被爱得更多一点吗 2.这不只是一种对承诺的恐惧,也不是我缺乏关心和爱的能力,因为我做得到,只不过,老老实实讲。我想 我宁愿为了某件我擅长的事,我能表现…

一个select死锁问题

以下代码的输出结果&#xff1a; func main() {var wg sync.WaitGroupfoo : make(chan int)bar : make(chan int)wg.Add(1)go func() {defer wg.Done()select {case foo <- <-bar:default:println("default")}}()wg.Wait() }结果 解析 对于 select 语句&#…