"no such colum : time (Code 1)" 安卓工作室中的SQLiteException



>on创建数据库的方法:

private static String DATABASE = "DB1.db";
private static String TABLE ="NotesTable";
private static String TITLE = "title";
private static String NAME ="name";
private static String TIME = "time";
private static String BOOKMARK = "bookm";
private static String NOTITIME = "notitime";

DatabaseHelper(Context context) {
super(context, DATABASE, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE "
+ TABLE + "( "
+ TITLE + " TEXT, "
+ NAME + " TEXT, "
+ NOTITIME + " LONG, "
+ BOOKMARK + " INTEGER DEFAULT 1 )");
}

数据库的以下代码中发生错误:

//cursor to get all the column's data 
List<DataModel> getdata(){
List<DataModel> data=new ArrayList<>();
SQLiteDatabase db = this.getWritableDatabase();
StringBuilder stringBuffer = new StringBuilder();
DataModel dataModel;
@SuppressLint("Recycle") Cursor cursor = db.rawQuery("select * from "+TABLE+" ORDER BY " + TIME + " DESC;",null);

while (cursor.moveToNext()) {
dataModel= new DataModel();
String title = cursor.getString(cursor.getColumnIndexOrThrow("title"));
String name = cursor.getString(cursor.getColumnIndexOrThrow("name"));
Long time = cursor.getLong(cursor.getColumnIndexOrThrow("time"));
Integer book = cursor.getInt(cursor.getColumnIndexOrThrow("bookm"));
Long notitime = cursor.getLong(cursor.getColumnIndexOrThrow("notitime"));
dataModel.setTitle(title);
dataModel.setName(name);
dataModel.setDate(time);
dataModel.setBookmark(book);
dataModel.setNotiTime(notitime);
stringBuffer.append(dataModel);
data.add(dataModel);
}
return data;
}

堆栈跟踪 :

FATAL EXCEPTION: main
Process: com.tank.vishal.sample, PID: 5981
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tank.vishal.sample/com.tank.vishal.sample.MainActivity}: android.database.sqlite.SQLiteException: no such column: time (code 1): , while compiling: select * from NotesTable ORDER BY time DESC;
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: android.database.sqlite.SQLiteException: no such column: time (code 1): , while compiling: select * from NotesTable ORDER BY time DESC;
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1318)
at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1257)
at com.tank.vishal.sample.DatabaseHelper.getdata(DatabaseHelper.java:102)
at com.tank.vishal.sample.MainActivity.initViews(MainActivity.java:114)
at com.tank.vishal.sample.MainActivity.onCreate(MainActivity.java:83)
at android.app.Activity.performCreate(Activity.java:6975)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 
at android.app.ActivityThread.-wrap11(Unknown Source:0) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
at android.os.Handler.dispatchMessage(Handler.java:105) 
at android.os.Looper.loop(Looper.java:164) 
at android.app.ActivityThread.main(ActivityThread.java:6541) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 

我试过什么:

更改表和数据库的名称, 卸载应用程序本身并从设备中删除所有数据。

在制作此应用程序时从未发生过此错误,直到今天它一直完美运行。

PS - 我尝试在之前甚至没有安装过一次的设备中安装该应用程序,它返回以下错误:

Failure [INSTALL_CANCELED_BY_USER]

$ adb shell pm uninstall com.tank.vishal.sample DELETE_FAILED_INTERNAL_ERROR 安装APK时出错

您的CREATE TABLESQL 不会创建名为time的列。首先为其添加列规范,然后才卸载并重新安装应用。

onCreate中,您没有创建列时间

最新更新