Java Android Sqlite3-由命令行创建的列,但不是来自我的Android代码
我正在从事一个拥有内部Sqlite数据库的项目。我添加了一个新表(表1) 通过shell和android在其中插入和删除一些新值,使用1列(column1)。我试图通过命令行添加两个新列column2和column3,并通过shell调用:Java Android Sqlite3-由命令行创建的列,但不是来自我的Android代码,java,android,sqlite,Java,Android,Sqlite,我正在从事一个拥有内部Sqlite数据库的项目。我添加了一个新表(表1) 通过shell和android在其中插入和删除一些新值,使用1列(column1)。我试图通过命令行添加两个新列column2和column3,并通过shell调用: **PRAGMA table_info(Table1);** 我发现创建两个新列是正确的,因为我得到了以下输出: *0|column1|varchar(20)|1||1 1|column2|varchar(255)|1||0 2|column3|varch
**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之间的区别。有什么提示可以理解什么是错误的吗
有什么提示可以理解什么是错误的吗
问题可能与db和游标有关
但正如我的建议,如果您想升级db(不同的版本号),这意味着要执行一些更改(添加/删除/修改列、关系等),您应该使用直接指定用于类似您的目的的方法,或者也可以使用经典的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。否则,问题是光标。它现在可以工作了。我忘记编辑传递给此方法的参数
列
,该方法返回光标
db.query();
其他答案有助于解决这个问题。如何创建游标?游标游标=db.query(“表1”,列,条件,null,null,null,null);而(cursor.moveToNext()){。。。