我正在开发一个拥有内部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之间的区别。了解错误的任何提示?
答案 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();
其他答案有助于解决此问题。