JDBC

mysql特点

  1. 是一种开源代码的关
  2. 系型数据库管理系统(RDBMS)
  3. 支持多线程,充分利用CPU资源
  4. 价格便宜
  5. 大数据库处理(5千万条数据)

https://www.runoob.com/mysql/mysql-tutorial.html

什么是JDBC

  1. JDBC为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成。是Java程序与数据库系统通信的标准API。JDBC API使得开发人员可以使用纯Java的方式来连接数据库并执行操作。
  2. 数据库驱动

访问数据库流程

  1. 驱动管理器(加载JDBC驱动程序)👇
  2. 连接数据库(建立与数据库的连接)👇
  3. SQL语句(发送SQL查询)👇
  4. 结果集(得到查询结果)

Driver接口

  1. Driver接口由数据库厂家提供,对于java开发者而言,只需要使用Driver接口就可以了。
  2. 在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序。不同的数据库有不同的装在方法。
  3. 驱动:就是各个数据库厂商实现的Sun公司提供的JDBC接口。即对Connection等多个接口的实现类的jar文件
  4. 装载MySql驱动:Class.forName("com.mysql.cj.jdbc.Driver");
  5. 装载Oracle驱动:Class.forName("oracle.jdbc.driver.OracleDriver")

DriverManager接口

  1. DriverManager是JDBC的管理层,作用于用户和驱动程序之间。
  2. DriverManager跟踪可用的驱动程序,并在数据库和相应的驱动程序之间建立连接。

Connection接口

  1. Connection与特定数据库的连接(会话),在连接上下文中执行SQL语句并返回结果。
  2. DriverManager的getConnection()方法建立在JDBC URL中定义的数据库Connection连接上。
  3. 连接MySQL数据库:
    • Connection con = DriverManager.getConnection("jdbc:mysql://host:port/database","user","password");
  4. 连接Oracle数据库:
  • Connection con = DriverManager,getConnection("jdbc:oracle:thin:@host:port:database","user","password")
  1. Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database?serverTimezone=GMT%2B8", "root", "root");

Statement接口

  1. 用于执行静态SQL语句并返回它所生成结果的对象。
  2. 三种Statement类:
    • Statement:
      • 由createStatement创建,用于发送简单的SQL语句。(不带参数的)
    • PreparedStatement:
      • 继承自Statement接口,由prepareStatement创建,用于发送含有一个或多个输入参数的sql语句。由PreparedStatement对象比Statement对象的效率更高,并且可以防止SQL注入。我们一般都用PreparedStatement.
    • CallableStatement:
      • 继承自PrepaStatement。由方法prePareCall创建,用于调用存储过程。
  3. 常用的Statement方法:
    1. execute(): 运行语句,返回是否有结果集。
    2. executeQuery(): 运行select语句,返回 ResultSet结果集。
    3. executeUpadte(): 运行insert/update/delete操作,返回更新的数。

ResultSet接口

  1. Statement执行SQL语句时返回ResultSet结果集。
  2. ResultSet提供的检索不同类型字段的方法,常用的有:
    1. getString(): 获得在数据库里是varchar,char类型的对象。
    2. getFloat(): 获得在数据库里是Float类型的对象。
    3. getDate(): 获得在数据库里是Date类型的数据。
    4. getBoolean(): 获得在数据库里边是Boolean类型的数据。
      1. while (resultSet.next()) {
      2. System.out.println(resultSet.getString("username"));
      3. }

接口关闭次序

  1. ResultSet接口👇
  2. PreparedStatement接口👇
  3. Connection接口👇

JDBC事务

  1. 在JDBC中事务是默认自动提交的。

    1. conn.setAutoCommit(false); // 设置为手动提交
  2. 在最后一步,conn.commit();提交事务

  3. 在异常中回滚事务conn.rollback();

时间类型

java.util.Date

  1. 子类:java.sql.Date:表示年月日
  2. 子类:java.sql.Time:表示时分秒
  3. 子类:java.sql.Timestamp:表示年月日时分秒

日期比较处理

  1. 插入随机日期
  2. 取出指定日期范围内的记录

CLOB

CLOB(Character Large Object)

  1. 用于存储大量的文本数据
  2. 大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以流的方式来处理的,而非一般的字段,一次即可读出数据。

MySQL中相关类型

  1. tinytext最大长度为255(2[1]-1)字符的text列
  2. text[(M)]最大长度为65535(2[2]-1)字符的text列。
  3. mediumtext最大长度为16777215(2[3]-1)字符的text列。
  4. longtext最大长度4294967295或4G(2[4]-1)字符的text列

BLOB

BLOB

  1. 用于存储大量的二进制数据
  2. 大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以流的方式来处理的,而非一般的字段,一次即可读出数据。

MySQL中相关类型

  1. tinyblob最大长度为255(2[5]-1)字符的blob列
  2. blob[(M)]最大长度为65535(2[6]-1)字符的blob列。
  3. mediumblob最大长度为16777215(2[7]-1)字符的blob列。
  4. longblob最大长度4294967295或4G(2[8]-1)字符的blob列

资源文件(properties)

  1. .properties ```java static Properties properties = null; // 可以帮助我们读取资源文件中的信息

static { // 加载JDBCUtils类的时候调用 properties = new Properties();

  1. try {
  2. properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties")); // 读取文件
  3. } catch (IOException e) {
  4. e.printStackTrace();
  5. }

}

// ++++++++++++++++++++++++++ // 使用方法 Class.forName(properties.getProperty(“mysqlDriver”));

```properties
mysqlDriver=com.mysql.cj.jdbc.Driver
mysqlURL=jdbc:mysql://localhost:3306/test1?serverTimezone=GMT%2B8
mysqlUser=root
mysqlPwd=root

ORM

  1. ORM(Object Relationship Mapping)
  2. 表结构跟类对应;表中字段和类的属性对应;表中的记录和对象对应
  3. 让javabean的属性名和类型尽量和数据库保持一致
  4. 一条记录对应一个对象。将这些查询到的对象放到容器中(List,Set,Map)
  5. ORM就是将查询到的数据,存储到对象中或者容器中。还可以利用javabean封装记录。

连接池(Connection Pool)

  1. 就是将Connection对象放入List中,反复复用!
  2. 连接池的初始化
    • 事先放入多个连接对象
  3. 从连接池中取连接对象
    • 如果池中有可用的连接,则将池中最后一个返回,同时,也将改连接从池中remove,表示正在使用
    • 如果池中无可用连接,则创建一个新的。
  4. 关闭连接
    • 不是真正关闭连接,而是将用完的连接放入连接池中。

  1. 8 ↩︎
  2. 16 ↩︎
  3. 24 ↩︎
  4. 32 ↩︎
  5. 8 ↩︎
  6. 16 ↩︎
  7. 24 ↩︎
  8. 32 ↩︎