0

我正在开发一个具有内部 Sqlite 数据库的项目。我通过 shell 添加了一个新表(Table1),其中包含 1 列(column1),并通过 android 在其中插入和删除了一些新值。我尝试通过命令行添加两个新列column2column3并通过 shell 调用它:

**PRAGMA table_info(Table1);**

我看到两个新列的创建是正确的,因为我得到了这个输出:

*0|column1|varchar(20)|1||1
1|column2|varchar(255)|1||0
2|column3|varchar(255)|1||0*

美好的。呼吁

**cursor.getColumnIndex("column1"));** 

继续正常,但传递另一个参数,如下所示:

**cursor.getColumnIndex("column2"));**

正在返回-1,例如尚未创建此列。所以相同的数据库,但shell和android之间的区别。有什么提示可以理解什么是错的?

4

2 回答 2

1

有什么提示可以理解什么是错的?

问题可能与 db 和 cursor 有关。

但是作为我的建议,如果您想升级 db(不同的版本号),那么这意味着执行一些更改(添加/删除/修改列、关系等),您应该使用onUpgrade()直接指定用于以下目的的方法你的,或者也有可能使用经典ALTER TABLE条款。

我不建议您PRAGMA通过 shell 使用。

笔记:

对于“保证”,请尝试在您的应用程序中执行简单查询:

String query = "pragma table_info(Table1)";
c = db.rawQuery(query, null);
if (c.moveToFirst()) {
   do {
      String name = c.getString(c.getColumnIndex("name"));
      String type = c.getString(c.getColumnIndex("type"));
      Log.i("Information", name + " " + type);
   } while (c.moveToNext());
}

通过这个你可以找到你的问题所在。如果它只显示一列,则问题是 db. 如果没有,问题是光标。

于 2013-03-28T15:43:24.853 回答
0

现在可以了。我忘记编辑columns传递给此方法的参数,该方法返回Cursor.

 db.query();

其他答案有助于解决这个问题。

于 2013-03-28T15:57:21.583 回答