数据库访问通用类(通常称为DAO,即Data Access Object)是一种设计模式,用于将低级数据访问逻辑或操作从高级业务服务中分离出来。这种分离有助于实现更好的代码重用、简化维护和提高系统的可扩展性。
原因:如果数据库连接没有正确关闭,可能会导致连接泄漏,最终耗尽数据库连接池。
解决方案:
示例代码(基于JDBC):
public class UserDAO {
private Connection getConnection() throws SQLException {
// 获取数据库连接
}
public User getUserById(int id) {
String sql = "SELECT * FROM users WHERE id = ?";
try (Connection conn = getConnection();
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setInt(1, id);
try (ResultSet rs = ps.executeQuery()) {
if (rs.next()) {
return new User(rs.getInt("id"), rs.getString("name"));
}
}
} catch (SQLException e) {
// 处理异常
}
return null;
}
}
原因:直接拼接用户输入到SQL查询中可能导致SQL注入攻击。
解决方案:
示例代码(防止SQL注入):
public void addUser(User user) {
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
try (Connection conn = getConnection();
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setString(1, user.getName());
ps.setString(2, user.getEmail());
ps.executeUpdate();
} catch (SQLException e) {
// 处理异常
}
}
领取专属 10元无门槛券
手把手带您无忧上云