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

【MySQL探索之旅】JDBC (Java连接MySQL数据库)

封面

📚博客主页:爱敲代码的小杨.

✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》

❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️

🙏小杨水平有限,欢迎各位大佬指点,相互学习进步!

文章目录

  • 1. JDBC 的概念
    • 1.1 JDBC 的概念
    • 1.2 JDBC 的本质
    • 1.3 JDBC 的好处
  • 2. JDBC 的使用
    • 2.1 编写代码的步骤
  • 3. JDBC 常用类和接口
    • 3.1 JDBC API
    • 3.2 Connection
    • 3.3 Statement

1. JDBC 的概念

1.1 JDBC 的概念

JDBC : 就是使用 Java 语言操作关系型数据库的一套 API
JDBC 全称:( Java DataBase Connectivity ) Java 数据库连接
image-20210725130537815.png
我们开发的同一套Java代码是无法操作不同的关系型数据库,因为每一个关系型数据库的底层实现细节都不一样。如果这样,问题就很大了,在公司中可以在开发阶段使用的是MySQL数据库,而上线时公司最终选用oracle数据库,我们就需要对代码进行大批量修改,这显然并不是我们想看到的。我们要做到的是同一套Java代码操作不同的关系型数据库,而此时sun公司就指定了一套标准接口(JDBC),JDBC中定义了所有操作关系型数据库的规则。众所周知接口是无法直接使用的,我们需要使用接口的实现类,而这套实现类(称之为:驱动)就由各自的数据库厂商给出。

1.2 JDBC 的本质

  • 官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口
  • 各个数据库厂商去实现这套接口,提供数据库驱动 jar
  • 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动 jar 包中的实现类

1.3 JDBC 的好处

  • 各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发
  • 可随时替换底层数据库,访问数据库的Java代码基本不变

以后编写操作数据库的代码只需要面向JDBC(接口),操作哪儿个关系型数据库就需要导入该数据库的驱动包,如需要操作MySQL数据库,就需要再项目中导入MySQL数据库的驱动包。(关注文末的公众号回复:MySQL即可获取驱动包)
image.png

2. JDBC 的使用

Java 操作数据库的流程
image.png

2.1 编写代码的步骤

  1. 创建工程, 导入驱动 jar

image.png
添加库
image.png
image.png

  1. 创建数据源(DataSource)
// 1. 创建数据源(DataSource)
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/你的数据名?characterEncoding=utf8&useSSL=false");
((MysqlDataSource) dataSource).setUser("你的用户名");
((MysqlDataSource) dataSource).setPassword("你的密码");
  1. 连接数据库服务器
// 2. 连接数据库服务器
Connection connection = dataSource.getConnection();
  1. 构造操作数据库的 SQL 语句
System.out.println("请输入id");
int id = input.nextInt();
System.out.println("请输入姓名");
String name = input.next();;
String sql = "insert into 你的表名 values (?,?)"; // sql语句
PreparedStatement preparedStatement = connection.prepareStatement(sql);  // 构造 "语句对象"
preparedStatement.setInt(1, id);
preparedStatement.setString(2, name);
  1. 执行 SQL 语句
