-
概念与功能定位
- JDBC (Java Database Connectivity)
- JDBC 是 Java 语言用于连接数据库(如 MySQL、Oracle 等关系型数据库)的标准 API。它提供了一套统一的接口,让 Java 程序能够与各种数据库进行交互,执行 SQL 语句(如查询、插入、更新、删除等操作)来操作关系型数据。
- 例如,使用 JDBC 可以连接到 MySQL 数据库,执行
SELECT * FROM users
这样的查询语句,获取用户表中的数据,或者执行INSERT INTO users (name, age) VALUES ('John', 25)
这样的插入语句来添加新用户数据。
- Jedis
- Jedis 是 Redis 数据库的 Java 客户端。Redis 是一个基于内存的键值对存储系统,支持多种数据结构(如字符串、哈希、列表、集合、有序集合等)。Jedis 允许 Java 程序方便地与 Redis 进行交互,执行 Redis 特有的操作指令。
- 例如,可以使用 Jedis 在 Redis 中设置键值对
jedis.set("key", "value")
,或者从 Redis 中获取某个键的值jedis.get("key")
,还可以操作其他 Redis 数据结构,如向列表中添加元素jedis.lpush("mylist", "element1", "element2")
。
-
连接建立方式
- JDBC
- 连接建立相对复杂,需要加载数据库驱动(不同的数据库有不同的驱动,如 MySQL 的驱动),然后通过
DriverManager
获取数据库连接。例如,连接 MySQL 数据库的基本代码如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JdbcExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydb";
String username = "root";
String password = "password";
try {
Connection connection = DriverManager.getConnection(url, username, password);
// 连接建立成功后可以进行后续操作
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
- Jedis
- 连接建立较为简单,只需要指定 Redis 服务器的地址和端口(默认 6379)即可创建 Jedis 实例连接到 Redis。例如:
import redis.clients.jedis.Jedis;
public class JedisExample {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost", 6379);
// 连接建立成功后可以进行后续操作
jedis.close();
}
}
-
数据操作方式
- JDBC
- 操作数据主要通过 SQL 语句。需要创建
Statement
或PreparedStatement
对象来执行 SQL 操作。例如,查询用户表中年龄大于 20 岁的用户:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JdbcQueryExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydb";
String username = "root";
String password = "password";
try {
Connection connection = DriverManager.getConnection(url, username, password);
String sql = "SELECT * FROM users WHERE age >?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, 20);
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
// 处理查询结果
}
statement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
- Jedis
- 操作基于 Redis 特有的命令和数据结构。例如,对 Redis 中的哈希数据结构进行操作:
import redis.clients.jedis.Jedis;
public class JedisHashExample {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost", 6379);
jedis.hset("user:1", "name", "John");
jedis.hset("user:1", "age", "25");
String name = jedis.hget("user:1", "name");
System.out.println("Name: " + name);
jedis.close();
}
}
-
事务处理
- JDBC
- 有完善的事务处理机制,支持 ACID(原子性、一致性、隔离性、持久性)特性。通过
Connection
对象的setAutoCommit(false)
等方法来控制事务的开始、提交和回滚。例如:
try {
connection.setAutoCommit(false);
// 执行多个SQL操作
statement1.executeUpdate();
statement2.executeUpdate();
connection.commit();
} catch (SQLException e) {
try {
connection.rollback();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
- Jedis
- Redis 通过
MULTI
、EXEC
等命令来实现事务操作。在 Jedis 中,可以使用jedis.multi()
开始事务,然后将多个操作添加到事务队列中,最后使用jedis.exec()
执行事务。不过,Redis 事务与传统关系型数据库事务有所不同,它主要是一种命令的批量执行机制,并且不提供像关系型数据库事务那样严格的隔离性保证。例如:
jedis.multi();
jedis.set("key1", "value1");
jedis.set("key2", "value2");
List<Object> results = jedis.exec();
-
适用场景
- JDBC
- 适用于操作关系型数据库,处理复杂的关系型数据查询、存储大量结构化数据、需要严格的事务处理以及数据完整性要求较高的场景,如企业级的业务系统(如 ERP、CRM 等)中的数据管理。
- Jedis
- 适用于需要快速读写数据、使用 Redis 特有的数据结构(如缓存、计数器、排行榜等场景)、处理实时性要求较高的数据(如在线游戏中的实时数据统计)以及对数据持久化要求相对不那么严格(虽然 Redis 有持久化机制但主要还是基于内存操作)的场景。