2014-02-09 5 views
0

데이터베이스에 정보를 삽입 할 수 있지만 삽입 후 개발자가 '앤드 로이드'와 같은 정보를 읽으려는 경우 "안타깝게도 앱이 중지되었습니다."라는 오류가 발생합니다.
이 내 코드입니다 :내 데이터베이스를 읽을 수없는 이유는 무엇입니까?

FeedReaderDbHelper mDbHelper = new FeedReaderDbHelper(getApplicationContext()); 
SQLiteDatabase db = mDbHelper.getWritableDatabase(); 
ContentValues values = new ContentValues(); //for insert 
Date now=new Date(); //for insert 
values.put("ID", 1); //for insert 
values.put("kalame", "good"); //for insert 
values.put("mani", "salam"); //for insert 
values.put("marhale", "1"); //for insert 
values.put("taghir", String.valueOf(now.getTime())); //for insert 

long newRowID=db.insert("english", "taghir" , values); //for insert 

String[] meghdarha={"good"}; 
String[] sotoonha={"ID","kalame","mani","marhale","taghir"}; 
Cursor nowRead =db.query("english", sotoonha, "kalame = good", null, null, null, null); 

nowRead.moveToFirst(); 
long newWord=nowRead.getLong(nowRead.getColumnIndexOrThrow("ID")); 
TextView tv= (TextView)findViewById(R.id.textView1); 
tv.setText(String.valueOf(newWord)); 

이 내 FeedReaderDbHelper입니다 :

public class FeedReaderDbHelper extends SQLiteOpenHelper { 

    // If you change the database schema, you must increment the database version. 
    public static final int DATABASE_VERSION = 1; 
    public static final String DATABASE_NAME = "FeedReader.db"; 
    public static final String sakht="CREATE TABLE english (ID INTEGER PRIMARY KEY,kalame TEXT,mani TEXT,marhale TEXT,taghir TEXT);"; 
    public static final String pak="DROP TABLE IF EXISTS english"; 

    public FeedReaderDbHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(sakht); 
    } 

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // This database is only a cache for online data, so its upgrade policy is 
     // to simply to discard the data and start over 
     db.execSQL(pak); 
     onCreate(db); 
    } 

    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     onUpgrade(db, oldVersion, newVersion); 
    }  
} 

이 내 로그 고양이 :

02-09 18:58:22.762: D/gralloc_goldfish(581): Emulator without GPU emulation detected. 
02-09 18:59:51.202: E/SQLiteDatabase(581): Error inserting ID=1 mani=salam taghir=1391959791144 marhale=1 kalame=good 
02-09 18:59:51.202: E/SQLiteDatabase(581): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed 
02-09 18:59:51.202: E/SQLiteDatabase(581): at android.database.sqlite.SQLiteStatement.native_executeInsert(Native Method) 
02-09 18:59:51.202: E/SQLiteDatabase(581): at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:113) 
02-09 18:59:51.202: E/SQLiteDatabase(581): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1718) 
02-09 18:59:51.202: E/SQLiteDatabase(581): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1591) 
02-09 18:59:51.202: E/SQLiteDatabase(581): at ir.maghsoodi.leitnerbox.Insert.onCreate(Insert.java:31) 
02-09 18:59:51.202: E/SQLiteDatabase(581): at android.app.Activity.performCreate(Activity.java:4465) 
02-09 18:59:51.202: E/SQLiteDatabase(581): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
02-09 18:59:51.202: E/SQLiteDatabase(581): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919) 
02-09 18:59:51.202: E/SQLiteDatabase(581): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980) 
02-09 18:59:51.202: E/SQLiteDatabase(581): at android.app.ActivityThread.access$600(ActivityThread.java:122) 
02-09 18:59:51.202: E/SQLiteDatabase(581): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 
02-09 18:59:51.202: E/SQLiteDatabase(581): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-09 18:59:51.202: E/SQLiteDatabase(581): at android.os.Looper.loop(Looper.java:137) 
02-09 18:59:51.202: E/SQLiteDatabase(581): at android.app.ActivityThread.main(ActivityThread.java:4340) 
02-09 18:59:51.202: E/SQLiteDatabase(581): at java.lang.reflect.Method.invokeNative(Native Method) 
02-09 18:59:51.202: E/SQLiteDatabase(581): at java.lang.reflect.Method.invoke(Method.java:511) 
02-09 18:59:51.202: E/SQLiteDatabase(581): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
02-09 18:59:51.202: E/SQLiteDatabase(581): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
02-09 18:59:51.202: E/SQLiteDatabase(581): at dalvik.system.NativeStart.main(Native Method) 
02-09 18:59:51.232: D/AndroidRuntime(581): Shutting down VM 
02-09 18:59:51.242: W/dalvikvm(581): threadid=1: thread exiting with uncaught exception (group=0x409961f8) 
02-09 18:59:51.342: E/AndroidRuntime(581): FATAL EXCEPTION: main 
02-09 18:59:51.342: E/AndroidRuntime(581): java.lang.RuntimeException: Unable to start activity ComponentInfo{ir.maghsoodi.leitnerbox/ir.maghsoodi.leitnerbox.Insert}: android.database.sqlite.SQLiteBindOrColumnIndexOutOfRangeException: bind or column index out of range: handle 0x1ee560 
02-09 18:59:51.342: E/AndroidRuntime(581): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955) 
02-09 18:59:51.342: E/AndroidRuntime(581): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980) 
02-09 18:59:51.342: E/AndroidRuntime(581): at android.app.ActivityThread.access$600(ActivityThread.java:122) 
02-09 18:59:51.342: E/AndroidRuntime(581): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 
02-09 18:59:51.342: E/AndroidRuntime(581): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-09 18:59:51.342: E/AndroidRuntime(581): at android.os.Looper.loop(Looper.java:137) 
02-09 18:59:51.342: E/AndroidRuntime(581): at android.app.ActivityThread.main(ActivityThread.java:4340) 
02-09 18:59:51.342: E/AndroidRuntime(581): at java.lang.reflect.Method.invokeNative(Native Method) 
02-09 18:59:51.342: E/AndroidRuntime(581): at java.lang.reflect.Method.invoke(Method.java:511) 
02-09 18:59:51.342: E/AndroidRuntime(581): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
02-09 18:59:51.342: E/AndroidRuntime(581): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
02-09 18:59:51.342: E/AndroidRuntime(581): at dalvik.system.NativeStart.main(Native Method) 
02-09 18:59:51.342: E/AndroidRuntime(581): Caused by: android.database.sqlite.SQLiteBindOrColumnIndexOutOfRangeException: bind or column index out of range: handle 0x1ee560 
02-09 18:59:51.342: E/AndroidRuntime(581): at android.database.sqlite.SQLiteProgram.native_bind_string(Native Method) 
02-09 18:59:51.342: E/AndroidRuntime(581): at android.database.sqlite.SQLiteProgram.bind(SQLiteProgram.java:247) 
02-09 18:59:51.342: E/AndroidRuntime(581): at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:299) 
02-09 18:59:51.342: E/AndroidRuntime(581): at android.database.sqlite.SQLiteProgram.bindAllArgsAsStrings(SQLiteProgram.java:401) 
02-09 18:59:51.342: E/AndroidRuntime(581): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:55) 
02-09 18:59:51.342: E/AndroidRuntime(581): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47) 
02-09 18:59:51.342: E/AndroidRuntime(581): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1564) 
02-09 18:59:51.342: E/AndroidRuntime(581): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1449) 
02-09 18:59:51.342: E/AndroidRuntime(581): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1405) 
02-09 18:59:51.342: E/AndroidRuntime(581): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1485) 
02-09 18:59:51.342: E/AndroidRuntime(581): at ir.maghsoodi.leitnerbox.Insert.onCreate(Insert.java:38) 
02-09 18:59:51.342: E/AndroidRuntime(581): at android.app.Activity.performCreate(Activity.java:4465) 
02-09 18:59:51.342: E/AndroidRuntime(581): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
02-09 18:59:51.342: E/AndroidRuntime(581): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919) 
02-09 18:59:51.342: E/AndroidRuntime(581): ... 11 more 
02-09 19:04:51.563: I/Process(581): Sending signal. PID: 581 SIG: 9 

