Android SQLiteException:“;没有这样的专栏“;在复制列时

Android SQLiteException:“;没有这样的专栏“;在复制列时,android,sqlite,android-sqlite,ormlite,sqliteopenhelper,Android,Sqlite,Android Sqlite,Ormlite,Sqliteopenhelper,我有一个带有主ID和一些列的sqlite数据库表。现在我想添加一个与主ID值相同的附加列 my_id integer primary key, ..., sort_order INTEGER 为此,我在SQLite助手的onUpgrade()中执行以下操作 if (oldVersion < 24) { database.execSQL("ALTER TABLE " + "my_table" + " ADD COLUMN " + "sort_ord

我有一个带有主ID和一些列的sqlite数据库表。现在我想添加一个与主ID值相同的附加列

my_id integer primary key, ..., sort_order INTEGER
为此,我在SQLite助手的onUpgrade()中执行以下操作

     if (oldVersion < 24) {
                database.execSQL("ALTER TABLE " + "my_table" + " ADD COLUMN " + "sort_order" + " INTEGER");
                database.execSQL("UPDATE my_table SET sort_order = my_id");
     }
知道这里会发生什么吗?我回滚到我的应用程序的上一个版本并再次更新,但我无法在我的任何设备上重现此崩溃

更新:实际代码和堆栈跟踪

创建表:

DATABASE_CREATE = "create table if not exists favrelations (dummyId integer primary key, _id integer, "
            + "room text not null, sort_order INTEGER);";
升级:

if (oldVersion < 24) {
            database.execSQL("ALTER TABLE " + "favrelations" + " ADD COLUMN " + "sort_order" + " INTEGER");
            database.execSQL("UPDATE favrelations SET sort_order = dummyId");
}
if(旧版本<24){
execSQL(“altertable”+“favrelations”+“addcolumn”+“sort_order”+“INTEGER”);
execSQL(“更新favrelations SET sort_order=dummyId”);
}
堆栈跟踪:

java.lang.RuntimeException: Unable to create application de.me.MyApp.MyAppApp: java.lang.IllegalStateException: Could not construct instance of helper class class de.me.MyApp.DbAdapter.DataBaseAdapterManager
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3957)
at android.app.ActivityThread.access$1300(ActivityThread.java:123)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1185)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalStateException: Could not construct instance of helper class class de.me.MyApp.DbAdapter.DataBaseAdapterManager
at com.j256.ormlite.android.apptools.OpenHelperManager.constructHelper(OpenHelperManager.java:222)
at com.j256.ormlite.android.apptools.OpenHelperManager.loadHelper(OpenHelperManager.java:170)
at com.j256.ormlite.android.apptools.OpenHelperManager.getHelper(OpenHelperManager.java:78)
at de.me.MyApp.DbAdapter.DataBaseAdapterManager.get(DataBaseAdapterManager.java:81)
at de.me.MyApp.MyAppApp.onCreate(MyAppApp.java:21)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:969)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3954)
... 10 more
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
at com.j256.ormlite.android.apptools.OpenHelperManager.constructHelper(OpenHelperManager.java:220)
... 16 more
Caused by: android.database.sqlite.SQLiteException: no such column: dummyId: , while compiling: UPDATE favrelations SET sort_order = dummyId
at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:68)
at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)
at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
at android.database.sqlite.SQLiteStatement.acquireAndLock(SQLiteStatement.java:260)
at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:84)
at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1899)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1839)
at de.me.MyApp.DbAdapter.DataBaseAdapterManager.onUpgrade(DataBaseAdapterManager.java:285)
at com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper.onUpgrade(OrmLiteSqliteOpenHelper.java:240)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:170)
at de.me.MyApp.DbAdapter.DataBaseAdapterManager.<init>(DataBaseAdapterManager.java:88)
... 19 more
java.lang.RuntimeException:无法创建应用程序de.me.MyApp.MyAppApp:java.lang.IllegalStateException:无法构造帮助器类de.me.MyApp.DbAdapter.DataBaseAdapterManager的实例
位于android.app.ActivityThread.handleBindApplication(ActivityThread.java:3957)
在android.app.ActivityThread.access$1300(ActivityThread.java:123)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1185)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:137)
位于android.app.ActivityThread.main(ActivityThread.java:4424)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:511)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
在dalvik.system.NativeStart.main(本机方法)
原因:java.lang.IllegalStateException:无法构造帮助器类de.me.MyApp.DbAdapter.DataBaseAdapterManager的实例
位于com.j256.ormlite.android.apptools.OpenHelperManager.constructHelper(OpenHelperManager.java:222)
在com.j256.ormlite.android.apptools.OpenHelperManager.loadHelper(OpenHelperManager.java:170)
位于com.j256.ormlite.android.apptools.OpenHelperManager.getHelper(OpenHelperManager.java:78)
位于de.me.MyApp.DbAdapter.DataBaseAdapterManager.get(DataBaseAdapterManager.java:81)
在de.me.MyApp.MyAppApp.onCreate(MyAppApp.java:21)上
在android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:969)中
位于android.app.ActivityThread.handleBindApplication(ActivityThread.java:3954)
... 10多
原因:java.lang.reflect.InvocationTargetException
位于java.lang.reflect.Constructor.constructNative(本机方法)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:417)
位于com.j256.ormlite.android.apptools.OpenHelperManager.constructHelper(OpenHelperManager.java:220)
... 还有16个
原因:android.database.sqlite.SQLiteException:编译时没有这样的列:dummyId:,更新favrelations SET sort\u order=dummyId
在android.database.sqlite.SQLiteCompiledSql.native\u compile(本机方法)中
位于android.database.sqlite.SQLiteCompiledSql.(SQLiteCompiledSql.java:68)
位于android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)
位于android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
位于android.database.sqlite.SQLiteStatement.acquireAndLock(SQLiteStatement.java:260)
位于android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:84)
位于android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1899)
位于android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1839)
位于de.me.MyApp.DbAdapter.DataBaseAdapterManager.onUpgrade(DataBaseAdapterManager.java:285)
位于com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper.onUpgrade(OrmLiteSqliteOpenHelper.java:240)
位于android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:170)
位于de.me.MyApp.DbAdapter.DataBaseAdapterManager。(DataBaseAdapterManager.java:88)
... 还有19个
更新2


