本文目录导读:

在Java中实现数据库查询通常使用 JDBC(Java Database Connectivity) 技术,下面我将通过一个完整的案例,展示如何从数据库中进行查询操作,涵盖从环境准备到代码实现的全过程。
环境准备
1 添加数据库驱动依赖
如果是使用 Maven 项目,在 pom.xml 中添加 MySQL 驱动依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
2 创建数据库和表
在 MySQL 中创建示例数据:
CREATE DATABASE IF NOT EXISTS demo_db;
USE demo_db;
CREATE TABLE IF NOT EXISTS users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
email VARCHAR(100),
age INT
);
-- 插入测试数据
INSERT INTO users (name, email, age) VALUES
('张三', 'zhangsan@example.com', 25),
('李四', 'lisi@example.com', 30),
('王五', 'wangwu@example.com', 28);
基础查询案例
1 查询所有用户
import java.sql.*;
public class DatabaseQueryDemo {
public static void main(String[] args) {
// 数据库连接信息
String url = "jdbc:mysql://localhost:3306/demo_db?useSSL=false&serverTimezone=UTC";
String username = "root";
String password = "123456";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 1. 加载驱动(MySQL 8.x 版本可以省略,DriverManager 会自动加载)
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 建立数据库连接
conn = DriverManager.getConnection(url, username, password);
// 3. 创建 Statement 对象
stmt = conn.createStatement();
// 4. 执行查询
String sql = "SELECT * FROM users";
rs = stmt.executeQuery(sql);
// 5. 处理结果集
System.out.println("=== 所有用户信息 ===");
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String email = rs.getString("email");
int age = rs.getInt("age");
System.out.printf("ID: %d, 姓名: %s, 邮箱: %s, 年龄: %d\n",
id, name, email, age);
}
} catch (ClassNotFoundException e) {
System.out.println("数据库驱动未找到: " + e.getMessage());
} catch (SQLException e) {
System.out.println("数据库操作异常: " + e.getMessage());
} finally {
// 6. 释放资源
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
2 带条件的查询(使用 PreparedStatement)
import java.sql.*;
public class PreparedStatementQueryDemo {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/demo_db?useSSL=false&serverTimezone=UTC";
String username = "root";
String password = "123456";
// 查询年龄大于指定值的用户
int minAge = 26;
String sql = "SELECT * FROM users WHERE age > ?";
try (Connection conn = DriverManager.getConnection(url, username, password);
PreparedStatement pstmt = conn.prepareStatement(sql)) {
// 设置查询参数
pstmt.setInt(1, minAge);
// 执行查询
try (ResultSet rs = pstmt.executeQuery()) {
System.out.println("=== 年龄大于 " + minAge + " 的用户 ===");
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String email = rs.getString("email");
int age = rs.getInt("age");
System.out.printf("ID: %d, 姓名: %s, 邮箱: %s, 年龄: %d\n",
id, name, email, age);
}
}
} catch (SQLException e) {
System.out.println("数据库操作异常: " + e.getMessage());
}
}
}
封装成工具类
为了代码复用,可以将数据库连接和查询操作封装成工具类:
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
// 用户实体类
class User {
private int id;
private String name;
private String email;
private int age;
public User(int id, String name, String email, int age) {
this.id = id;
this.name = name;
this.email = email;
this.age = age;
}
@Override
public String toString() {
return String.format("User{id=%d, name='%s', email='%s', age=%d}",
id, name, email, age);
}
}
// 数据库连接工具类
class DBUtil {
private static final String URL = "jdbc:mysql://localhost:3306/demo_db?useSSL=false&serverTimezone=UTC";
private static final String USERNAME = "root";
private static final String PASSWORD = "123456";
// 获取数据库连接
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USERNAME, PASSWORD);
}
// 释放资源
public static void close(ResultSet rs, Statement stmt, Connection conn) {
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
// 用户数据访问对象
class UserDAO {
// 查询所有用户
public List<User> findAll() {
List<User> users = new ArrayList<>();
String sql = "SELECT * FROM users";
try (Connection conn = DBUtil.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
while (rs.next()) {
User user = new User(
rs.getInt("id"),
rs.getString("name"),
rs.getString("email"),
rs.getInt("age")
);
users.add(user);
}
} catch (SQLException e) {
System.out.println("查询用户失败: " + e.getMessage());
}
return users;
}
// 根据ID查询用户
public User findById(int id) {
String sql = "SELECT * FROM users WHERE id = ?";
User user = null;
try (Connection conn = DBUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setInt(1, id);
try (ResultSet rs = pstmt.executeQuery()) {
if (rs.next()) {
user = new User(
rs.getInt("id"),
rs.getString("name"),
rs.getString("email"),
rs.getInt("age")
);
}
}
} catch (SQLException e) {
System.out.println("查询用户失败: " + e.getMessage());
}
return user;
}
// 根据姓名查询用户(模糊查询)
public List<User> findByName(String name) {
List<User> users = new ArrayList<>();
String sql = "SELECT * FROM users WHERE name LIKE ?";
try (Connection conn = DBUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, "%" + name + "%");
try (ResultSet rs = pstmt.executeQuery()) {
while (rs.next()) {
User user = new User(
rs.getInt("id"),
rs.getString("name"),
rs.getString("email"),
rs.getInt("age")
);
users.add(user);
}
}
} catch (SQLException e) {
System.out.println("查询用户失败: " + e.getMessage());
}
return users;
}
}
// 测试类
public class UserQueryDemo {
public static void main(String[] args) {
UserDAO userDAO = new UserDAO();
// 查询所有用户
System.out.println("=== 所有用户 ===");
List<User> allUsers = userDAO.findAll();
allUsers.forEach(System.out::println);
// 根据ID查询
System.out.println("\n=== 查询ID为2的用户 ===");
User user = userDAO.findById(2);
System.out.println(user);
// 模糊查询
System.out.println("\n=== 查询姓名中包含'张'的用户 ===");
List<User> usersWithName = userDAO.findByName("张");
usersWithName.forEach(System.out::println);
}
}
关键要点
1 使用 PreparedStatement 的好处
- 防止SQL注入:自动转义特殊字符
- 提高性能:预编译SQL语句,多次执行时效率更高
- 代码更清晰:参数使用占位符 代替字符串拼接
2 资源管理最佳实践
// 推荐使用 try-with-resources(JDK 7+)
try (Connection conn = DBUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery()) {
// 处理结果集
} // 自动关闭资源
3 常见问题处理
// 处理空值
String email = rs.getString("email");
if (rs.wasNull()) {
email = "未设置";
}
// 处理日期类型
Date date = rs.getDate("create_time");
if (date != null) {
System.out.println(date);
}
通过以上案例,你可以掌握Java中数据库查询的基本实现方式,实际开发中,建议使用更高级的ORM框架(如MyBatis、Hibernate)来简化数据库操作,但理解JDBC底层原理仍然是必要的。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播