当代码进入“ pstmt.executeUpdate()”步骤时,它冻结并被阻止,我没有收到任何SQL异常
这可行:
SQL = "INSERT INTO Procedure (file_path,id) VALUES ('/test/file_test.pdf',512);";
pstmt = con.prepareStatement(SQL,Statement.RETURN_GENERATED_KEYS);
pstmt.executeUpdate();
这不起作用!而且我没有收到任何例外,并且已被阻止:
SQL = "INSERT INTO Procedure (file_path,id) VALUES (?,?);";
pstmt = con.prepareStatement(SQL,Statement.RETURN_GENERATED_KEYS);
pstmt.setString(1, "/test/file_test.pdf");
pstmt.setInt(2, 512);
pstmt.executeUpdate();
我不明白为什么在使用下一个解决方案时我的代码会被阻止(我的意思是setString
和setInt
)。
答案 0 :(得分:0)
procedure
是SQL中的保留关键字。可能是由于此引起的。
将过程表名称更改为其他名称,然后尝试。
您也可以尝试将“过程”更改为“过程”。
我希望这对您有用。
答案 1 :(得分:0)
使用“尝试/捕获”和调试器将为您提供有关该问题的更多信息。过去我有一个类似的问题,这就是我解决的方法。我不确定是什么问题,但是请尝试一下
public void getCar(String carName) {
String[] key = {"PRIMARY_KEY_COLUMN"};
try(Connection con = super.getConnection()) {
String queryOne = "INSERT INTO Procedure (file_path,id) VALUES (?,?)";;
try(PreparedStatement pstmt = con.prepareStatement(queryOne, key)){
pstmt.setString(1, "/test/file_test.pdf");
pstmt.setInt(2, 512);
pstmt.executeUpdate();
int generatedKey = getGeneratedKey(pstmt));
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
// Do somthing if connection is set but exception thrown
}
} catch (SQLException e) {
e.printStackTrace();
// Do somthing else if connection couldn't be set
}
}
private int getGeneratedKey(PreparedStatement pstmt) throws SQLException {
int generatedKey = 0;
ResultSet rs = pstmt.getGeneratedKeys();
if (rs.next()) {
generatedKey = rs.getInt(1);
}
rs.close();
return generatedKey;
}
答案 2 :(得分:0)
发现并修复了大家好错误
错误的原因:例如,假设我们有2个表B [Id,othercolumn]和A [Id,pathfile,fk_id_B] 我在表B上启动了启动事务(UPDATE记录id = 512) 但是我忘了在我盯着其他人在A上启动事务之前关闭事务(connection.commit(); connection.close()),因此导致冻结,因为记录(id = 512)仍由预览事务使用 解决方案:在A上开始交易之前,我在B上关闭交易
谢谢你们的帮助和参与:)