int n = preparedStatement.executeUpdate();
System.out.println("n = " + n);
  1. 释放资源
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;
import java.util.Scanner;public class JDBCDemo {public static void main(String[] args) throws SQLException {Scanner input = new Scanner(System.in);// 1. 创建数据源(DataSource)DataSource dataSource = new MysqlDataSource();((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java111?characterEncoding=utf8&useSSL=false");((MysqlDataSource) dataSource).setUser("root");((MysqlDataSource) dataSource).setPassword("1234");// 2. 连接数据库服务器Connection connection = dataSource.getConnection();// 3. 构造操作数据库的 SQL 语句System.out.println("请输入id");int id = input.nextInt();System.out.println("请输入姓名");String name = input.next();;String sql = "insert into test values (?,?)";PreparedStatement preparedStatement = connection.prepareStatement(sql);  // 构造 "语句对象"preparedStatement.setInt(1, id);preparedStatement.setString(2, name);// 4. 执行 SQL语句int n = preparedStatement.executeUpdate();System.out.println("n = " + n);// 5. 释放资源preparedStatement.close();connection.close();}
}

运行结果:
image.png
image.png

3. JDBC 常用类和接口

3.1 JDBC API

在Java JDBC编程中对数据库的操作均使用JDK自带的API统一处理,通常与特定数据库的驱动类是完全解耦的。所以掌握 Java JDBC API (位于 java.sql 包下) 即可掌握 Java 数据库编程。

3.2 Connection

Connection接口实现类由数据库提供,获取 Connection对象通常有两种方式:

  1. 一种是通过 DriverManager(驱动管理类)的静态方法获取:
// 加载 JDBC 驱动程序
Class.forName("com.mysql.jdbc.Driver");// 创建数据库连接
Connection connection = DriverManager.getConnection(url);
  1. 一种是通过 DataSource(数据源)对象获取。实际应用中会使用 DataSource对象。
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java111?characterEncoding=utf8&useSSL=false");
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("1234");

区别:

  1. DriverManager类来获取的 Connection 连接,是无法重复利用的,每次使用完以后释放资源时,通过 connection.close()都是关闭物理连接。
  2. DataSource提供连接池的支持。连接池在初始化时将创建一定数量的数据库连接,这些连接是可以复用的,每次使用完数据库连接,释放资源调用 connection.close()都是将 Conncetion连接对象回收。

3.3 Statement

Statement对象主要是将SQL语句发送到数据库中。JDBC API中主要提供了三种Statement对象。
image.png
实际开发中最常用的是 PreparedStatement对象
总结:
image.png
主要掌握两种执行 SQL 的方法:

  1. executeQuery() 方法执行后返回单个结果集的,通常用于 select语句
  2. executeUpdate()方法返回值是一个整数,指示受影响的行数,通常用于updateinsertdelete语句

http://www.lryc.cn/news/345179.html

相关文章:

  • tomcat-GC溢出
  • 结合场景,浅谈深浅度拷贝
  • 生成指定范围的随机整数
  • 少的缓存穿透是缓存击穿,大量的是缓存雪崩
  • 设备能耗数据在线监测
  • springboot整合websocket,超简单入门
  • 代码随想录算法训练营第三十四天| 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球
  • ICode国际青少年编程竞赛- Python-2级训练场-识别循环规律2
  • 12.轻量级锁原理及其实战
  • 栈结构(c语言)
  • 【C++】C/C++中新const用法:const成员
  • 武汉凯迪正大—钢管焊缝裂纹探伤仪
  • 为什么 IP 地址通常以 192.168 开头?
  • elementUi中的el-table合计行添加点击事件
  • Zookeeper集群搭建的一些问题
  • 【线性代数】俗说矩阵听课笔记
  • 物联网技术在数字化工厂中的应用,你知道多少?——青创智通
  • nacos开启登录开关启动报错“Unable to start embedded Tomcat”
  • Linux|了解如何使用 awk 内置变量
  • 代码随想录-算法训练营day29【回溯算法05:递增子序列、全排列】
  • 704. 二分查找
  • php回车变br、php显示br
  • 找最大数字-第12届蓝桥杯国赛Python真题解析
  • 蓝桥杯 算法提高 ADV-1170 阶乘测试 python AC
  • 阿里巴巴杭州全球总部正式启用,创新“减碳大脑”科技减碳 | 最新快讯
  • 蓝桥杯国赛练习题真题Java(矩阵计数)
  • 概念解析 | ROC曲线:评估分类模型
  • 数据可视化训练第二天(对比Python与numpy中的ndarray的效率并且可视化表示)
  • 【Java EE】数据库连接池详解
  • 正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-15.4讲 GPIO中断实验-IRQ中断服务函数详解