[英]inserting into database in java with prepareStatement
我的程序總是停止插入數據庫表而不會崩潰。 這是我的代碼
創建DataSource和連接:
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()
創建數據庫的連接(和事務)。 掛起的代碼會創建第二個連接(和事務)。 第二個事務被阻塞,直到第一個事務被提交,因為它們都鎖定在同一個表上。
調用con.commit();
在createTables()
的末尾應該解決問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.