我决定捕获错误,放下表并重新创建它。这将导致用户数据丢失,但至少他们可以再次使用该应用程序。我仍然很想知道是什么原因造成了这种情况。

在创建发布apk时,是否有任何特殊的proguard规则可能会干扰代码?不,此应用确实启用了proguard。测试版也是发布版,我刚刚将测试版推广到了生产版。它是同一个文件您在
onCreate()
CREATE TABLE
中也有sort\u order列吗?很好。但是是的,它也在onCreate()中。如果您按照标记的建议使用ORMlite,您能为
my_表
表提供一个POJO示例吗
java.lang.RuntimeException: Unable to create application de.me.MyApp.MyAppApp: java.lang.IllegalStateException: Could not construct instance of helper class class de.me.MyApp.DbAdapter.DataBaseAdapterManager
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3957)
at android.app.ActivityThread.access$1300(ActivityThread.java:123)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1185)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalStateException: Could not construct instance of helper class class de.me.MyApp.DbAdapter.DataBaseAdapterManager
at com.j256.ormlite.android.apptools.OpenHelperManager.constructHelper(OpenHelperManager.java:222)
at com.j256.ormlite.android.apptools.OpenHelperManager.loadHelper(OpenHelperManager.java:170)
at com.j256.ormlite.android.apptools.OpenHelperManager.getHelper(OpenHelperManager.java:78)
at de.me.MyApp.DbAdapter.DataBaseAdapterManager.get(DataBaseAdapterManager.java:81)
at de.me.MyApp.MyAppApp.onCreate(MyAppApp.java:21)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:969)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3954)
... 10 more
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
at com.j256.ormlite.android.apptools.OpenHelperManager.constructHelper(OpenHelperManager.java:220)
... 16 more
Caused by: android.database.sqlite.SQLiteException: no such column: dummyId: , while compiling: UPDATE favrelations SET sort_order = dummyId
at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:68)
at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)
at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
at android.database.sqlite.SQLiteStatement.acquireAndLock(SQLiteStatement.java:260)
at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:84)
at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1899)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1839)
at de.me.MyApp.DbAdapter.DataBaseAdapterManager.onUpgrade(DataBaseAdapterManager.java:285)
at com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper.onUpgrade(OrmLiteSqliteOpenHelper.java:240)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:170)
at de.me.MyApp.DbAdapter.DataBaseAdapterManager.<init>(DataBaseAdapterManager.java:88)
... 19 more