gpt4 book ai didi

java - 在java中使用prepareStatement插入数据库

转载 作者:行者123 更新时间:2023-12-02 07:10:02 25 4
gpt4 key购买 nike

我的程序总是在插入数据库表时停止而不会崩溃。这是我的代码

创建数据源和连接:

public void setUp() throws Exception {
manager = new IngredientManager();
BasicDataSource ds = new BasicDataSource();
ds.setUrl("jdbc:derby:memory:ingredient;create=true");
manager.setDataSource(ds);
manager.createTables();
}

方法createTables():

public void createTables() throws ServiceFailureException, SQLException {
Connection con = dataSource.getConnection();
con.setAutoCommit(false);
String createTableSQL = "CREATE TABLE INGREDIENTS("
+ "ID BIGINT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY, "
+ "NAME VARCHAR(255), "
+ "AMOUNT DOUBLE, "
+ "UNIT VARCHAR(255), "
+ "RECIPEID INTEGER NOT NULL "
+ ")";

PreparedStatement query = con.prepareStatement(createTableSQL);
query.executeUpdate();
}

一切正常,但是当程序出现这样的情况时:

Connection connection = dataSource.getConnection();
connection.setAutoCommit(false);
query = connection.prepareStatement("INSERT INTO INGREDIENTS (NAME, AMOUNT, UNIT, RECIPEID) VALUES(?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS);

在connection.prepareStatement程序之后不做任何其他事情,只是永远构建。任何想法为什么这可能会被破坏?谢谢

最佳答案

方法createTables() 创建到数据库的连接(和事务)。挂起的代码创建第二个连接(和事务)。第二个事务将被阻塞,直到第一个事务提交为止,因为它们都锁定在同一个表上。

createTables() 末尾调用 con.commit(); 应该可以解决问题。

关于java - 在java中使用prepareStatement插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15638853/

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