簡體   English   中英

使用prepareStatement在java中插入數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM