Android SQLiteDatabase列不存在

Android SQLiteDatabase列不存在,android,database,sqlite,Android,Database,Sqlite,我有一个SQliteDatabase,它有一个名为“MINIATURA”的列,其中有一个要在listview中设置的MINIATURA的路径。如果打开数据库,我可以看到包含路径的列,但是如果我在游标适配器中调用它,它会给我错误 02-20 13:06:17.099: E/AndroidRuntime(17357): FATAL EXCEPTION: main 02-20 13:06:17.099: E/AndroidRuntime(17357): Process: info.androidhiv

我有一个SQliteDatabase,它有一个名为“MINIATURA”的列,其中有一个要在listview中设置的MINIATURA的路径。如果打开数据库,我可以看到包含路径的列,但是如果我在游标适配器中调用它,它会给我错误

02-20 13:06:17.099: E/AndroidRuntime(17357): FATAL EXCEPTION: main
02-20 13:06:17.099: E/AndroidRuntime(17357): Process: info.androidhive.tabsswipe, PID: 17357
02-20 13:06:17.099: E/AndroidRuntime(17357): java.lang.IllegalArgumentException: column 'MINIATURA' does not exist
02-20 13:06:17.099: E/AndroidRuntime(17357):    at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:303)
02-20 13:06:17.099: E/AndroidRuntime(17357):    at android.widget.SimpleCursorAdapter.findColumns(SimpleCursorAdapter.java:333)
02-20 13:06:17.099: E/AndroidRuntime(17357):    at android.widget.SimpleCursorAdapter.<init>(SimpleCursorAdapter.java:81)
02-20 13:06:17.099: E/AndroidRuntime(17357):    at info.androidhive.tabsswipe.WeedCursorAdapter.<init>(WeedCursorAdapter.java:26)
如果我在另一列中更改了database_ob.MIN,它就会工作。 我做错了什么

编辑:这是我创建数据库的方式

public class RegistrationOpenHelperW extends SQLiteOpenHelper{
 public static final String DATABASE_NAME = "WEED_DB";
 public static final String TABLE_NAME = "WEED_TABLE";
 public static final int VERSION = 1;
 public static final String KEY_ID = "_id";
 public static final String NAME = "NOME";
 public final static String CFS = "COFFEESHOP";
 public static final String DESC = "DESCRIZIONE";
 public static final String IMG1 = "IMG1";
 public static final String IMG2 = "IMG2";
 public static final String MIN = "MINIATURA";
 public static final String SCRIPT = "create table " + TABLE_NAME + " ("
           + KEY_ID + " integer primary key autoincrement, " + NAME
           + " text not null, " + CFS + " text not null, " + DESC + " text not null," 
           + IMG1 + " text not null," + MIN + " text not null," + IMG2 + " text not null );";
 public RegistrationOpenHelperW(Context context, String name,
           CursorFactory factory, int version) {
          super(context, name, factory, version);
 }
 @Override
 public void onCreate(SQLiteDatabase db) {
  // TODO Auto-generated method stub
  db.execSQL(SCRIPT);
 }
 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  // TODO Auto-generated method stub
  db.execSQL("drop table " + TABLE_NAME);
  onCreate(db);
 }
}

这是数据库

抓取数据库并在sqlite管理器中可视化它

我可以看出你的版本仍然是1。可能您在编辑它时没有使用MINIATURA列,而设备上当前的DB没有该列


如果您将版本更改为2,那么它会将数据库升级到最新版本,可能会解决此问题?

删除数据库并重新创建它。我确定您正在查看的是一个没有列的旧副本。

我确定您更改了列的名称 “微型画”“至”微型画”“:)

所以数据库已经创建了列“minimation”,所以找不到您的名字“minimatura

解决方案很简单,只需卸载应用程序并安装新的或增加db版本


希望这对您有所帮助。

显示用于创建数据库的字符串我想您是对的。OP没有在SQLite管理器中检查它。正在键入相同的内容。有一次遇到同样的问题,我所做的只是删除数据库并重新创建。您不需要删除数据库,只需添加并正确处理数据库版本migrations@BarbeIo删除了应用程序数据,解除了应用程序的安装,更改了版本,但仍然会出错,它对我很管用。如何打开数据库?如何实例化光标?我删除了应用程序数据,解除了应用程序的安装,更改了版本,但仍然出现错误如果您删除,您不需要更改版本这可能会被注释
public class RegistrationOpenHelperW extends SQLiteOpenHelper{
 public static final String DATABASE_NAME = "WEED_DB";
 public static final String TABLE_NAME = "WEED_TABLE";
 public static final int VERSION = 1;
 public static final String KEY_ID = "_id";
 public static final String NAME = "NOME";
 public final static String CFS = "COFFEESHOP";
 public static final String DESC = "DESCRIZIONE";
 public static final String IMG1 = "IMG1";
 public static final String IMG2 = "IMG2";
 public static final String MIN = "MINIATURA";
 public static final String SCRIPT = "create table " + TABLE_NAME + " ("
           + KEY_ID + " integer primary key autoincrement, " + NAME
           + " text not null, " + CFS + " text not null, " + DESC + " text not null," 
           + IMG1 + " text not null," + MIN + " text not null," + IMG2 + " text not null );";
 public RegistrationOpenHelperW(Context context, String name,
           CursorFactory factory, int version) {
          super(context, name, factory, version);
 }
 @Override
 public void onCreate(SQLiteDatabase db) {
  // TODO Auto-generated method stub
  db.execSQL(SCRIPT);
 }
 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  // TODO Auto-generated method stub
  db.execSQL("drop table " + TABLE_NAME);
  onCreate(db);
 }
}