HSQLDB - 시도한 버전 2.3.4 및 2.4를 사용합니다. 그것은 작동행이 삽입되었지만 Getgenerated 키가 작동하지 않습니다.
String sqlquery = "MERGE INTO bewertung pu USING "
.concat("(VALUES ?,?,?) ")
.concat("temp (tid,jurorid,runde) ")
.concat("ON temp.tid = pu.tid and temp.jurorid=pu.jurorid and temp.runde=pu.runde ")
.concat("WHEN NOT MATCHED THEN ")
.concat("INSERT (tid,jurorid,runde) ")
.concat("VALUES (temp.tid,temp.jurorid,temp.runde)");
PreparedStatement preparedStatement = sql.getConnection().prepareStatement(sqlquery,
Statement.RETURN_GENERATED_KEYS);
preparedStatement.setInt(1, eineBewertung.getTanzID()); //TID
preparedStatement.setInt(2, eineBewertung.getJurorID()); //JURORID
preparedStatement.setInt(3, eineBewertung.getRunde()); //RUNDE
int rowsAffected = preparedStatement.executeUpdate();
if (rowsAffected == 0) {
//UPDATE
//DO SOMETHING
}else{
//INSERT
try (ResultSet rs = preparedStatement.getGeneratedKeys()) {
if (rs.next()) {
eineBewertung.setBewertungsid(rs.getInt(1));
}
}catch (SQLException ex) {
this.controller.error_ausgeben(ex);
}
}
:
나는이 자바 코드가 있습니다. 새 행을 삽입하면 rowsAffected
= 1이됩니다. 데이터베이스를 확인하고 삽입이 작동합니다.
그러나 결과 세트에는 아무 것도 나타나지 않습니다. getGeneratedKeys()
항상 비어 있습니다.
Statement.RETURN_GENERATED_KEYS
을 기본 키로 대체하는 몇 가지 팁을 발견했습니다. 그러나 이것은 나를 위해 일하지 않았다.
statement.execute("create table PUBLIC.BEWERTUNG"
.concat("(BEWERTUNGSID INTEGER IDENTITY,")
.concat("TID INTEGER FOREIGN KEY REFERENCES Tanz(Tanzid),")
.concat("JURORID INTEGER not null FOREIGN KEY References JUROR(JURORID),")
.concat("RUNDE INTEGER not null,")
.concat("primary key(BEWERTUNGSID)")
.concat(")"));
왜 내가 어떤 생성 키를 다시하지 않습니다
PreparedStatement preparedStatement = sql.getConnection().prepareStatement(sqlquery,
new String[]{"BEWERTUNGSID"});
이 내가 테이블을 생성하는 방법이다? 고마워요
// EDIT 만약 내가 삽입 문장으로 내 sqlquery를 교체하면.
sqlquery = "INSERT INTO BEWERTUNG(TID, JURORID, RUNDE) VALUES(22, 2, 2)";
왜 merge
이 sqlquery에서 작동하지 않습니까?