JDBC原理

JDBC就是使用Java语言操作关系型数据库的一套API

JDBC简介

JDBC概念:

JDBC就是使用Java语言关系型数据库的一套API

全称:(Java DataBase Connectivity)Java数据库连接

好处:

各数据库厂商使用相同的接口,Java代码不需要针对不同数据分别开发

可随时替换底层数据库,访问数据库的Java代码基本不变

JDBC快速入门

0.创建工程,导入驱动jar包

1.注册驱动

Class.forName("com.mysql.jbdc.Driver");

2.获取连接

Connection conn = DriverManager.getConnection(url,username,password);

3.定义SQL语句

Sting sql = "update...";

4.获取执行对象SQL对象

Statement stmt = conn.createStatement();

5.执行SQL

stmt.executeUpdate(sql);

6.处理返回结果

7.释放资源

JDBC API 详解

DriverManager

作用:

1.注册驱动 Class.forName("com.mysql.jbdc.Driver"); 可省略不写

2.获取数据库连接

static Connection getConnection(String url,String user, String password)

参数:

①url:连接路径

语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数值键值对1&参数值键值对2...

细节:

如果连接的是本机musql服务器,并且mysql服务器默认端口是3306,则url可以简写为:jdbd:mysql:///数据库名称?参数键值对

配置useSSL=false参数,禁用安全连接方式,解决警告提示

②user:用户名

③password:密码

Connection

作用:

1.获取执行SQL对象

普通执行SQL对象

State createStatement()

预编译SQL的执行SQL对象:防止SQL注入

PrepareStatement prepareStatement(sql)

执行存储过程的对象

CallableStatement prepareCall(sql)

2.管理事务

Statement

作用:

1.执行SQL语句

ResultSet

1.封装了DQL查询语句的结果

ResultSet stmt.executeQuery(sql):执行DQL语句,返回ResultSet对象

获取查询结果

使用步骤:

1.游标向下移动一行,并判断该行是否有数据:next()

2.获取数据:getXxx(参数)

PreparedStatement

作用:预编译SQL语句并执行:预防SQL注入问题

SQL注入:SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法

PreparedStatement原理:

好处:1.预编译SQL,性能更高 2.防止SQL注入:将敏感字符进行转义

①PreparedStatement 预编译功能开启: userServerPrepStmts=true

②配置MySQL执行日志(重启mysql服务后生效)

PreparedStatement原理:

1.在获取PreparedStatement对象时,将sql语句发送给musql服务器进行检查,编译(这些步骤很耗时)

2.执行时就不用再进行这些步骤了,速度更快

3.如果sql模板一样,则只需要进行一次检查、编译

数据库连接池

数据库连接池简介

数据库连接池是个容器,负责分配、管理数据库连接(Connection)

它允许应用程序重复使用一个现有的数据库来连接,而不是再重新建立一个

释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏

好处:

资源重用

提升系统影响速度

避免数据库连接遗漏

数据库连接池实现

标准接口:DataSource

官方提供的数据库连接池标准接口,由第三方组织实现此接口

功能:获取连接

Connection getConnection()

常见的数据库连接池:

DBCP C3P0 Druid

Druid(德鲁伊)

Druid连接池是阿里巴巴开源的数据库连接池项目

功能强大,性能优秀,是Java语言最好的数据库连接池之一

相关推荐
圆山猫8 小时前
[Virtualization](四):Linux KVM/RISC-V 的 vCPU 运行路径
java·linux·risc-v
天桥下的卖艺者8 小时前
使用scitable包,两步生成逆概率删失权重(IPCW)
数据库·r语言
微学AI9 小时前
一根针指向所有方向:挂谷猜想对 LLM Agent 技能-记忆架构的启示
开发语言·人工智能·架构·挂谷猜想
城管不管9 小时前
ReAct、Plan-and-Execute、Reflection 三大智能 Agent 范式核心区别
java·人工智能·算法·spring·ai·动态规划
隔窗听雨眠9 小时前
AI原生数据库浪潮:国产数据库的架构重构与路径之争
数据库
IT小白杨9 小时前
从环境制备到自动化工作流:多账号运营的工程化架构拆解
java·经验分享·自动化·安全架构·指纹浏览器
数据库小学妹9 小时前
数据库选型实战:从数据类型到TCO成本,五维决策框架+九款产品横评
数据库·信创·国产数据库·数据库选型·oracle迁移
豆瓣鸡9 小时前
算法日记 - Day3
java·开发语言·算法
萧瑟余晖10 小时前
Java深入解析篇九之NIO详解
java·网络·nio
韭菜炒鸡肝天10 小时前
VTK开发笔记(一):VTK介绍,Qt..+VSx+VTK.编译
开发语言·笔记·qt