java - Android sqlite游标查询

标签 java android

我正在关注 http://www.vogella.de/articles/AndroidSQLite/article.html教程。我现在正在尝试更改系统,以便不仅有“评论”字段,还有“商品”和“价格”字段。

现在我有 2 哥伦而不是 1 哥伦,光标似乎导致应用程序崩溃! 例如下面的代码:

        public List<Item> getAllItems() {
            List<Item> items = new ArrayList<Item>();
            Cursor cursor = database.query(MySQLiteHelper.TABLE_ITEMS,
                    allColumns, null, null, null, null, null);
            cursor.moveToFirst();

            while (!cursor.isAfterLast()) {
                Item item = cursorToItem(cursor);
                items.add(item);
                cursor.moveToNext();
            }
            // Make sure to close the cursor
            cursor.close();
            return items;
        }

        private Item cursorToItem(Cursor cursor) {
            Item item = new Item();
            item.setId(cursor.getLong(0));
            item.setItem(cursor.getString(1));
            item.setPrice(cursor.getString(2));
            return item;
        }

行:

 Cursor cursor = database.query(MySQLiteHelper.TABLE_ITEMS,
                    allColumns, null, null, null, null, null);

是什么导致了错误,我相信这与我有一个附加列有关。有人可以告诉我如何编辑这一行以使其正常工作吗?我已经尝试过,但不理解这个光标查询。

编辑:通过用 null 替换所有列,它就运行了。但现在它崩溃了:

public Item createItem(String item, String price) {
        ContentValues values = new ContentValues();
        values.put(MySQLiteHelper.COLUMN_ITEM, item);
        values.put(MySQLiteHelper.COLUMN_PRICE, price);
        long insertId = database.insert(MySQLiteHelper.TABLE_ITEMS, null,
                values);
        // To show how to query
        Cursor cursor = database.query(MySQLiteHelper.TABLE_ITEMS,
                allColumns, MySQLiteHelper.COLUMN_ID + " = " + insertId, null,
                null, null, null);
        cursor.moveToFirst();
        return cursorToItem(cursor);
    }

上线:

Cursor cursor = database.query(MySQLiteHelper.TABLE_ITEMS,
                allColumns, MySQLiteHelper.COLUMN_ID + " = " + insertId, null,
                null, null, null);

这是 MySQLHelper.js:

package nupos.nupay.app;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class MySQLiteHelper extends SQLiteOpenHelper {

public static final String TABLE_ITEMS = "items";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_ITEM = "item";
public static final String COLUMN_PRICE = "price";

private static final String DATABASE_NAME = "items_test.db";
private static final int DATABASE_VERSION = 1;

// Database creation sql statement
private static final String DATABASE_CREATE = "create table "
        + TABLE_ITEMS + "( " + COLUMN_ID
        + " integer primary key autoincrement, " + COLUMN_ITEM
        + " text not null," + COLUMN_PRICE
        +"  text not null);";

public MySQLiteHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase database) {
    database.execSQL(DATABASE_CREATE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    Log.w(MySQLiteHelper.class.getName(),
            "Upgrading database from version " + oldVersion + " to "
                    + newVersion + ", which will destroy all old data");
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_ITEMS);


    onCreate(db);
}

 }

编辑:问题是数据库最初创建时没有其中一个字段。

最佳答案

恕我直言,allColumns 不符合 MySQLiteHelper.TABLE_ITEMS 定义。在这里放置所有参与对象的声明和当前值。

还有一种可能性 - database 对象未正确初始化,目前为 null。您应该检查是否存在此类情况。

关于java - Android sqlite游标查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9665820/

相关文章:

javascript - Android + mysql + node.js + html + javascript - 有可能吗?

java - 每周在应用程序中创建一个 DynamoDB 表

java - 如何使用 java 8 lambda 表达式遍历两个流并保持计数

java - 从java应用程序连接到谷歌数据存储

android - 如何制作多搜索对话框?

android - 键盘打开时纵向模式被误解为横向

java - 设计 JSON api 时的内部对象表示

java - 程序在 Java 中初始化对象输入流时暂停

android - 无法在 Android 源文件中触发断点

android - 操作栏一直隐藏