1 概念
java Data Base Connectivity,java语言连接数据库系统。它是用于Java编程语言和数据库之间的数据库无关连接的标准Java API
而JDBC规范就是给java程序员提供的基于多套数据库连接的标准接口,使java程序员在连接数据库的时候,不需要关心底层数据库的实现原理,由SUN公司负责制定。JDBC接口调用方是java程序员,负责连接数据库并且操作数据库;而JDBC接口的实现类由各大数据库厂商的java程序员负责编写。
各大数据库厂商编写的JDBC接口的实现类,编译之后将这些实现类打成jar包并发布,打成的jar包称之为“连接数据库驱动”
2 架构
- JDBC API使用驱动程序管理器并指定数据库的驱动程序来提供与异构数据库的透明连接。
- JDBC驱动程序管理器确保使用正确的驱动程序来访问每个数据源。驱动程序管理能够支持连接到多个异构数据库的多个并发驱动程序。
3 JDBC组件
- DriverManager:此类管理数据库驱动程序列表,使用通信子协议将来自java应用程序的连接请求与适当的数据库驱动程序进行匹配。在JDBC下识别某个子协议的第一个驱动程序将用于建立数据库连接。
- Driver:此接口处理与数据库服务器的通信。我们很少会直接与Driver对象进行交互。但会使用DriverManager对象来管理这种类型的对象。它还提取与使用Driver对象相关的信息。
- Connection:此接口具有用于联系数据库的所有方法。连接(Connection)对象表示通信上下文。即与数据库的所有通信仅仅通过连接对象。
- Statement:使用从此接口创建的对象将SQL语句提交到数据库中。除了执行存储过程之外,一些派生的接口还接受参数。
- ResultSet:在使用Statement对象执行SQL查询之后,这些对象保存从数据库中检索的数据,它作为一个迭代器并可移动ResultSet对象查询数据。
- SQLException:此类处理数据库应用程序中发生的任何错误。
4 demo
public class ConnectDemo {
static String DRIVER="com.mysql.jdbc.Driver";
static String URL="jdbc:mysql://localhost:3306/study?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC";
static String USER="root";
static String PASSWORD="root";
@Test
public void demo(){
Connection connection =null;
PreparedStatement preparedStatement =null;
ResultSet resultSet =null;
try {
// 1.加载数据库驱动
Class.forName(DRIVER);
// 2.通过驱动管理获取数据库连接
connection= DriverManager.getConnection(URL,USER,PASSWORD);
String sql = "SELECT id,username FROM user WHERE id = ?";
// 3 获取预处理statement
preparedStatement = connection.prepareStatement(sql);
// 4 设置参数
preparedStatement.setInt(1.1);
// 5 向数据库发出SQL执行查询,得到结果集
resultSet = preparedStatement.executeQuery();
// 6 处理结果集
while (resultSet.next()){
String id = resultSet.getString("id");
String username= resultSet.getString("username");
System.out.println("id: "+id+" username: "+username);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
// 7 释放资源
if (resultSet!=null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (preparedStatement!=null){
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection!=null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
输出结果:
id: 1 username: xiaoming