JDBC是一种可以执行的SQL语句的Java API,是连接数据库和Java应用程序的纽带。
JDBC-ODBC桥
JDBC-ODBC桥是一个JDBC驱动程序,完成了从JDBC操作到ODBC操作之间的转换工作,允许JDBC驱动程序被用作ODBC的驱动程序。使用JDBC-ODBC桥连接数据库的步骤如下:
(1)首先加载JDBC-ODBC桥的驱动程序,代码如下:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
(2)使用java.sql包中的Connection接口,并通过DriverManager类的静态方法getConnection创建连接对象,代码如下:
Connection conn = DriverManager.getConnection("jdbc:odbc:数据源名字","user name","password");
(3)想数据库发送SQL语句。使用Statement接口声明一个SQL语句对象。通过连接对象conn的createStatement()方法创建这个SQL对象。
Statement sql = conn.createStatement();
JDBC技术
JDBC的全称是java DataBase Connectivity,是一套面向对象的应用程序接口。指定了统一的访问各种关系数据库的标准接口。JDBC是一种底层的API,因此访问数据库时需要在业务逻辑中嵌入SQL语句。SQL语句是面向关系的,依赖于关系模型,所以通过JDBC技术访问数据库也是面向关系的,JDBC技术主要完成以下几个任务:
1、与数据库建立一个连接。
2、向数据库发送SQL语句。
3、处理从数据库返回的结果。
需要注意的是,JDBC不能直接访问数据库,必须依赖于数据库厂商提供的JDBC驱动程序。
JDBC驱动程序的类型
JDBC的总体结构由4种组件----应用程序、驱动程序管理器、驱动程序和数据源组成。
JDBC驱动基本上分为以下4种。
JDBC-ODBC桥、本地API一部分用Java编写的驱动程序、JDBC网络驱动、本地协议驱动。
JDBC中常用的类和接口
Connection接口
Connection接口代表与特定的数据库的连接,在连接上下文中执行SQL语句并返回结果,Connection接口的常用方法如下:
- close(), 关闭该数据库连接
- commit(), 提交所有更改内容并释放该Connection对象锁定的资源
- createStatement(), 基于本Connection对象,创建Statement对象
- getAutoCommit(), 获取当前是否是自动提交模式
- getMetaData(), 获取本连接相关的数据库元数据
- isClosed(), 返回当前连接对象是否已经被关闭
- preparedStatement(), 基于本连接对象,创建PreparedStatement对象
- rollback(), 取消本轮事务中前面已经提交的更改
- setAutoCommmit(), 设置是否自动提交
Statement接口
Statement接口用于在已经建立连接的基础上向数据库发送SQL语句。在JDBC中有3中Statement对象,分别是Statement、PreparedStatement,和CallableStatement。Statement对象用于执行不带参数的简单的SQL语句;PreparedStatement继承了Statement,用来执行动态的SQL语句;CallableStatement继承了PreparedStatement,用于执行对数据库的存储过程的调用。Statement常用的方法如下:
-
execute(String sql),执行静态的SELECT语句,该语句可能返回多个结果集
-
executeQuery(String sql),执行给定的SQL语句,该语句返回单个ResultSet对象。
-
clearBatch(),清空此Statement对象的当前SQL命令列表。
-
executeBatch(),将一批命令提交给数据库执行,
-
addBatch(String sql),将给定SQL命令添加到此Statement对象的当前命令列表中。如果驱动程序不支持批量处理,将抛出异常
-
close(),释放Statement实例占用的数据库和JDBC资源。
PreparedStatement接口
PreparedStatement接口用来执行SQL语句。通过PreparedStatement实例执行的动态SQL语句,将被编译保存到PreparedStatement实例中,从而可以反复地执行该SQL语句。
在这偷懒一下就不对PreparedStatement的方法一一列出了。需要可以查阅java API。
DriverManager类
DriverManager类用来管理数据库中的所有驱动程序。它是JDBC的管理层,通过getConnection()方法可以建立连接,有可能抛出SQLException异常。DriverManager常用的方法如下: -
getConnection(String url,String user,String password),指定3个参数(依次是连接数据库的URL、用户名、密码)来获取与数据库的连接。
-
setLoginTimeout(),获取驱动程序试图登录到某一数据库时可以等待的最长时间,以秒为单位。
-
println(String message)将一条消息打印到当前JDBC日志流中
ResultSet接口
ResultSet接口类似于一个临时表,用来暂时存放数据库查询操作所获得的的结果集。ResultSet实例具有指向当前数据行的指针,指针开始的位置在第一条记录前面,通过next()方法可将指针向下移。
ResultSet接口方法较多就不一一列出。需要请查看java API
实操代码:
package com.huangxt.jdbc;
import java.sql.*;
/**
* @Title: JdbcTest
* @Description:
* @Auther: huangxt
* @Version: 1.0
* @create 2019/7/13 12:32
*/
public class JdbcTest {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/jeeplus_activity?serverTimezone=GMT%2B8","root","123456");
//获取Statement
Statement statement = conn.createStatement();
ResultSet resultSet = statement.executeQuery("select * from sys_user");
while(resultSet.next()){
System.out.println(resultSet.getString("name"));
}
statement.close();
System.out.println("-----------------");
//预处理语句
PreparedStatement preparedStatement = conn.prepareStatement("select * from sys_user where name = ?");
preparedStatement.setString(1,"admin");
ResultSet resultSet2 = preparedStatement.executeQuery();
while(resultSet2.next()){
System.out.println(resultSet2.getString("name"));
}
preparedStatement.close();
conn.close();
}
}