【问题标题】:Cursor is empty光标为空
【发布时间】:2017-04-26 03:21:11
【问题描述】:

我有两个按钮,一个将数据添加到数据库,另一个获取所有数据。表是我的类,其中包含有关表(Table.TABLE_NAME == "table")的信息。但光标始终为空。我试过这个 db.query(Table.TABLE_NAME,null,null,null,null,null,null) 它也不起作用。

public void onClick(View v) {
            DBHelper dbHelper = new DBHelper(this);
            SQLiteDatabase db = dbHelper.getWritableDatabase();
            Cursor cursor = null;
            switch (v.getId()){
                case R.id.btnAdd:
                    ContentValues contentValues = new ContentValues();
                    contentValues.put("Name",etName.getText().toString());
                    contentValues.put("Surname",etSurname.getText().toString());
                    contentValues.put("Age",etAge.getText().toString());
                    contentValues.put("City",etCity.getText().toString());
                    db.insert(Table.TABLE_NAME,null,contentValues);
                    Log.d(TAG,etName.getText().toString() +" " + etSurname.getText().toString() +" " + etAge.getText().toString()+" " + etCity.getText().toString());
                    break;
                case R.id.btnSearch:
                    cursor = db.rawQuery("select * from "+Table.TABLE_NAME,null);
                    break;
            }
            if (cursor != null) {
                if(cursor.moveToFirst()) {
                    String str;
                    do {
                        str = "";
                        for (String cn : cursor.getColumnNames()) {
                            str = str.concat(cn + " = " + cursor.getString(cursor.getColumnIndex(cn)) + "; ");
                        }
                    } while (cursor.moveToNext());
                }
                cursor.close();
            }else {
                Log.d(TAG,"null");
            }
            db.close();
        }

【问题讨论】:

  • 确定您的应用到达case R.id.btnSearch 行?确定你桌子上有东西?表定义如何?

标签: android android-sqlite android-cursor


【解决方案1】:

您的光标始终为空,因为您从未初始化它。 试试这样的:

        Cursor cursor = db .query(TABLE_NAME, columns, null, null, null, null, null);

但在您的开关块之外 - 否则无法到达。

使用调试器,它会告诉你所有你需要知道的关于实际发生的事情。

也可以考虑使用https://github.com/square/sqlbrite; 它将帮助您在各种情况下同步数据。

【讨论】:

    【解决方案2】:

    使用dbHelper.getReadableDatabase()从数据库中获取数据。

    试试这个:

         case R.id.btnSearch:
                    db = dbHelper.getReadableDatabase();
                    cursor = db.rawQuery("select * from "+Table.TABLE_NAME,null);
                    break;
    

    【讨论】:

    • 这不太可能,如果这会改变 rawQuery 的输出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 2020-12-25
    相关资源
    最近更新 更多