2013-01-17 3 views
0

현재 SQL에 꽤 큰 XML 파일을 가져와야하는 Android 앱을 개발 중입니다. 이전에는 XML의 모든 단일 요소에 대해 INSERT를 수행했습니다. 이제 임시 SQL 파일을 만들려고합니다. 가져 오는 것이 훨씬 빠릅니다. 데이터가 동적이기 때문에 다음과 같은 문이 있습니다.Android SQLite complex INSERT가 예상대로 작동하지 않습니다.

INSERT INTO About VALUES ('System Karteikasten', '', '[todo]', '[todo]', '[todo]', '[todo]', 'null'); 
INSERT INTO Collection (Collection_id, About_id, MediaFile_Id, type, isbn, releasedate, publisher, edition, description, priv_sortChilds, priv_createChild, priv_deleteChild, priv_insertChild) VALUES ('system_kalepro_main', (SELECT ROWID FROM About ORDER BY ROWID DESC LIMIT 1), 'null', 'CARDBOX', 'null', '0', 'null', 'null', 'Some Text', 'false', 'false', 'false', 'false'); 

가끔은 1000 개 정도의 그룹입니다. 이미 SQL에서 추측했듯이 Collection에는 About_id가 About의 ROWID를 가리 킵니다. 전체 코드를 테스트했고 모든 것이 리눅스 머신에서 예상대로 작동합니다. 그러나 안드로이드 폰에서는 삽입 정보 만 작동합니다. 또한 올바른 방향으로 나를 가리킬 수있는 오류가 없습니다. 콜렉션 엔트리는 단순히 무시되고 중첩 된 쿼리와 관련이 있다고 생각하지만이를 수정하는 방법을 알 수는 없습니다.

어떤 아이디어 나 제안이 있으십니까?

+0

쿼리를 디버깅하려면 SQLite 용 Navicat http://www.navicat.com/en/products/navicat_sqlite/sqlite_overview.html을 사용해보십시오. – Lemberg

+0

동적 값을 '예 :'로 둘러 봤습니까? ' "+ Collection_id +"'? – Noloxs

+0

@Lemberg Navicat가 Android의 동작을 시뮬레이션 할 수 있습니까? 이미 로컬 시스템에서 디버깅했기 때문에 모든 것이 잘 작동합니다. – Sadragos

답변

0

INSERT가 자동으로 실패하지 않습니다. SQL 명령을 실행하는 코드는 어딘가에서 오류를 무시합니다.

어쨌든 하나 이상의 자식 레코드가없는 한 하위 쿼리를 last_insert_rowid()으로 바꿀 수 있습니다.

또는 (SELECT max(rowid) FROM About)을 시도하십시오.

+0

last_insert_rowid() 힌트를 주셔서 감사합니다 - 오직 지금까지 PHP 함수로 알았습니다. 그러나 last_insert_rowid()도 SQL도 Android에서 작동하지 않습니다. 둘 다 내 로컬 컴퓨터에서 작동합니다. LogCat이나 콘솔에서도 오류가 없습니다. 다음은 쿼리를 실행하는 코드입니다. DatabaseHelper helper = new DatabaseHelper (context); SQLiteDatabase db = helper.getWritableDatabase(); { db.execSQL (s); } catch (SQLiteException e) { System.err.println (e.getMessage()); } db.close() – Sadragos

+0

'last_insert_rowid()'는 동일한 데이터베이스 연결에서만 작동합니다. 모든 명령에 대해 동일한 'db'를 사용해야합니다. –

관련 문제