使用带有android的SQLite不存在列'_id'

时间:2014-01-28 09:45:16

标签: android sql listview cursor simplecursoradapter

我正在研究一个包含SQL表格并在ListViews中显示它们的项目,我得到“列'_id'不存在”粉碎当我试图进入包含listview的活动时,我在这里检查了其他答案并且他们都说我必须有一个名为“_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";

这是获取光标的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;
            }
  

这是使用光标制作列表视图的代码段:

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”的列之外,还有什么问题?

编辑:

这是log cat:

01-28 10:00:31.806:E / AndroidRuntime(27937):java.lang.RuntimeException:无法启动活动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);

3 个答案:

答案 0 :(得分:3)

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

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

编辑:

同样提高版本号就可以了。

答案 1 :(得分:1)

如果我没有错,请在queryClients()

中试试
Cursor cursor = db.query(dbConstants.TABLE_NAME_CLIENTS, new String[] {"_id","name","balance","idNum","type"}, 
null, null, null, null, "name ASC ");

或试试这个:

Cursor mCursor = db.query(true, dbConstants.TABLE_NAME_CLIENTS,
            new String[] {"_id","name","balance","idNum","type"}, 
null,null, null, null, null, null);

    if (mCursor != null) {
        mCursor.moveToFirst();
    }

答案 2 :(得分:1)

我有类似的问题,这就是我试用的方式

你可以尝试一下:

1)首先从databasedevice

中删除emulator

emulatordata/data/databases

device:使用adb shellrun-as命令

2)创建一个具有不同名称的新database(与之前的名称不同)。

如果问题仍然存在,请告诉我

希望它可以帮助你...