gpt4 book ai didi

java - 以 java OOP 风格处理 SQL 数据库连接的正确方法

转载 作者:行者123 更新时间:2023-11-29 01:20:19 25 4
gpt4 key购买 nike

我最近参加了一项编程挑战。公开用于管理虚构电影租赁公司的 API 是一项 OOP 挑战。我选择使用 sparkjava,并使用 heroku 模板进行工作。 I have posted the code to Github here ,并邀请任何人查询 README 文档中提供的 URL。 secret 密码是secret

我收到了很多关于需要改进的方面的良好反馈。一种反对意见是:

Handling connections directly vi the driver, without any handling for closing connections properly.

所以我想弄清楚这意味着什么,为什么会出现问题,以及如何解决它并改进我的代码。

例如我有这个方法,in the main class :

public static int validate_customer(String cust) throws SQLException, URISyntaxException {
int customer = 0;
try{
customer = Integer.parseInt(cust);
}catch (Exception e){
throw new SQLException("Invalid customer integer -> " + cust);
}

Connection connection = DatabaseUrl.extract().getConnection();
PreparedStatement stmt = connection.prepareStatement("SELECT count(*) from customers where id = ?;");
stmt.setInt(1, customer);
ResultSet rs = stmt.executeQuery();
rs.next();
if ( rs.getInt(1) < 1 ){
throw new SQLException("Invalid customer id -> " + customer);
}
rs.close();
stmt.close();
return customer;
}

为什么这是处理与数据库交互的不正确方式?主类中还有其他与数据库交互的方法,但技术与本例基本相同。

对我来说,如果与数据库的连接出现问题,它会出现在以下行中:Connection connection = DatabaseUrl.extract().getConnection(); 并抛出一个 SQLException。如果连接出现问题,并且查询的某些部分不起作用,则此 validate_customer 方法将抛出异常。为什么这是我的代码中的问题?

最佳答案

Handling connections directly vi the driver

这意味着您没有使用数据库连接池(如 HikariCP ),这意味着您的连接限制可能会很快耗尽。 Heroku 示例没有使用 DB 连接池来限制示例中的依赖关系。

without any handling for closing connections properly.

这意味着 stmt.close(); 不在 finally block 中,这意味着如果在方法中抛出异常,stmt 永远不会关闭。

关于java - 以 java OOP 风格处理 SQL 数据库连接的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38205945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com