gpt4 book ai didi

java - 编写多个 SQL 查询的最佳实践

转载 作者:行者123 更新时间:2023-11-29 23:51:35 27 4
gpt4 key购买 nike

我有 2 个表,它们将同时更新。

举个例子,一个员工表和一个部门表具有多对多关系,因此当新员工添加到表中时,他的部门将被插入到第三个表中。现在,我首先将部分员工详细信息插入到员工表中,然后获取该员工 ID,然后将其与他的部门详细信息结合起来,然后将它们插入到员工部门表中。

为此,我目前使用 3 个独立的 SQL 查询。如果最后一个查询(employee-department)中发生错误或者无法获取最后插入的员工,我需要回滚第一个插入(employee)。我可以使用当前的查询(失败时删除作为另一个查询)来实现这一点吗?或者如果我使用存储过程来完成整个事情,它会更干净。

提前致谢:)

最佳答案

您是否直接从 JSP 使用 JDBC?我希望不是……无论如何,Spring JDBC 有一些 JDBC 的好 helper 。您需要使用 JdbcTemplate 和 DataSourceTransactionManager。

这是一个简单的示例(不要指望它能够编译,只是为了让您继续......)

DataSource dataSource = getDataSourceFromSomewhere();
DataSourceTransactionManager tm = new DataSourceTransactionManager(dataSource);
JdbcTemplate jdbc = new JdbcTemplate(dataSource);
TransactionStatus tx = tm.getTransaction(new DefaultTransactionDefinition());

int update1 = jdbc.update("insert into employee...");
int employeeId = jdbc.queryForInt(select id from employee...");
int update2 = jdbc.update("insert into employee_department...");

if (employeeId > 0 && update2 > 0)
tm.commit(tx);
else
tm.rollback(tx);

如果您不想使用 Spring(或不能),普通的老式 JDBC 也可以做同样的事情:

Connection conn = getConnectionFromSomewhere()
... do a bunch of work ...
if (work was successful)
conn.commit();
else
conn.rollback();

我认为使用 Spring JDBC 库比使用常规的旧 JDBC 容易得多。

关于java - 编写多个 SQL 查询的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25616249/

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