JDBC
mysql特点
- 是一种开源代码的关
- 系型数据库管理系统(RDBMS)
- 支持多线程,充分利用CPU资源
- 价格便宜
- 大数据库处理(5千万条数据)
https://www.runoob.com/mysql/mysql-tutorial.html
什么是JDBC
- JDBC为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成。是Java程序与数据库系统通信的标准API。JDBC API使得开发人员可以使用纯Java的方式来连接数据库并执行操作。
- 数据库驱动
访问数据库流程
- 驱动管理器(加载JDBC驱动程序)👇
- 连接数据库(建立与数据库的连接)👇
- SQL语句(发送SQL查询)👇
- 结果集(得到查询结果)
Driver接口
- Driver接口由数据库厂家提供,对于java开发者而言,只需要使用Driver接口就可以了。
- 在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序。不同的数据库有不同的装在方法。
- 驱动:就是各个数据库厂商实现的Sun公司提供的JDBC接口。即对Connection等多个接口的实现类的jar文件
- 装载MySql驱动:
Class.forName("com.mysql.cj.jdbc.Driver");
- 装载Oracle驱动:
Class.forName("oracle.jdbc.driver.OracleDriver")
DriverManager接口
- DriverManager是JDBC的管理层,作用于用户和驱动程序之间。
- DriverManager跟踪可用的驱动程序,并在数据库和相应的驱动程序之间建立连接。
Connection接口
- Connection与特定数据库的连接(会话),在连接上下文中执行SQL语句并返回结果。
- DriverManager的getConnection()方法建立在JDBC URL中定义的数据库Connection连接上。
- 连接MySQL数据库:
Connection con = DriverManager.getConnection("jdbc:mysql://host:port/database","user","password");
- 连接Oracle数据库:
Connection con = DriverManager,getConnection("jdbc:oracle:thin:@host:port:database","user","password")
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database?serverTimezone=GMT%2B8", "root", "root");
Statement接口
- 用于执行静态SQL语句并返回它所生成结果的对象。
- 三种Statement类:
- Statement:
- 由createStatement创建,用于发送简单的SQL语句。(不带参数的)
- PreparedStatement:
- 继承自Statement接口,由prepareStatement创建,用于发送含有一个或多个输入参数的sql语句。由PreparedStatement对象比Statement对象的效率更高,并且可以防止SQL注入。我们一般都用PreparedStatement.
- CallableStatement:
- 继承自PrepaStatement。由方法prePareCall创建,用于调用存储过程。
- Statement:
- 常用的Statement方法:
- execute(): 运行语句,返回是否有结果集。
executeQuery()
: 运行select语句,返回 ResultSet结果集。executeUpadte()
: 运行insert/update/delete操作,返回更新的数。
ResultSet接口
- Statement执行SQL语句时返回ResultSet结果集。
- ResultSet提供的检索不同类型字段的方法,常用的有:
- getString(): 获得在数据库里是varchar,char类型的对象。
- getFloat(): 获得在数据库里是Float类型的对象。
- getDate(): 获得在数据库里是Date类型的数据。
- getBoolean(): 获得在数据库里边是Boolean类型的数据。
while (resultSet.next()) {
System.out.println(resultSet.getString("username"));
}
接口关闭次序
- ResultSet接口👇
- PreparedStatement接口👇
- Connection接口👇
JDBC事务
在JDBC中事务是默认自动提交的。
conn.setAutoCommit(false); // 设置为手动提交
在最后一步,
conn.commit();
提交事务- 在异常中回滚事务
conn.rollback();
时间类型
java.util.Date
- 子类:java.sql.Date:表示年月日
- 子类:java.sql.Time:表示时分秒
- 子类:java.sql.Timestamp:表示年月日时分秒
日期比较处理
- 插入随机日期
- 取出指定日期范围内的记录
CLOB
CLOB(Character Large Object)
- 用于存储大量的文本数据
- 大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以流的方式来处理的,而非一般的字段,一次即可读出数据。
MySQL中相关类型
- tinytext最大长度为255(2[1]-1)字符的text列
- text[(M)]最大长度为65535(2[2]-1)字符的text列。
- mediumtext最大长度为16777215(2[3]-1)字符的text列。
- longtext最大长度4294967295或4G(2[4]-1)字符的text列
BLOB
BLOB
- 用于存储大量的二进制数据
- 大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以流的方式来处理的,而非一般的字段,一次即可读出数据。
MySQL中相关类型
- tinyblob最大长度为255(2[5]-1)字符的blob列
- blob[(M)]最大长度为65535(2[6]-1)字符的blob列。
- mediumblob最大长度为16777215(2[7]-1)字符的blob列。
- longblob最大长度4294967295或4G(2[8]-1)字符的blob列
资源文件(properties)
.properties
```java static Properties properties = null; // 可以帮助我们读取资源文件中的信息
static { // 加载JDBCUtils类的时候调用 properties = new Properties();
try {
properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties")); // 读取文件
} catch (IOException e) {
e.printStackTrace();
}
}
// ++++++++++++++++++++++++++ // 使用方法 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
- ORM(Object Relationship Mapping)
- 表结构跟类对应;表中字段和类的属性对应;表中的记录和对象对应
- 让javabean的属性名和类型尽量和数据库保持一致
- 一条记录对应一个对象。将这些查询到的对象放到容器中(List,Set,Map)
- ORM就是将查询到的数据,存储到对象中或者容器中。还可以利用javabean封装记录。
连接池(Connection Pool)
- 就是将Connection对象放入List中,反复复用!
- 连接池的初始化
- 事先放入多个连接对象
- 从连接池中取连接对象
- 如果池中有可用的连接,则将池中最后一个返回,同时,也将改连接从池中remove,表示正在使用
- 如果池中无可用连接,则创建一个新的。
- 关闭连接
- 不是真正关闭连接,而是将用完的连接放入连接池中。