내가 그것을 어떻게 해결할 수 있습니까?
도와주세요

+1

예외 스택 트레이스를 게시하면 도움이 될 것 같지 않습니까? – injecteer

+0

정말로 스택 트레이스를 제공하고 문제를 드러내는 데 조금 더 노력해야합니다. 그렇지 않으면 질문이 형편없고 닫힌 것으로보고 될 수 있습니다. –

+0

스택 트레이스는 어디에 있습니까? 어떻게 제공 할 수 있습니까? – user3257386

답변

1

이게 문제는 아니지만 만들면 테이블 쿼리에 ");"

당신은

public static final String sakht="CREATE TABLE english (ID INTEGER PRIMARY KEY,kalame TEXT,mani TEXT,marhale TEXT,taghir TEXT"; 

을 가지고 있지만 그것은
public static final String sakht="CREATE TABLE english (ID INTEGER PRIMARY KEY,kalame TEXT,mani TEXT,marhale TEXT,taghir TEXT);"; 

은 또한 당신의 쿼리가 잘못해야한다. 당신은

Cursor nowRead =db.query("english", sotoonha, "kalame = good", null, null, null, null); 

할 수 있습니다 또는

Cursor nowRead =db.query("english", sotoonha, "kalame = ?", meghdarha, null, null, null); 

체크 아웃 자세한 How to pass two or more selection argument in "query" method

+0

+1 독수리 눈을 복사합니다 :) –

0

에 대해 다음 게시물을보다 역동적으로 "제약 실패"기본 키와 관련이있다. 당신이 열 "ID가"중복 값을 가질 수 없습니다 SQLite는 말하고있다

CREATE TABLE english (ID INTEGER PRIMARY KEY,kalame TEXT,mani TEXT,marhale TEXT,taghir TEXT);" 

: 당신이 당신의 테이블을 만들 때 중복 "ID"

있는 행을 삽입하려고합니다. 앱을 다시 시작하면 데이터베이스가 이미 존재하며 여기에 'ID = 1'행을 다시 삽입하려고합니다.

long newRowID=db.insert("english", "taghir" , values); //for insert 
+0

그래, 어떻게 고칠 수 있습니까? – user3257386

+0

그 행을 주석으로 처리하거나 데이터베이스에서 쿼리를 수행하여 MAX (ID)를 보거나 테이블을 만들 때 "autoincrement"를 사용하고 ID를 삽입하지 마십시오 – Jim

관련 문제