2011-04-19 2 views
0

OOP와 RDBMS가 잘 작동하도록하는 간단한 기술을 찾고 있습니다.안드로이드/SQLite를위한 객체 - 관계형 매핑의 간단한 대안

가능한 한 간단하게 유지하고 싶으므로 ormlite과 같은 자동 코드 생성 또는 ORM 패키지는 아니지만 fetchOne (int db_row_id) 및 fetchAll()과 같은 메소드를 사용하여 각 DB 테이블 당 하나의 POJO 만 가져올 수 있습니다. 커서를 반환합니다.

내가 계속 실행하는 문제는 테이블을 나타내는 POJO가 다른 테이블에 대한 많은 지식을 가지고 있기 때문에 조인에 두 개 이상의 테이블을 쿼리하는 메소드를 어디에 둘 것인지입니다.

내가 생각할 수있는 유일한 대안은 약 50-100 개의 메서드가있는 ORM을 처리하는 클래스를 하나씩 갖고, 각각 하나 또는 여러 테이블에서 자체 쿼리를 수행하고 일반 Cursor를 반환하는 것입니다.

유크 !!

+0

이 질문은 http://programmers.stackexchange.com/에서보다 적절하게 질문 될 것입니다. SO는 일반적으로 특정 코드와 관련된 특정 문제를 논의하기위한 것입니다. –

답변

2

나는 그 일을하는 방식에 대해별로 좋아하지 않지만 각 테이블을 나타내는 클래스를 만든 다음 모든 액세스 (CRUD 작업)에 대해 "공급자"클래스를 만듭니다.

예를 들어, GameState 클래스와 PlayerInfo 클래스를 둘 다 가지고 있다고 가정 해 봅시다. GameState는 List<PlayerInfo> 일 수 있습니다. 내 GameStateProvider에 조인을 수행하고 내 List<PlayerInfo>을 채우거나 PlayerInfoProvider를 채우고 내 GameStateProvider의 get 메서드에 참조를 전달할 수 있습니다. 일반적으로 후자를 수행합니다. 내 DB 개체를 나타내는 내 POJO에는 일반적으로 커서를 사용하는 생성자가 있습니다.

저는이 솔루션을 좋아하지 않지만 모든 클래스를 최소한의 방법으로 유지하고 읽기 쉽도록 유지하고 서로 밀착되지 않도록합니다.

2

나는이 간단한 작업이 아니다, 가능

문제는만큼 간단하게하고 싶습니다. 그것이 사람들이 ORM 라이브러리를 사용하는 이유이며, 그 라이브러리가 왜 그렇게 큰지입니다.

아마도 대하여 fetchone (INT의 db_row_id) 및 fetchAll (같은 방법으로 단지 POJO를, 각 DB 테이블 하나)

이 함께 어디로 가는지 내가 볼 수 있습니다. 거기 가지 마! 당신은 스파게티 코드의 마일로 끝날거야. 나는 그것을 보았다. 그리고 그것은 귀엽지 않다. ORM 라이브러리를 사용하거나 관계형 데이터베이스를 사용하지 않는 데이터를 저장하는 방법을 찾아야합니다.

+0

감사합니다. [이 게시물] (http://groups.google.com/group/ormlite-user/browse_thread/thread/49b4681c8a2fe692)에서 논의 된 것처럼 문제가 여전히 이상적이지는 않습니다. 안드로이드 커서의 가능한 한 멀리. – Jodes

+0

나는 안드로이드가 아닌 자바에 대한 많은 경험을 가지고있다. 최대 절전 모드 나 OpenJPA가 실행 가능한 솔루션일까요? 아니면 휴대 기기에서 실행하기에는 너무 무겁습니까? –

+1

android가 Dalvik을 실행하고 Java Bytecode를 실행하지 않기 때문에, 바이트 코드 생성에 의존하는 라이브러리가 작동하지 않습니다.이것은 최대 절전 모드 등을 제거합니다. –

2

db4o로 개체 데이터베이스를 사용하는 것이 대안 일 수 있습니다. 매핑이 필요하지 않으므로 코드가 가장 간단합니다. 물론 SQLite를 전혀 사용하지 않을 것입니다.

관련 문제