Egoistic_Flowers

JDBC基础
JDBC基础

9066868d2fbcdaa7f34a2a8687d8242e

 

1 数据库驱动

未命名文件(2)

程序通过数据库驱动和数据库交互

2 JDBC

为了简化对(数据库的统一)操作,提供了一个(java操作数据库的)规范,简称JDBC

未命名文件(3)

需要的包:

  • java.sql
  • javax.sql
  • 数据库驱动:mysql-connector-java-5.1.47.jar

3 JDBC程序

创建测试数据库

创建JAVA项目 导入数据库驱动

在项目创建lib目录并将jar包拷入,添加为Library

image-20211126185321584

连接数据库测试:

总结步骤:

  • 1.加载驱动
  • 2.连接数据库 DriverManager
  • 3.获得sql对象
  • 4.获得返回结果集
  • 5.释放连接

加载驱动

image-20211127000528250

URL

连接数据库

执行

查询结果

释放资源

4 Statement对象

JDBC的Statement对象用于向指定数据库发送SQL语句

插入

实例:

删除

实例:

更新

实例:

查询

实例:

5 CURD测试

数据库连接配置文件db.properties

数据库连接工具类

插入

更新

删除

查询

6 SQL注入

sql注入攻击:由于程序漏洞导致,用户输入数据时输入了恶意SQL语句导致数据库信息泄露

解决:对SQL语句关键字进行屏蔽过滤

测试:

7 PreparedStatement对象

PreparedStatement可以防止SQL注入,效率更高

插入

删除

更新

查询

prepareStatement防止SQL注入:把传递的参数当做字符,特殊字符就会被转义而不是拼接字符串

8 事务

ACID原则:原子性,一致性,隔离性,持久性

  • 原子性:一个事务包含的步骤,要不都完成要不都失败,不存在中间态
  • 一致性:数据库操作数据符合运算规则
  • 隔离性:多个事务同时执行互相不干扰
  • 持久性:一但提交数据持久化到数据库,不可逆
  • 隔离性问题:

    • 脏读:一个事务读取另一个事务没有提交的值
    • 不可重复读:在同一个事务内,重复读取表中的数据,表数据发生改变
    • 幻读:在一个事务内读取到别的事务插入的数据

程序模拟:

总结步骤:

  • 1.开启事务 connection.setAutoCommit(false);
  • 2.执行SQL
  • 3.若事务完成则提交事务 connection.commit();
  • 4.捕获到异常自动回滚,也可以在catch显式定义 connection.rollback();

9 数据库连接池

正常程序执行流程:数据库连接->执行->释放连接

连接与释放需要耗费大量系统资源

池化技术:(线程池类似)预先创建连接,使用时直接使用连接好的

  • 最小连接数:按常用连接数来设置
  • 最大连接数:业务承载的上限 超过则等待
  • 等待超时:等待时长超过此时长断开请求

开源数据源

  • DBCP
  • C3P0
  • Druid

编写连接池:实现DataSource接口

DBCP

准备jar包:下载DBCP 下载POOL

  • commons-dbcp-1.4.jar
  • commons-pool-1.6.jar

测试程序:

配置文件dbcpconfig.properties:

工具类jdbcUtils_DBCP:

测试程序:

C3P0

准备jar包:下载C3P0

  • c3p0-0.9.5.5.jar
  • mchange-commons-java-0.2.19.jar

测试程序:

配置文件c3p0-config.xml

工具类jdbcUtils_C3P0:

测试程序:

 

posted on 2021-11-27 05:42  Egoistic_Flowers  阅读(27)  评论(0编辑  收藏  举报