SQLite的android系统中无法识别新列加我 [英] sqlite in android not recognizing new column I added

查看:114
本文介绍了SQLite的android系统中无法识别新列加我的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的应用程序数据库工作得很好,然后我加里程表的分贝。现在,我得到一个表检查已经没有列命名里程表:,在编译:INSERT INTO检查(codriver,里程表,驱动程序,日期时间,vehicle_id,状态,汽车类型)VALUES(?,,,,,,?????? );错误logcat中。我检查我的数据库适配器和code工作正常,但由于某些原因,它是不承认我添加新的列。
这里是code从DB

My db in my app worked fine, then I added odometer to the db. Now I am getting a table inspections has no column named odometer: , while compiling: INSERT INTO inspections(codriver, odometer, driver, datetime, vehicle_id, status, vehicle_type) VALUES(?, ?, ?, ?, ?, ?, ?); error in logcat. I checked my db adapter and the code is working properly, but for some reason it is not recognizing the new column I added. Here is the code from the db

@Override
public void onCreate(SQLiteDatabase db)
{
    String DATABASE_CREATE = "create table inspections ("
            + "_id integer  primary key autoincrement, "
            + "vehicle_id   string  not null, "
            + "vehicle_type string  not null, "
            + "datetime     integer not null, "
            + "driver       string  not null, "
            + "codriver     string  , "
            + "status       integer not null, "
            + "odometer     string  not null "
            + ");";
    db.execSQL(DATABASE_CREATE);

}

这里是code为主要分贝

here is the code for the main db

public class SignalSetDBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "db";
private static final int DATABASE_VERSION = 1;

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

// Method is called during creation of the database
@Override
public void onCreate(SQLiteDatabase db) {
    CurrentStateTable.onCreate(db);
    HoursOfServiceTable.onCreate(db);
    InspectionsTable.onCreate(db);
    }

// Method is called during an upgrade of the database,
// e.g. if you increase the database version
@Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
    CurrentStateTable.onUpgrade(database, oldVersion, newVersion);
    HoursOfServiceTable.onUpgrade(database, oldVersion, newVersion);
    InspectionsTable.onUpgrade(database, oldVersion, newVersion);
}
}

我可以包括多个code,但pretty确保误差在code以上。

I can include more code, but pretty sure the error is in the code above

更新:
卸载模拟器上的应用程序,仍然得到同样的错误。这里是logcat的
12月3日至28日:52:59.135:D / dalvikvm(331):GC_EXTERNAL_ALLOC释放885对象/在78ms 63248字节
12月3日至28日:53:05.695:D / dalvikvm(331):GC_FOR_MALLOC释放4480对象/在73ms 261760字节
12月3日至28日:53:17.065:W / KeyCharacterMap(331):无键盘ID 0
12月3日至28日:53:17.065:W / KeyCharacterMap(331):使用默认的键盘对应:/system/usr/keychars/qwerty.kcm.bin
12月3日至28日:53:28.615:I /数据库(331):sqlite的返回:错误code = 1,味精=表检查有没有指定的列里程表
12月3日至28日:53:28.715:D / dalvikvm(331):GC_FOR_MALLOC释放8584对象/在84ms 420616字节
12月3日至28日:53:28.715:E /数据库(331):错误插入codriver =里程表= 4321 =驾驶员吉姆的datetime = 1332964380 vehicle_id = ET 432状态= 1 =汽车类型卡车
12月3日至28日:53:28.715:E /数据库(331):android.database.sqlite.SQLiteException:表检查有没有名为里程表列:,在编译:INSERT INTO检查(codriver,里程表,驱动程序,日期时间,vehicle_id,状态,汽车类型)VALUES(?,,,,,,)??????;
12月3日至28日:53:28.715:E /数据库(331):在android.database.sqlite.SQLiteCompiledSql.native_compile(本机方法)
12月3日至28日:53:28.715:E /数据库(331):在android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91)
12月3日至28日:53:28.715:E /数据库(331):在android.database.sqlite.SQLiteCompiledSql(SQLiteCompiledSql.java:64)。
12月3日至28日:53:28.715:E /数据库(331):在android.database.sqlite.SQLiteProgram(SQLiteProgram.java:80)。
12月3日至28日:53:28.715:E /数据库(331):在android.database.sqlite.SQLiteStatement(SQLiteStatement.java:36)。
12月3日至28日:53:28.715:E /数据库(331):在android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1145)
12月3日至28日:53:28.715:E /数据库(331):在android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1536)
12月3日至28日:53:28.715:E /数据库(331):在android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1410)
12月3日至28日:53:28.715:E /数据库(331):在com.signalsetapp.database.InspectionDBAdapter.insertInspection(InspectionDBAdapter.java:54)
12月3日至28日:53:28.715:E /数据库(331):在com.signalsetapp.report.save(report.java:120)
12月3日至28日:53:28.715:E /数据库(331):在java.lang.reflect.Method.invokeNative(本机方法)
12月3日至28日:53:28.715:E /数据库(331):在java.lang.reflect.Method.invoke(Method.java:521)
12月3日至28日:53:28.715:E /数据库(331):在android.view.View $ 1.onClick(View.java:2067)
12月3日至28日:53:28.715:E /数据库(331):在android.view.View.performClick(View.java:2408)
12月3日至28日:53:28.715:E /数据库(331):在android.view.View $ PerformClick.run(View.java:8816)
12月3日至28日:53:28.715:E /数据库(331):在android.os.Handler.handleCallback(Handler.java:587)
12月3日至28日:53:28.715:E /数据库(331):在android.os.Handler.dispatchMessage(Handler.java:92)
12月3日至28日:53:28.715:E /数据库(331):在android.os.Looper.loop(Looper.java:123)
12月3日至28日:53:28.715:E /数据库(331):在android.app.ActivityThread.main(ActivityThread.java:4627)
12月3日至28日:53:28.715:E /数据库(331):在java.lang.reflect.Method.invokeNative(本机方法)
12月3日至28日:53:28.715:E /数据库(331):在java.lang.reflect.Method.invoke(Method.java:521)
12月3日至28日:53:28.715:E /数据库(331):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868)
12月3日至28日:53:28.715:E /数据库(331):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12月3日至28日:53:28.715:E /数据库(331):在dalvik.system.NativeStart.main(本机方法)

