JDBC即Java Data Base Connectivity,Java数据库连接。它是一种用于执行SQL语句的Java API,是属于Java中数据库连接的一个规范。它的API主要由java.sql.* 和javax.sql.* 中的类和包组成。
现在很多项目都是使用ORM框架来进行与数据库映射的,例如MyBatis和Hibernate都是在JDBC基础上进行了一层封装来实现的。所以说JDBC还是非常重要的。
一、JDBC工作原理
1.1 JDBC数据库层次结构
根据这个层次结构能够看出来,其实JDBC最低层就是从数据库来向上延伸的。
对于他的驱动层,由数据库厂商来提供数据库JDBC的一个驱动程序,然后Sun公司在去以这个程序来实现Java的API。最后再由ORM框架等对其进行一个包装和应用。
1.2 整体工作流程
- 加载驱动。
- 建立Connection连接。
- 创建操作命令对象Statement。
- 编写SQL语句并执行。
- 获取到ResultSet结果集对象并处理。
- connection.close()关闭连接。
二、主要用到的三个接口
2.1 数据库连接Connection
Connection接口实现类是由数据库提供的,获取Connection对象主要有两种方式:
一种是DriverManager驱动管理类的静态方法获取,另一种是通过DataSource数据源对象获取。
2.1.1 DriverManager
首先需要加载JDBC驱动程序,然后再创建数据库连接。
//加载JDBC驱动程序
Class.forName("com.mysql.jdbc.Driver");
//创建数据库连接
Connection connection = DriverManager.getConnection(url);
2.1.2 DataSource
该方法主要是跟新建一个数据源,然后通过设置该MySQL数据库的url地址,以及用户名和密码,这样就能够将数据源连接到相应的对象,然后通过这个数据源对象来获取到同数据库的连接。
DataSource ds = new MysqlDataSource();
//设置URL
((MysqlDataSource) ds).setUrl("jdbc:mysql://localhost:3306/test");
//设置用户名
((MysqlDataSource) ds).setuser("root");
//设置密码
((MysqlDataSource) ds).setPassword("root");
//最终根据这个数据源来获取数据库连接
Connection connection = ds.getConnection();
2.1.3 两种方式的区别
- DriverManager:该方法获取到的Connection连接,无法进行重复利用,每次使用完要通过connection.close() 来释放连接资源。
- DataSource:这种方式提供了数据库连接池的支持,连接池在初始化时会创建一定数量的数据库连接,这些连接是可以重复使用的,每次使用完一个连接以后,不会进行资源释放,而是重新放回到数据库连接池中。
2.2 发送Statement
Statement对象主要是用来将SQL语句发送到数据库中的,JDBC API中主要提供了三种Statement对象,Statement、PreparedStatement和CallableStatement。
其中使用到最多的应该就是PreParedStatement。
优势:
- 参数化SQL查询。
- 性能比Statement更高。
- 会进行SQL预编译,提高效率。
- 阻止常见的SQL注入攻击。
- 可以使用占位符?,下标从1开始。
两种执行SQL的方法:
6. executeQuery()方法执行会返回单个结果集,多用于select查询语句。
7. executeUpdate()方法返回值是一个整数,会表明受影响的行数,多用于update、insert以及delete语句。
2.3 结果集ResultSet
ResultSet对象指返回的结果集,表示符合SQL语句条件的所有行,主要通过一系列getXXX()方法来进行数据的获取。
三、JDBC优势
- 开发数据库应用可以不用再限定在特定数据库厂商的API。
- 程序的可移植性增强。
- 用Java进行数据库操作可以完全面向接口进行编程。