我的程序总是在插入数据库表时停止而不会崩溃。这是我的代码
创建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程序之后没有做任何事情,只是永远建立。有什么想法可能会被破坏吗?感谢
答案 0 :(得分:2)
方法createTables()
创建数据库的连接(和事务)。
挂起的代码会创建第二个连接(和事务)。第二个事务被阻塞,直到第一个事务被提交,因为它们都锁定在同一个表上。
在con.commit();
结束时拨打createTables()
可以解决问题。