Android Sqlite3 - 由命令行创建的列,但不是来自我的Android代码

时间:2013-03-28 15:35:12

标签: java android sqlite

我正在开发一个拥有内部Sqlite数据库的项目。我添加了一个新表( Table1 ) 使用1列( column1 )通过shell并通过android插入并删除其中的一些新值。我尝试通过命令行添加两个新列 column2 column3 并通过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 ,例如此列尚未创建。所以同样的DB但是shell和android之间的区别。了解错误的任何提示?

2 个答案:

答案 0 :(得分:1)

  

了解错误的任何提示?

问题可能与db和cursor有关。

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

我不建议您通过shell使用PRAGMA

注意:

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

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。如果没有,问题就是光标。

答案 1 :(得分:0)

它现在有效。我忘了编辑传递给此方法的参数columns,该参数返回Cursor

 db.query();

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