2014-02-09 95 views
0

我可以在我的数据库中插入信息,但是当我想在插入它之后像阅读developer.android一样阅读它们时,它将与此错误关闭,“不幸的是,应用程序已停止”。
这是我的代码:为什么我不能读取我的数据库?

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”

当您创建表:

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

你是在告诉列“ID”不能有重复的值的SQLite。当您重新启动应用程序,你的数据库已经存在,你正试图插入具有“ID = 1”,在这里再次行:

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

好的,我该如何解决它? – user3257386

+0

只是将该行注释掉 - 或者在数据库中查询MAX(ID) - 或者在创建表时使用“autoincrement”,并且不要插入ID – Jim

相关问题