【Java 从 0 到架构师】JDBC,Java 多态实现原理解析
如何通过 Java 操作数据库?
JDBC,全称是 Java Database Connectivity
在 Java 中用来规范如何访问关系型数据库,由各大数据库厂商去实现它
属于 JavaSE 的一部分
==============================================================================================
8.0 版本的驱动包同时支持 MySQL 5.7,8.0
文档:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-versions.html
下载地址:https://dev.mysql.com/downloads/connector/j/
==========================================================================
示例代码:https://gitee.com/szluyu99/mj_java/blob/master/04_JDBC/src/com/mj/Main.java
将 Driver(驱动程序)注册到 DriverManager(驱动程序管理者)
利用 DriverManager 创建 Connection(数据库连接)
利用 Connection 创建 Statement(语句)
利用 Statement 执行 SQL 语句
关闭资源(关闭 Statement,Connection 等)
MySQL 的 url 格式:
jdbc:mysql://IP 地址:端口号/数据库名
示例:
jdbc:myqsl://localhost:3306/xmg
从 JDBC 4.0 开始,显式注册驱动程序是可选的
只需要将供应商的 Jar 放在类路径中,然后 DriverManager 就可以自动检测并加载驱动程序
JDBC 版本:
JDBC 4.0 包含在 Java SE 6 中
JDBC 4.1 包含在 Java SE 7 中
JDBC 4.2 包含在 Java SE 8 中
JDBC 4.3 包含在 Java SE 9 中
ResultSet executeQuery(String sql)
:执行 DQL 语句
int executeUpdate(String sql)
:执行 DML、DDL 语句
如果是 DML 语句,返回值代表影响的记录数量
如果数据库没有任何返回值,通常返回 0
boolean next()
:让游标指向下一行
如果指向的这行有数据,就返回 true
否则,返回 false
XX getXX(int columnIndex)
、XX getXX(String columnLabel)
获取当前行(游标指向的那行)某一列的数据
columnIndex 的数值从 1 开始
PreparedStatement 接口继承自 Statement 接口
建议使用 PreparedStatement 替代 Statement
Preparedstatement 的优点:
可以防止 SQL 注入
执行速度比 Statement 快
支持批量处理
一些经常动态修改的值,建议放入到配置文件中,不要写死在 Java 代码中
因为 .java 编译后变成 .class,无法直接修改其内容
已部署的项目想要修改配置信息,则需要修改 Java 代码再重新部署
Java 中常用的配置文件:
properties:比较单一,适合量小、简单的配置
xml:比较灵活,适合量大、复杂的配置
properties 文件:
key,value 的分隔符是
=
或:
建议分隔符左右不要留空格
#
、!
开头是单行注释可以用反斜线
\
连接多行内容
数据库连接池,可以提高访问数据库的性能,负责创建、分配、管理和释放数据库连接
基本思想:
在初始化时,创建一定数量的数据库连接对象存储在内存中
当需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已创建的空闲连接对象
使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用
当连接的空闲时间已超过最大空闲时间时,将会释放掉该连接
可以通过设置参数来控制初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间
可以通过其自身的管理机制来监视数据库连接的数量、使用情况
Java 中常见的开源的数据库连接池:
C3P0,Proxool,DBCP,BoneCP,Druid 等
Druid 产自阿里巴巴,项目地址:https://github.com/alibaba/druid/
jar 包下载:https://mvnrepository.com/artifact/com.alibaba/druid
==============================================================================
示例代码:https://gitee.com/szluyu99/mj_java/tree/master/06_crm_Spring-JDBC
Spring JDBC 框架可以帮助开发者节省大量开发工作,自动去处理一些低级细节,比如
异常处理、打开和关闭资源(Connection、Statement,ResultSet)
需要的 jar 包:
spring-jdbc
spring-beans
spring-core
spring-tx
spring-jcl
Spring JDBC 核心类:JdbcTemplate
构造方法:
public JdbcTemplate(DataSource datasource)
执行 DDL、DML 语句:
int update(String sql, Object... args)
执行 DQL 语句:
<T> List<T> query(String sql, RowMapper<T> rowMapper, Object... args)
<T> queryForObject(String sql, RowMapper<T> rowMapper, Object... args)
评论