update: uninstalled the app on the emulator, still getting the same error. Here is the logcat 03-28 12:52:59.135: D/dalvikvm(331): GC_EXTERNAL_ALLOC freed 885 objects / 63248 bytes in 78ms 03-28 12:53:05.695: D/dalvikvm(331): GC_FOR_MALLOC freed 4480 objects / 261760 bytes in 73ms 03-28 12:53:17.065: W/KeyCharacterMap(331): No keyboard for id 0 03-28 12:53:17.065: W/KeyCharacterMap(331): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 03-28 12:53:28.615: I/Database(331): sqlite returned: error code = 1, msg = table inspections has no column named odometer 03-28 12:53:28.715: D/dalvikvm(331): GC_FOR_MALLOC freed 8584 objects / 420616 bytes in 84ms 03-28 12:53:28.715: E/Database(331): Error inserting codriver= odometer=4321 driver=jim datetime=1332964380 vehicle_id=ET 432 status=1 vehicle_type=truck 03-28 12:53:28.715: E/Database(331): android.database.sqlite.SQLiteException: table inspections has no column named odometer: , while compiling: INSERT INTO inspections(codriver, odometer, driver, datetime, vehicle_id, status, vehicle_type) VALUES(?, ?, ?, ?, ?, ?, ?); 03-28 12:53:28.715: E/Database(331): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method) 03-28 12:53:28.715: E/Database(331): at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91) 03-28 12:53:28.715: E/Database(331): at android.database.sqlite.SQLiteCompiledSql.(SQLiteCompiledSql.java:64) 03-28 12:53:28.715: E/Database(331): at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:80) 03-28 12:53:28.715: E/Database(331): at android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:36) 03-28 12:53:28.715: E/Database(331): at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1145) 03-28 12:53:28.715: E/Database(331): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1536) 03-28 12:53:28.715: E/Database(331): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1410) 03-28 12:53:28.715: E/Database(331): at com.signalsetapp.database.InspectionDBAdapter.insertInspection(InspectionDBAdapter.java:54) 03-28 12:53:28.715: E/Database(331): at com.signalsetapp.report.save(report.java:120) 03-28 12:53:28.715: E/Database(331): at java.lang.reflect.Method.invokeNative(Native Method) 03-28 12:53:28.715: E/Database(331): at java.lang.reflect.Method.invoke(Method.java:521) 03-28 12:53:28.715: E/Database(331): at android.view.View$1.onClick(View.java:2067) 03-28 12:53:28.715: E/Database(331): at android.view.View.performClick(View.java:2408) 03-28 12:53:28.715: E/Database(331): at android.view.View$PerformClick.run(View.java:8816) 03-28 12:53:28.715: E/Database(331): at android.os.Handler.handleCallback(Handler.java:587) 03-28 12:53:28.715: E/Database(331): at android.os.Handler.dispatchMessage(Handler.java:92) 03-28 12:53:28.715: E/Database(331): at android.os.Looper.loop(Looper.java:123) 03-28 12:53:28.715: E/Database(331): at android.app.ActivityThread.main(ActivityThread.java:4627) 03-28 12:53:28.715: E/Database(331): at java.lang.reflect.Method.invokeNative(Native Method) 03-28 12:53:28.715: E/Database(331): at java.lang.reflect.Method.invoke(Method.java:521) 03-28 12:53:28.715: E/Database(331): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 03-28 12:53:28.715: E/Database(331): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 03-28 12:53:28.715: E/Database(331): at dalvik.system.NativeStart.main(Native Method)

推荐答案

SQLiteOpenHelper 是看到现有的数据库,因此他并没有叫的onCreate

SQLiteOpenHelper is seeing your existing database and so it isn't calling onCreate.

您需要卸载您的应用程序,让你摆脱现有的数据库中。

You need to uninstall your app so that you get rid of the existing database.

如果您在开发模式的时候,你可以只修改 DATABASE_NAME 到DB2作为一个快速黑客把自己弄去,不过记得后来改回你一次数据库是稳定的。

If you're in dev mode, you can just change the DATABASE_NAME to db2 as a quick hack to get yourself going, but remember to change it back later once your database is stable.

如果你想要做的最正确的方式,你可以增加 DATABASE_VERSION ,然后实现一些 ALTER TABLE onUpgrade 语句。

If you want to do it in the most proper way, you can increment DATABASE_VERSION, then implement some ALTER TABLE statements in onUpgrade.

这篇关于SQLite的android系统中无法识别新列加我的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