2011-10-24 2 views
0

안드로이드 응용 프로그램에서 문제가 발생했습니다. 다음 스크립트로 데이터베이스를 만들고 싶습니다. SQLite 및 Android 예외

CREATE TABLE IF NOT EXISTS events (
_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
source_device_id INT, 
timestamp INT NOT NULL, 
processed BOOLEAN DEFAULT FALSE, 
event_type TINYINT NOT NULL, 
payload BLOB); 

CREATE INDEX IF NOT EXISTS events_unprocessed ON events (processed, _id); 

내 안드로이드 코드는

public void onCreate(SQLiteDatabase db) { 
    InputStream schemaStream = context.getResources().openRawResource(R.raw.logdb_schema); 
    Scanner schemaScanner = new Scanner(schemaStream, "UTF-8"); 
    schemaScanner.useDelimiter(";"); 

    Log.i(TAG, "Creating database"); 
    try { 
    db.beginTransaction(); 
    while (schemaScanner.hasNext()) { 
     String statement = schemaScanner.next(); 
     Log.d(TAG, "Creating database: " + statement); 
     db.execSQL(statement); 
    } 
    db.setTransactionSuccessful(); 
    } 
    finally { 
    db.endTransaction(); 
    } 
} 

그것의 작동하지 않는 그 발생 런타임 예외 :

android.database.sqlite.SQLiteException: not an error:

+2

* 런타임 예외는 무엇입니까? 도움이 필요하면 세부 정보가 필요합니다. –

+0

android.database.sqlite.SQLiteException : 오류가 아닙니다 – Altaf

+0

'sqlite3' 명령과 함께 사용하면 작동합니다. 그것이 전체 오류 일 수는 없습니다. 더 많은 것이 있어야합니다. [logcat 출력] (http://developer.android.com/guide/developing/debugging/debugging-log.html#startingLogcat)을 확인하고 여기에 게시하십시오 ... – Knickedi

답변

-1

내 생각 엔 당신이 부울 & TINYINT 형식을 사용하고 있다는 것 지원되지 않습니다. 대신 INTEGER를 사용해야합니다.

+0

sqllite 편집기에서 SQLLITEpro 2009와 같은 확인 쿼리가 있습니다. 자사의 잘 작동 내 안드로이드 응용 프로그램에서 작동하지 않습니다 – Altaf

+0

http://www.sqlite.org/datatype3.html – Joe

+0

명확하게 말합니다 (2.2 절), 그 파서에 의해 지원됩니다. 그들은 단지 각각 NUMERIC 및 INTEGER에 맵핑됩니다. –

1

스키마에서 마지막 세미콜론 다음에 공백이 있기 때문에이 문제가 발생했습니다. 내 자바 코드가 그 공백을 별도의 쿼리로 실행하고 있었다.

Froyo에서는 Ice Cream Sandwich에서 문제가 발생하지 않는다고 불평합니다.

+0

필자는 태블릿의 마지막 세미콜론 다음에 공백과 같은 문제를 보았습니다. Jelly Bean에서 android.database.sqlite.SQLiteException을 throw합니다. 오류가 아니며 Honeycomb에서 완벽하게 작동합니다. –

관련 문제