JDBC
JDBC
即使用java语言操作关系型数据库的一套API。
本质:
- 官方定义的一套操作所有关系型数据库的规则,即接口;
- 各个数据库厂商去实现这套接口,提供数据库驱动jar包;
- 可以使用这套接口(JDBC)去编程,但是真正执行代码的是驱动jar包中的实现类。
好处:
- 各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发;
- 可以随时更换底层数据库,访问数据库的java代码基本不变。
大体步骤
1 | //注册驱动 |
JDBC API
DriverManager
驱动管理类的作用:
- 注册驱动
- 获取数据库连接
1.注册驱动
1 | //注册驱动 |
但是对于MYSQL 5
之后的驱动包,可以省略注册驱动的步骤。自动加载jar包中如下的驱动类:
然后你发现和上述代码中的字符串一模一样()
2.获取连接
1 | static Connection | getConnection(String url,String user,String password) |
user
和password
没啥好说的,即自己数据库用户账密(一般用的都是root)。所以主要就是url。
url
,我们在计网中学过,它叫统一资源定位符。在这里,url
是连接数据库的路径。
- 语法:
jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2...
- 示例:
jdbc:mysql://127.0.0.1:3306
- 细节:
jdbc:mysql://
表明是JDBC
的mysql
的协议。- 如果连接的是本机的
mysql
服务器,并且mysql
服务器默认端口是3306(或许你自己改了,一般没改就是这个捏),那么可以简写成jdbc:mysql:///数据库名称?参数键值对1&参数键值对2...
- 配置
useSSL=false
参数,禁用安全连接方式,解决警告提示。
Connection
数据库连接对象的作用:
- 获取执行SQL的对象
- 管理事务
1.获取执行SQL的对象
1 | //普通执行SQL对象 |
2.事务管理
MYSQL
的事务管理:
1 | #mysql default下默认自动提交事务 |
JDBC
的事务管理:
1 | //开启事务--true:自动提交事务;false:手动提交事务,即开启事务 |
Statement
Statement
的作用:执行SQL语句。
1.执行SQL语句
1 | int executeUpdate(sql);//执行DML、DDL语句 |
ResultSet
结果集对象的作用:
- 封装了DQL查询语句的结果
1.封装DQL查询语句的结果
1 | ResultSet stmt.executeQuery(sql);//执行DQL语句,返回ResultSet对象 |
这里可以将每一行的数据载入ArrayList。
通过定义一个类:装载所有的schema捏。
PreparedStatement
PreparedStatement作用:
- 预编译SQL语句并执行,预防SQL注入问题。
SQL注入:通过操作输入事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法。
1 | //【获取PreparedStatement对象】 |
1.预编译SQL
1 | //开启预编译功能--加入url后面 |
鹅鹅鹅,下面这个可能不需要捏。
加入MYSQL的日志my.ini
(重启完成)
1 | log-out=FILE |
数据库连接池
数据库连接池:是个容器,负责分配、管理数据库连接(Connection
)。
- 它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个;
- 释放空间时间超过最大空闲时间的数据库连接来避免因为没有释放数据库而引起的数据库连接遗漏。
好处
- 资源重用
- 提升系统响应速度
- 避免数据库连接遗漏
实现
标准接口:DataSource
1 | //功能:获取连接 |
常见的数据库连接池:
- DBCP
- C3P0
- Druid(One of Best)
使用步骤
- 导入jar包 druid-1.1.10.jar
- 定义配置文件
- 加载配置文件
- 获取数据库连接池对象
- 获取连接
捣鼓半天,成功了。