2011-01-23 2 views
1

데이터베이스에 새 행을 추가하거나 교체하고 행의 자동 생성 ID를 반환하려면 sqlite (Java JDBC를 사용하여 확실하지 않음)를 사용하고 싶습니다. 이걸 효율적으로/깔끔하게하는 방법을 모르겠다.sqlite : lookup-or-replace

테이블 정의> = 3 열이 있습니다

  • 자동 생성 된 정수 ID
  • 고유 키 문자열을

내가 일반적으로 두 가지를 생각할 수

  • 다른 메타 데이터 (의이 key를 호출하자) 접근 방식 :

      일치가 없다면
    1. SELECT ID FROM myTable WHERE key = ?
    2. 는 새 행을 삽입하고 자동 생성 된 ID

    또는

    1. INSERT OR REPLACE INTO myTable (key, metadata) VALUES (?, ?)
    2. SELECT ID FROM myTable WHERE key = ?

    을 얻기 위해 단계 # 1을 반복 어떻게해야합니까? 두 접근법 중 어느 것이 원자 트랜잭션인지 확실하지 않습니다. 그것은 또한 새로운 하나를 사용하여 ID를 대체하는 것을 제외하고 난 그냥, 삽입을 시도하거나 접근을 장착하고 "작품"편집


    (물론, 첫 번째 2에 대한 확실하지 아닙니다) 그것은 내가 원하는 것을 원하지 않습니다. 기존 ID를 유지하고 싶습니다.

  • +0

    OMG - Java는 완벽하게 유효한 태그입니다. Java 프레임 워크 고유의 솔루션 (예 : 최대 절전 모드)이있을 수 있습니다. – RichardTheKiwi

    +0

    @cyberkiwi : 질문은 원격으로 java-entire SQL과 관련이 없습니다. 질문을 읽기 쉽도록 편집 내용을 롤백하는 사실을 변경하지 않습니다. 질문을 편집 할 수있는 권한이 있습니다. 책임감있게 사용하고 성장할 수 있습니다. –

    +0

    @OMG - 질문에 따르면, Java JDBC를 사용하여 데이터베이스에 새 행을 다시 작성하고 행의 자동 생성 ID를 반환합니다. 이를위한 Java 프레임 워크 솔루션이 있습니다. ''자바와 관련이 없다 '는 부분은 어디에서 얻습니까?틈새와 "또는"을 구별 할 수 없다면 읽을 수있는 것이 아니라 – RichardTheKiwi

    답변

    2

    당신이 삽입을 위해 생성 된 키를 반환 할 수 있지만 그것을 업데이트를 작동하는 경우

    SELECT last_insert_rowid() 
    

    확실하지 마지막에 삽입 자동 ID를 취득하기위한 SQLite는 기능이 있습니다 삽입 후에 키를 가져 오는 select 문을 실행할 필요가 없습니다.

    이 작업을 수행하려면
    • 당신이 문을 준비

      는 당신이 생성 된 키를 반환하도록 지정할 수있는 방법을 사용합니다.
    • 업데이트 개체를 실행할 때 getGeneratedKeys()를 호출하십시오.
    +0

    예를 들려 줄 수 있습니까? 나는 PreparedStatement를보고 executeUpdate()가 생성 된 키가 아닌 행 수인 int를 반환한다고 말합니다. 또한 그것이 업데이 트가 아니라 삽입 (나는 두 경우를 다뤄야 만) 할 경우 어떻게 해야할지 모르겠다. –

    +0

    문을 준비 할 때 생성 된 키를 반환하도록 지정하는 메서드를 사용합니다. 명령문 오브젝트에서 갱신 호출 "getGeneratedKeys()"를 실행 한 후. – jzd

    +0

    아! 나는 그 방법을 보지 못했다. 고마워, 나는 그것을 시도 할 것이다. –