Java的JDBC

目录

  • 一、JDBC简介
  • 二、JDBC查询
    • 1、jdbc链接
    • 2、Statement和PreparedStatement的区别
    • 3、和MySQL数据库的映射对应
  • 三、JDBC事务
  • 四、JDBC连接池

一、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链接的五种方式:
方式一
Java的JDBC_第1张图片
方式二
Java的JDBC_第2张图片
方式三
Java的JDBC_第3张图片
方式四
Java的JDBC_第4张图片
Driver的静态代码块有 注册驱动代码,所以类加载的时候,初始化静态代码块就会执行,就会注册了,这边就不用再次注册了。
Java的JDBC_第5张图片
Java的JDBC_第6张图片
方式五
Java的JDBC_第7张图片

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);

你可能感兴趣的:(java,servlet,spring)