2017-12-03 1 views
1

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에서 작동하지 않습니까?

답변

1

HSQLDB 버전이 2.4.0 이하인 경우 MERGE 문을 사용하여 데이터를 삽입 할 때 생성 된 키를 사용할 수 없습니다. 코드는 다음 버전에서이를 허용하기 위해 노력했습니다.

관련 문제