android 的 Sqlite 游标

android's Sqlite cursor

当我构建 SQLite 数据库时

public static final String CREATE_BOOK = "create table Book(" + "id integer primary key autoincrement," + "author text," + "price real," + "pages integer," + "name text," + "category_id integer)";

然后有一个按钮add_data

add_data.setOnClickListener(new View.OnClickListener() {
     @Override
            public void onClick(View v) {
                SQLiteDatabase db = dbhelper.getWritableDatabase();
                ContentValues values = new ContentValues();
                values.put("author", "jose");
                values.put("name", "Thank you!");
                values.put("pages", 999);
                values.put("price", 99.9);
                db.insert("Book", null, values);    }
        });

我想查询 table

query_data.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SQLiteDatabase db = dbhelper.getWritableDatabase();
                Cursor cursor = db.query("Book", null, null, null, null, null, null);
                if(cursor.moveToFirst()){
                    do {
                        String name = cursor.getString(cursor.getColumnIndex("name"));
                        String author = cursor.getString(cursor.getColumnIndex("author"));
                        int pages = cursor.getInt(cursor.getColumnIndex("pages"));
                        double price = cursor.getDouble(cursor.getColumnIndex("price"));
                        Log.d("MainActivity", "book name is" + name);
                        Log.d("MainActivity", "book author is" + author);
                        Log.d("MainActivity", "book pages is" + pages);
                        Log.d("MainActivity", "book prices is" + price);
                    }while (cursor.moveToNext());
                }
                cursor.close();
            }
        });

而我 运行 它,有一些错误:无法从具有 1 行 5 列的 CursorWindow 读取第 0 行,第 -1 列。在从游标访问数据之前,确保游标已正确初始化。

最后,我把add_data的顺序换成"author"和"name",就是运行

有什么问题吗?谢谢!

如果您希望在完成时保存值,您需要处于事务中(并提交)。

SQLiteDatabase db = this.getWritableDatabase();
db.beginTransaction()

...插入、更新、删除等

if (ok) {
  db.setTransactionSucessful();
}
db.endTransaction();
db.close();

试试这个
读取数据使用

this.getReadableDatabase() 

您正在使用

getWritableDatabase()

在query_data.setOnClickListener