Java的JDBC

传送门

SpringMVC的源码解析(精品)
Spring6的源码解析(精品)
SpringBoot3框架(精品)
MyBatis框架(精品)
MyBatis-Plus
SpringDataJPA
SpringCloudNetflix
SpringCloudAlibaba(精品)
Shiro
SpringSecurity
java的LOG日志框架
Activiti(敬请期待)
JDK8新特性
JDK9新特性
JDK10新特性
JDK11新特性
JDK12新特性
JDK13新特性
JDK14新特性
JDK15新特性
JDK16新特性
JDK17新特性
JDK18新特性
JDK19新特性
JDK20新特性
JDK21新特性
其他技术文章传送门入口

一、JDBC简介

1.Java DataBase Connectivity,使用Java程序访问数据库时,Java代码并不是直接通过TCP连接去访问数据库,而是通过JDBC接口来访问,而JDBC接口则通过JDBC驱动来实现真正对数据库的访问,JDBC驱动就是JDBC接口实现。
2.一个MySQL的JDBC的驱动就是一个jar包,它本身也是纯Java编写的。我们自己编写的代码只需要引用Java标准库提供的java.sql包下面的相关接口,由此再间接地通过MySQL驱动的jar包通过网络访问MySQL服务器,所有复杂的网络通讯都被封装到JDBC驱动中

二、JDBC查询

1、jdbc链接

Connection代表一个JDBC连接,它相当于Java程序到数据库的连接(通常是TCP连接)。打开一个Connection时,需要准备URL、用户名和口令,才能成功连接到数据库。
jdbc链接的五种方式:
方式一
在这里插入图片描述
方式二
在这里插入图片描述
方式三
在这里插入图片描述
方式四
在这里插入图片描述
Driver的静态代码块有 注册驱动代码,所以类加载的时候,初始化静态代码块就会执行,就会注册了,这边就不用再次注册了。
在这里插入图片描述
在这里插入图片描述
方式五
在这里插入图片描述

2、Statement和PreparedStatement的区别

PreparedStatement 是java.sql中的一个接口,它是Statement的子接口,叫预编译语句,比Statement更快。
Statement在创建对象的时候不传SQL过去,执行的时候传SQL过去给DBMS,由 DBMS首先进行编译后再执行。
PreparedStatement创建对象的时候就传SQL过去给DBMS去编译,执行的时候DBMS直接运行。
#{OGNL表达式}和${OGNL表达式}区别:
#{OGNL表达式}mybatis会认为这是一个参数,是一个值,会把这个表达式用占位符?替换,在预编译的时候传给DBMS去编译了。用 1 OR 1=1 这个传值的时候,这个值会被看成一整块参数看成一个值,是不能拼接SQL的。
${OGNL表达式}mybatis会把这个值替换到SQL中,是作为SQL的组成部分的,是可以拼接SQL的。用 1 OR 1=1 这个传值的时候,就不是作为一个值了,而是SQL一部分来拼接SQL,会发生SQL注入。常用到order by的场景,不能用于登录。在jdbc的sql代码order by后面不能使用占位符?,只能进行字符串的拼接。

3、和MySQL数据库的映射对应

SQL数据类型----Java数据类型
BIT, BOOL------boolean
INTEGER--------int
BIGINT---------long
REAL-----------float
FLOAT, DOUBLE–double
CHAR, VARCHAR–String
DECIMAL--------BigDecimal
DATE-----------java.sql.Date, LocalDate
TIME-----------java.sql.Time, LocalTime

三、JDBC事务

数据库事务(Transaction)具有ACID特性:
Atomicity:原子性
Consistency:一致性
Isolation:隔离性
Durability:持久性
默认情况下,我们获取到Connection连接后,总是处于“自动提交”模式,也就是每执行一条SQL都是作为事务自动执行的。只要关闭了Connection的autoCommit,那么就可以在一个事务中执行多条语句,事务以commit()方法结束。

四、JDBC连接池

HikariConfig连接池举例

HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/test");
config.setUsername("root");
config.setPassword("password");
config.addDataSourceProperty("connectionTimeout", "1000"); // 连接超时:1秒
config.addDataSourceProperty("idleTimeout", "60000"); // 空闲超时:60秒
config.addDataSourceProperty("maximumPoolSize", "10"); // 最大连接数:10
DataSource ds = new HikariDataSource(config);

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

蓝影铁哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值