有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android Sqlite3列由命令行创建,但不是从我的Android代码创建的

我正在做一个有内部Sqlite数据库的项目。我添加了一个新表(表1) 1列(column1)通过shell和安卓在其中插入和删除一些新值。我试图通过命令行添加两个新列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,例如此列尚未创建。同样的DB,但是shell和安卓的区别。有什么建议可以帮助你理解问题所在吗


共 (2) 个答案

  1. # 1 楼答案

    Any tips to understand what is wrong?

    问题可能与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。如果不是,问题是光标

  2. # 2 楼答案

    它现在起作用了。我忘记编辑传递给这个方法的参数columns,该方法返回Cursor

     db.query();
    

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