从基础到实战:Java与数据库交互全攻略
在软件开发中,Java与数据库的交互是核心技能之一。本文将从SQL基础、JDBC使用、数据库设计原则到SQL高级查询与JOIN操作,全面梳理相关知识点,并结合实战代码示例,帮助读者快速掌握这一技能。
一、SQL基础
1.1 DDL(数据定义语言)
- 创建表:
CREATE TABLE语句用于定义表的结构。 - 删除表:
DROP TABLE语句用于删除表。 - 修改表:
ALTER TABLE语句用于修改表结构,如添加字段。
1.2 基本SQL操作
- 插入数据:
INSERT INTO语句用于向表中插入数据。 - 删除数据:
DELETE FROM语句用于删除表中的数据。 - 更新数据:
UPDATE语句用于更新表中的数据。 - 查询数据:
SELECT语句用于从表中查询数据。
1.3 用户表示例
CREATE TABLE user (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
password VARCHAR(100),
tel VARCHAR(20),
avatar VARCHAR(100),
created_at TIMESTAMP,
updated_at TIMESTAMP
);
1.4 数据库命名规范
- 关键词不区分大小写:如
SELECT、FROM等。 - 命名风格:推荐使用下划线分隔(snake_case),如
user_table。 - 字符串用单引号:如
'value'。 - 注释用
--:如-- This is a comment。
二、JDBC基础
2.1 JDBC概述
Java Database Connectivity(JDBC)是Java与数据库交互的标准接口。通过JDBC,Java程序可以连接数据库、执行SQL语句并处理结果。
2.2 连接数据库
- 连接字符串:
jdbc:mysql://localhost:3306/database_name。 - 用户名和密码:用于验证数据库连接。
2.3 Statement与PreparedStatement
- Statement:用于执行SQL语句。
- PreparedStatement:用于执行预编译的SQL语句,可防止SQL注入。
2.4 ResultSet
ResultSet用于存储查询结果,可以通过迭代器访问每一行数据。
三、数据库设计原则
3.1 表设计
- 每个实体一张表:如用户表、商品表。
- 每个实体都有主键:如
id字段。 - 按需建立索引:提高查询效率。
3.2 关系表设计
- 外键关联:通过外键将不同表关联起来,保持数据一致性。
- 逻辑删除:通过状态字段标记数据是否有效,避免物理删除。
四、SQL高级查询与JOIN操作
4.1 查询优化
- 分页查询:使用
LIMIT和OFFSET实现分页。 - 排序:使用
ORDER BY对结果进行排序。 - 聚合函数:如
COUNT、SUM、MAX等。
4.2 JOIN操作
- INNER JOIN:返回两个表中匹配的记录。
- LEFT JOIN:返回左表的所有记录,即使右表中没有匹配的记录。
4.3 多表查询示例
SELECT o.id, u.name AS user_name, g.NAME AS goods_name, o.GOODS_NUM * o.GOODS_PRICE AS total_price
FROM "ORDER" o
JOIN GOODS g ON o.GOODS_ID = g.id
JOIN USER u ON o.USER_ID = u.id;
五、Java与数据库交互实战
5.1 防止SQL注入
使用PreparedStatement代替Statement,避免SQL注入攻击。
5.2 资源管理
使用try-with-resources确保数据库连接和语句对象在使用后正确关闭。
5.3 实战代码示例
查询用户订单
public static List<Order> getOrders(Connection connection) throws SQLException {
String sql = "SELECT o.id, u.name AS user_name, g.NAME AS goods_name, o.GOODS_NUM * o.GOODS_PRICE AS total_price " +
"FROM \"ORDER\" o JOIN GOODS g ON o.GOODS_ID = g.id JOIN USER u ON o.USER_ID = u.id";
try (PreparedStatement statement = connection.prepareStatement(sql)) {
ResultSet resultSet = statement.executeQuery();
List<Order> orders = new ArrayList<>();
while (resultSet.next()) {
Order order = new Order();
order.id = resultSet.getInt("id");
order.userName = resultSet.getString("user_name");
order.goodsName = resultSet.getString("goods_name");
order.totalPrice = resultSet.getBigDecimal("total_price");
orders.add(order);
}
return orders;
}
}
六、总结
本文从SQL基础、JDBC使用、数据库设计原则到SQL高级查询与JOIN操作,全面介绍了Java与数据库交互的核心知识点,并结合实战代码示例加深理解。掌握这些知识,可以帮助开发者高效地进行数据库操作,提升程序的健壮性和可维护性。在实际开发中,合理设计数据库表结构、使用PreparedStatement防止SQL注入,并通过try-with-resources管理资源,是确保程序稳定运行的重要保障。