一、JDBC概述
JDBC(Java Database Connectivity)即Java数据库连接,是Java语言中的一套数据库访问API,可以让Java应用程序通过SQL语句操作数据库,如查询、插入、删除、更新等操作。JDBC的作用是将Java代码和数据库进行交互连接,实现数据的增删改查,方便编程人员对数据进行操作。
JDBC是一个标准的API,该API定义了一系列的Java类和接口,可以被用来访问和管理不同类型的数据库,如MySQL、Oracle、SQL Server等。
下面是一个最简单的JDBC程序示例:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.sql.ResultSet; import java.sql.SQLException; public class JDBCTest { public static void main(String[] args) throws SQLException { //1. 加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); //2. 建立数据库连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","password"); //3. 创建Statement对象 Statement stmt = conn.createStatement(); //4. 执行查询语句 ResultSet rs = stmt.executeQuery("select * from test_table"); //5. 处理结果集 while(rs.next()){ System.out.println(rs.getString("name")); } //6. 关闭连接 rs.close(); stmt.close(); conn.close(); } }
二、JDBC连接数据库步骤及常用API
与大部分的Java API一样,JDBC也包含了一些常用类和接口。这些类和接口通常被用来连接数据库、发送SQL命令以及获取结果集等操作,下面是JDBC的步骤及常用API。
1. 加载数据库驱动
在使用JDBC连接数据库之前,需要先加载数据库的驱动程序,驱动程序提供了一个标准接口来连接不同的数据库。在加载驱动时,需要使用Class.forName()
方法,表示当前的JVM会加载并注册驱动程序。
//加载驱动程序 Class.forName("com.mysql.jdbc.Driver");
2. 建立数据库连接
在驱动程序注册之后,需要使用DriverManager.getConnection()
方法来建立数据库连接,该方法会返回一个连接对象 Connection。
//建立连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","password");
3. 创建Statement对象
在建立了数据库连接之后,需要使用Statement对象来发送SQL语句并执行查询操作。Statement对象通常由数据库连接对象创建。
//创建Statement对象 Statement stmt = conn.createStatement();
4. 执行SQL语句
创建Statement对象之后,可以使用executeQuery()
、executeUpdate()
和execute()
方法来执行SQL语句,并获取查询结果。
其中,executeQuery()
方法用于执行查询语句,返回一个ResultSet结果集对象;executeUpdate()
方法用于执行数据库更新操作,如INSERT、UPDATE或DELETE,返回更新的行数;execute()
方法可以执行任意SQL语句,但不返回查询结果。
//执行查询语句 ResultSet rs = stmt.executeQuery("select * from test_table"); //执行更新操作 int count = stmt.executeUpdate("update test_table set name = 'test' where id = 1");
5. 处理结果集
在执行了SQL查询语句并获取到了结果集之后,需要使用ResultSet对象来遍历并处理查询结果。
ResultSet对象的常用方法有:
next()
:返回一个Boolean类型值,表示是否存在更多的结果行。getString()
:返回一个字符串类型的值,表示当前行指定列的值。getInt()
:返回一个整数类型的值,表示当前行指定列的值。- 其他类型的获取方法,如getBoolean()、getDouble()等。
//遍历结果集 while(rs.next()){ System.out.println(rs.getString("name")); }
6. 关闭连接及释放资源
在使用完数据库连接、Statement对象、ResultSet对象之后,需要及时地将其关闭并释放资源。
//关闭资源 rs.close(); stmt.close(); conn.close();
三、JDBC事务管理
在JDBC中,事务是一个数据库操作序列,它可以被视为单个工作单元。在JDBC中,事务是由Connection对象的beginTransation()、commit()和rollback()方法支持的。
在JDBC事务中,一般采用“四大特性”(ACID)来描述事务的属性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
下面是一个简单的JDBC事务管理程序示例:
import java.sql.*; public class JDBCTransactionTest { public static void main(String[] args) throws SQLException, ClassNotFoundException { //1. 加载驱动程序 Class.forName("com.mysql.jdbc.Driver"); //2. 建立连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","password"); //3. 开始事务 try{ conn.setAutoCommit(false); //将自动提交设置为 false Statement stmt = conn.createStatement(); //执行操作 stmt.executeUpdate("update account set balance = balance - 500 where name = 'A'"); stmt.executeUpdate("update account set balance = balance + 500 where name = 'B'"); //手动提交事务 conn.commit(); stmt.close(); }catch(SQLException e){ //回滚事务 conn.rollback(); }finally{ conn.close(); } } }
四、JDBC连接池
JDBC连接池(Connection Pool),是指在应用程序启动时,预先创建一定数量的数据库连接并放入一个连接池中,当应用程序需要连接数据库时,直接从连接池中取出连接,使用完毕后再将连接放回连接池中。这样可以降低每次连接数据库的时间成本,提高应用程序的性能。
JDBC连接池最为常见的实现方式是使用Apache Commons DBCP(DataBase Connection Pool)组件,该组件可以将连接池集成到Tomcat、WebLogic、Jboss等Web容器中。
//创建BasicDataSource对象,设置数据库连接相关参数 BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/test"); dataSource.setUsername("root"); dataSource.setPassword("password"); //使用连接池获取数据库连接 Connection conn = dataSource.getConnection(); //释放连接到连接池 conn.close();
五、总结
JDBC是一种Java访问数据库的标准API,可以通过JDBC连接不同类型的数据库,并通过SQL语句操作数据库。在JDBC中,常用的API包括驱动程序加载、建立数据库连接、创建Statement对象、执行SQL语句并处理结果集等操作,同时,JDBC还支持事务管理和连接池技术等。使用JDBC可以更方便地实现与数据库的交互。