android - 在 android 中使用 SQLite 时,列 '_id' 不存在

标签 android sql listview cursor simplecursoradapter

我正在开发一个包含 SQL 中的表并在 ListViews 中显示它们的项目,当我尝试访问包含 listview 的 Activity 时,我得到“列 '_id' 不存在”,我在这里检查了其他答案他们都说我必须有一个名为“_id”的列,而我确实如此,还有什么可能导致此错误?

这是我的常量类

final static String DB_CLIENTS_ID = "_id";
    final static String DB_CLIENTS_NAME = "name";
    final static String DB_CLIENTS_BALANCE = "balance";
    final static String DB_CLIENTS_IDNUM = "idNum";
    final static String DB_CLIENTS_TYPE = "type";

这是获取curser的hendler函数:

    public Cursor queryClients(){

                db = dbOpenHelper.getReadableDatabase();


                Cursor cursor = db.query(dbConstants.TABLE_NAME_CLIENTS,
                            null, null, null, null, null,
                            dbConstants.DB_CLIENTS_NAME+ " ASC");           

                return cursor;
            }

here is the snippet that uses the curser to make the listview:

dbhendler = new dbHendler(this);
        Cursor c = dbhendler.queryClients();
        startManagingCursor(c);

        String[] from = new String[] {dbConstants.DB_CLIENTS_ID, dbConstants.DB_CLIENTS_NAME,dbConstants.DB_CLIENTS_BALANCE};

        int[] to = new int[] {R.id.account_list_id_number, R.id.account_list_client_name, R.id.account_list_balance};


        adapter = new SimpleCursorAdapter(this, R.layout.account_list_line, c, from, to);

ListView lv = (ListView) findViewById(R.id.listView1);

        lv.setAdapter(adapter);

除了没有名为“_id”的列之外,可能还有什么问题?

编辑:

这是日志猫:

01-28 10:00:31.806: E/AndroidRuntime(27937): java.lang.RuntimeException: 无法启动 Activity ComponentInfo{com.ziv.bank_app/com.ziv.bank_app.ClientListActivity}: java.lang。 IllegalArgumentException:列“_id”不存在

编辑:

创建表的代码:

public void onCreate(SQLiteDatabase db) {

        String sql1 = ""
                + "CREATE TABLE "+ dbConstants.TABLE_NAME_CLIENTS+ " ("
                +dbConstants.DB_CLIENTS_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                +dbConstants.DB_CLIENTS_NAME + " TEXT,"
                +dbConstants.DB_CLIENTS_IDNUM + " INTEGER,"
                +dbConstants.DB_CLIENTS_TYPE + " TEXT,"
                +dbConstants.DB_CLIENTS_BALANCE + " REAL"
                + ")";

        db.execSQL(sql1);

最佳答案

当第一次看到这个问题时,我在这里看到答案是有一个名为“_id”的字符串,我在表创建文件中更改了它,但是从未创建新文件,它会在新设备上创建/emulator 但在我的上它仍然使用我创建的那个。

创建一个新的数据库文件,只需在建表代码中更改其名称即可,问题就解决了。

编辑:

同时提高版本号也可以解决问题

关于android - 在 android 中使用 SQLite 时,列 '_id' 不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21401989/

相关文章:

java - android-如何更改滑动选项卡的默认位置

sql - 多表一对一关系

android - ListView 与 OnItemClickListener

vb.net - listview平铺布局问题(vb.net)

android - 单击项目时无法从 ListView 进入 webview

android - ActionBar 外部的自定义溢出菜单

android - 制作弹跳动画

android - 如何在 Android 中通过 webView 下载文件

mysql - 与 MySql 中另一个表中列出的每个不同值进行比较

c# - 如何根据一列获取数据库中的整行