2011-08-16 4 views
6

현재 ORMLite를 사용하여 Android에서 SQLite 데이터베이스로 작업하고 있습니다. 이 일환으로 나는 백엔드 서버에서 많은 데이터를 다운로드 중이고이 데이터를 백엔드 서버에있는 것과 동일한 형식으로 SQLite 데이터베이스에 추가하고 싶습니다 (즉 ID는 동일합니다) .Android/ORMLite ID가있는 행 삽입

그럼, 내 질문은 setId()를 통해 장비의 generatedId/primary 키 필드를 포함하여 데이터베이스 항목 개체 (장비라고 부름)를 채우고 DAO.create()를 실행하는 것입니다. 해당 장비 항목은 해당 ID가 올바르게 저장됩니까? 나는이 방법을 시도했고, 이것이 사실이 아니라고 생각한다. 그렇다면 다시 시도하고 다른 문제를 찾아 보겠습니다. 그러나 처음 몇 번 통과하면 코드를 찾을 수 없습니다. 그래서 본질적으로 ID 세트를 가진 데이터베이스 객체에서 DAO.create()를 호출하면 해당 ID가 데이터베이스로 전송되고 그렇지 않은 경우 기본 키 값이 이미 채워진 행을 어떻게 삽입 할 수 있습니까?

감사합니다. http://ormlite.com/docs/generated-id에서

답변

13

@Femi 개체가 하나 생성-ID를 또는 아이디 있지만 하지 둘 수 있다는 맞습니다. 이 문제는 ORMLite가 객체를 저장하는 방법 이상이지만 데이터베이스가 생성 된 스키마와 일치해야합니다.

ORMLite은이 동작을 허용하는 @DatabaseField에 대한 allowGeneratedIdInsert=true 옵션을 지원합니다. 일부 데이터베이스 유형 (예 : Derby)에서는 지원되지 않지만 Android/SQLite에서는 작동합니다.

후손을 위해 동일한 테이블을 공유하는 두 개의 개체를 생성 할 수 있습니다. 하나는 생성 된 ID가 있고 다른 하나는 생성되지 않은 개체입니다. 그런 다음 생성 된 ID Dao를 사용하여 해당 동작을 가져오고 다른 Dao는 호출자가 설정 한 id 값을 사용하여 삽입 할 수 있습니다. 여기에 another answer talking about that이 있습니다. 이 문제는 많은 추가 DAO를 생성하는 것처럼 들립니다.

유일한 해결책은 이 아니며은 용도로 사용합니다. 데이터베이스에서 ID를 생성 한 다음 용도에 맞게 외부에서 설정 한 필드를 추가하십시오. 특정 상황에서 데이터베이스 ID를 강제하는 것은 나에게 나쁜 패턴 인 것 같습니다.

4

: 필드가 자동으로 생성 된 id 필드는

부울 여부. 기본값은 false입니다. 하나의 필드 만 클래스에서이 집합을 가질 수 있습니다. 이것은 삽입 된 모든 행에 대해 해당 ID를 자동으로 생성하도록 데이터베이스에 지시합니다. generated-id를 가진 객체가 Dao.create() 메소드를 사용하여 생성 될 때, 데이터베이스는 create 메소드에 의해 반환되고 객체에 설정 될 행에 대한 id를 생성합니다. 일부 데이터베이스는 생성 된 ID의 순서를 필요로하며이 경우 시퀀스 이름은 자동 생성됩니다. 시퀀스의 이름을 지정하려면 generatedIdSequence를 사용하십시오. this, id 및 generatedIdSequence 중 하나만 지정할 수 있습니다. 당신은 사용해야합니다

중 하나 generatedId는 (이 경우는 모든 ID가 생성되어야 표시) 또는 둘 모두 id (이 경우 당신이 그들을 설정할 수 있습니다)하지만.

+0

나는 이것을 읽었지만 다른 데이터베이스에서는 자동 생성 된 기본 키가 있어도 ID로 INSERT 할 수 있기 때문에 자신 만의 ID를 입력 할 수 있다고 생각했습니다. 이것은 ORMLite 또는 SQLite 데이터베이스의 설정과 관련이 있습니까? –

+0

ORMLite에만 해당됩니다. http://ormlite.svn.sourceforge.net/viewvc/ormlite/ormlite-core/trunk/src/main/java/com/j256/ormlite/stmt/mapped/MappedCreate.java를 참조하십시오. revision = 1861 & view = 마크 업 32 행.값이 이미 설정되어 있는지 확인하지 않고 generatedId 또는 generatedIdSequence 설정의 id를 자동으로 지정한다는 것을 알 수 있습니다. SQLite를 사용하고 있다면 수동으로 데이터베이스에 직접 작성한 다음 ORMLite로 다시로드하거나 ORMLite를 사용하지 않아도 서버 데이터베이스 ID에 대한 별도의 열을 추가 할 수 있습니다. – Femi