一、什么是JDBC
JDBC全称为:Java DataBase Connectivity,它是Java语言操作数据库的Java API
二、为什么要使用JDBC
DBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。
对于我们来说,操作数据库都是在JDBC API【接口】上,使用不同的数据库,只要用数据库厂商提供的数据库驱动程序即可,这大大简化了我们的学习成本。
三、JDBC快速入门
首先,使用JDBC的步骤如下:
1、注册数据库驱动
2、建立数据库连接
3、编写SQL语句
4、获取Statement对象
5、执行SQL语句
6、处理结果集
7、关闭数据库连接
案例1: 对account表中添加一条记录
1 | public class JdbcDemo1 { |
案例二:
1 | public class JdbcDemo2 { |
四、JDBC中使用到的类
(一)使用到的类如下
1、DriverManager
2、Connection
3、Statement
4、ResultSet
5、PreparedStatement
(二)DriverManager类
功能:
1、注册驱动:告诉程序该使用哪一个数据库驱动jar包
虽然在程序中我们注册驱动的代码如下:
1 | 但其实在Driver类的内部也是靠DriverManager来实现的,部分源码如下: |
通过源码我们会发现,该类有一个静态代码块,在代码块中使用了DriverManager中的静态方法。
因此只要将该类加载进内存,就已经注册好驱动了
补充:在jdbc5以后就可以省略注册驱动这一步,因为在jdbc5以后的jar包中有一个文件直接给出了Driver类的路径,如下:
其内容为:com.mysql.cj.jdbc.Driver
所以程序会自动加载该类,不需要手动给出路径。但为了避免兼容性问题,最好还是给出。
2、获取数据库连接:DriverManager.getConnection(url, user, password);
a. 参数一:url,指定连接的路径,如jdbc:mysql://localhost:3306/db1
如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称
b. 参数二:user,用户名
c. 参数三:password,密码
(三)Connection接口
功能:
1、获取执行SQL语句的对象:
通过如下两个方法来获取执行SQL语句的对象
1 | Statement createStatement() |
2、事务管理
1 | 开启事务:setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事务 |
(四)Statement接口
功能:执行SQL语句的对象
通常通过以下方法执行SQL语句:
1 | 1、boolean execute(String sql) :可以执行任意的sql 了解 |
(五)ResultSet接口
功能:表示数据库的查询结果集
通过以下方法来对结果集进行操作:
1 | boolean next(): 游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是,则返回false,如果不是则返回true |
(六)PreparedStatement接口
PreparedStatement接口继承自Statement接口,它比Statement更强大,使用起来更简单
功能:
- Statement对象编译SQL语句时,如果SQL语句有变量,就需要使用分隔符来隔开,如果变量非常多,就会使SQL变得非常复杂。PreparedStatement可以使用占位符,简化sql的编写
- Statement会频繁编译SQL。PreparedStatement可对SQL进行预编译,提高效率,预编译的SQL存储在PreparedStatement对象中
- PreparedStatement防止SQL注入。【Statement通过分隔符’++’,编写永等式,可以不需要密码就进入数据库】
五、抽取JDBC工具类
仔细观察就会发现,上面两个案例中的代码重复率非常高。有这两大部分
1、注册驱动,获取连接对象
2、释放资源
因此我们可以自己封装一个工具类来供我们使用
封装好的类如下:
1 | public class JDBCUtils { |
上面类中使用的配置文件(jdbc.properties)内容如下,位置为src目录下:
1 | url=jdbc:mysql://localhost:3306/exam?useSSL=false |
Java新手,若有错误,欢迎指正!