【MySQL篇】JDBC

本文详细介绍了JDBC的概念、使用方法,包括DriverManager、Connection、Statement、PreparedStatement等API的使用,并探讨了数据库连接池的原理和常见实现,如Druid。同时,提供了JDBC操作MySQL的代码实例,适合初学者掌握Java与数据库交互的基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jdbc是学习web框架的前言技术,使用java来操作关系性数据库的首选方案,虽然该技术已近被框架封装,但是为了看懂框架的源码,这个是必备的,也是JavaEE13大技术之一,值得好好学一下的。

一、概述

1.什么是JDBC?

  • JDBC是官方定义好的用Java来操作所有关系型数据库
    的API(接口),是一套统一的标准,

  • JDBC是Java DataBase Connectivity的缩写,java数据库连接

2.为什么会有JDBC?

首先市面上的关系型数据非常多,而且不同的RDBMS的实现方式是不同的,也就意味着要先操作哪个数据库,就要争对该数据库单独写一套代码,这大大增加了开发的难度,为了解决这个问题,java的爸爸就提出了JDBC,但这仅仅直接扣,java这么强大,在提出JDBC之后,数据库厂商也随即开发了争对自己数据库的实现类供开发人员使用。

  • 同一套Java代码,可以操作不同的关系型数据库

3.怎么使用JDBC呢?

  1. 导入jar包(驱动)
    {说明:用什么数据库就下载、导入相应jar包,jar包由数据库
    厂商提供,实现了jdbc相应的接口 }

    官方下载地址Mysql驱动jar包:

  2. 注册驱动
    { 把类声明到程序中 }

  3. 获取连接
    { JDBC的本质是通过java代码把sql发送给数据库,
    所以要让java程序与数据库相连接 }

  4. 定义sql语句

  5. 创建执行sql语句的对象
    { Java万物皆对象,想要使用它的方法,必须先创建对象 }

  6. 执行sql

  7. 处理返回的结果

  8. 释放资源
    代码演示

	//1.注册驱动        加载类到到程序中
	Class.forName("com.mysql.jdbc.Driver");
	//2.获取连接        获取与数据库的连接
	//如果连接的是本地的mysql,并且默认端口号为3306,可以省略ip地址和端口号
	String url = "jdbc:mysql:///itcast";
	String user = "root";
	String psw = "1234";
	Connection conn = DriverManager.getConnection(url, user, psw);
	//3.定义sql语句
	String sql = "update u set money = 2000 where id = 1";
	//4.获取执行sql语句的对象
	Statement stat = conn.createStatement();
	//5.执行sql,返回处理的结果,结果表示处理的行数
	int result = stat.executeUpdate(sql);
	//6.处理结果
	System.out.println(result);
	//7.释放资源
	stat.close();
	conn.close();

二、JDBC API

1.DriverManager

  1. 注册驱动
    Class.forName底层调用的就是DriverManager中的方法
    注意
    MySQL5之后可以省略注册驱动包的步骤,会自动注册驱动
  2. 获取连接
    Connection connection getConnection(String url,Stirng username,
    String password);
    - 参数一url:连接路径
    - 语法:
    jdbc:mysql://ip地址:端口号/数据库名字?
    参数键值对1&参数键值对2
    示例:jdbc:mysql://127.0.0.1:3306/db1
    - 细节:
    如果连接的是本地mysql服务器,并且默认端口号为3306,
    可以省略ip地址和端口号不写
    即jdbc:mysql:///db1
    配置useSSL = false参数,可以解决警告提示(禁用安全连接方式)
    - 参数二username:MySQL注册的用户名
    - 参数三password:密码

2.Coonnection

  1. 获取执行sql的对象
    - 普通执行sql的对象
    Statement createStatement();
    - 预编译执行sql的对象,解决sql注入
    PreparedStatement prepareStatement(sql);
    - 执行存储过程的对象
    CallableStatement prepareCall(sql)
  2. 事务管理
    1. MySQL事务管理
    - 开启事务:BEGIN;/START TRANSCATION;
    - 提交事务:COMMIT;
    - 回滚事务:ROOLLBACK;
    - MySQL默认是自动提交事务的
    2. JDBC事务管理
    - 依靠Connection类中的方法
    - 开启事务:startAutoCommit(boolean autoCommit);
    true为自动提交,false为手动提交
    - 提交事务:commit();
    - 回滚事务:rollback();

3.Statement

  • 执行SQL语句
    1. 执行DML、DDL语句
    int executeUpdate(sql);
    返回值:DML返回受影响的行数
    DDL可能返回0
    2. 执行DQL语句
    ResultSet executeQuery(sql)
    返回结果集对象

4.ResultSet

  • 作用:获取结果
    - 封装了DQL语句的结果
    executeQuery(sql):
    执行sql语句,返回ResultSet对象
  • 查询结果
    boolean next()
    向下移动指针,并判断当前位置是否有元素
    指针默认执行当前元素的上一个元素
    getXxx(参数)
  • 获取数据
    参数:int 列的编号/String列的名称

5.PreparedStatement

  • 作用:预编译执行sql,并防止sql注入
  • sql注入
    通过输入语句来修改定义好的sql语句,
    使之条件改变,从而侵入、攻击服务器
    产生的原因:sql语句的参数是通过拼接字符串实现的,
    条件可以拼接一个恒等式 ,使得查询条件恒成立
  • 实现方式
    1. 获取对象
    sql语句中的参数值使用通配符?替代,后面再进行赋值,
    进而规避了sql注入的问题
    此时的sql就相当于一套模板
    String sql = “SELECT * FROM emp WHERE id = ?”;
    PreparedStatement prepareStatement =
    conn.prepareStatement(sql);
    2. 设置参数
    Xxx是数据类型,因为多个参数位置可能对应同一种
    数据类型,所以要标明?的位置
    setXxx(参数1,参数2)
    参数1:?的位置编号,从1开始
    参数2:?的值,要赋值的参数值
    3. 执行sql
    此时不需要传递sql语句了
    executeUpdate();/executeQuery();

三、数据库连接池

1.概述

  • 数据库连接池就是一个封装了很多连接对象的容器
  • 负责分配、管理数据库连接

2.实现

  • 方式:通过接口DataSource实现
  • DataSource是Java官方提供的数据库连接标准接口
    ,由数据库连接池厂商实现,并提供API
  • 获取连接:getConnection();

4.使用

  • 常见的数据库连接池
    1. DBCP
    2. C3P0
    3. Druid
  • Driud(德鲁伊)的简介
  1. 由阿里巴巴提供的开源的数据库连接项目
    功能强大、性能优美
  2. 使用
    1. 导入jar包
    2. 定义配置文件properties
    2. 加载配置文件
    3. 获取数据库连接池对象
    4. 获取连接
    代码示例
	//1.导入jar包
	//2.定义配置文件
	Properties properties = new Properties();
	//3.加载配置文件
	properties.load(new FileInputStream("src\\druid.properties"));
	//4.获取连接池对象
	DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
	//5.获取连接
	Connection connection = dataSource.getConnection();
	System.out.println(connection);

四、练习

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小B学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值