android sqlite 随机,从SQLite数据库Android获得随机行Android SDK

作者在StackOverflow上寻求帮助,遇到了在Android SQLite数据库中使用`query()`方法的问题。他们试图通过`mainTableOrderBYRANDOM()LIMIT1`查询随机一行但遇到错误。文章探讨了如何在给定的DatabaseAdapter代码基础上修复或替换查询方法,以适应数据库操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我发现了几个问题和答案在这里StackOverflow上哪说我应该使用这样的:

Cursor cursor = this.db.query("mainTable Order BY RANDOM() LIMIT 1",

new String[] { "*" }, null, null, null, null, null);

不过,我觉得我有某种其他的数据库,因为它返回一个错误,不知道的方法“查询” 。

这是数据库的代码,我使用:

package com.example.database;

import android.content.ContentValues;

import android.content.Context;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

import android.util.Log;

public class DBAdapter{

private static final String TAG = "DBAdapter";

public static final String KEY_ROWID = "_id";

public static final int COL_ROWID = 0;

public static final String KEY_PIC = "picture";

public static final String KEY_ANS = "answer";

public static final int COL_PIC = 1;

public static final int COL_ANS = 2;

public static final String[] ALL_KEYS = new String[] {KEY_ROWID, KEY_PIC, KEY_ANS};

public static final String DATABASE_NAME = "MyDb";

public static final String DATABASE_TABLE = "mainTable";

public static final int DATABASE_VERSION = 2;

private static final String DATABASE_CREATE_SQL =

"create table " + DATABASE_TABLE

+ " (" + KEY_ROWID + " integer primary key autoincrement, "

+ KEY_PIC + " integer not null, "

+ KEY_ANS + " text not null"

+ ");";

private final Context context;

private DatabaseHelper myDBHelper;

private SQLiteDatabase db;

public GevaarherkenningDBHelper(Context ctx) {

this.context = ctx;

myDBHelper = new DatabaseHelper(context);

}

public GevaarherkenningDBHelper open() {

db = myDBHelper.getWritableDatabase();

return this;

}

public void close() {

myDBHelper.close();

}

public long insertRow(int pic, String answer) {

ContentValues initialValues = new ContentValues();

initialValues.put(KEY_PIC, pic);

initialValues.put(KEY_ANS, answer);

return db.insert(DATABASE_TABLE, null, initialValues);

}

public boolean deleteRow(long rowId) {

String where = KEY_ROWID + "=" + rowId;

return db.delete(DATABASE_TABLE, where, null) != 0;

}

public void deleteAll() {

Cursor c = getAllRows();

long rowId = c.getColumnIndexOrThrow(KEY_ROWID);

if (c.moveToFirst()) {

do {

deleteRow(c.getLong((int) rowId));

} while (c.moveToNext());

}

c.close();

}

public Cursor getAllRows() {

String where = null;

Cursor c = db.query(true, DATABASE_TABLE, ALL_KEYS,

where, null, null, null, null, null);

if (c != null) {

c.moveToFirst();

}

return c;

}

public Cursor getRow(long rowId) {

String where = KEY_ROWID + "=" + rowId;

Cursor c = db.query(true, DATABASE_TABLE, ALL_KEYS,

where, null, null, null, null, null);

if (c != null) {

c.moveToFirst();

}

return c;

}

public Cursor getRowRandom(String rowId) {

Cursor c = db.query(true, DATABASE_TABLE, ALL_KEYS,

null, null, null, null, "RANDOM()", "1");

if (c != null) {

c.moveToFirst();

}

return c;

}

public boolean updateRow(long rowId, int pic, String answer) {

String where = KEY_ROWID + "=" + rowId;

ContentValues newValues = new ContentValues();

newValues.put(KEY_PIC, pic);

newValues.put(KEY_ANS, answer);

return db.update(DATABASE_TABLE, newValues, where, null) != 0;

}

private static class DatabaseHelper extends SQLiteOpenHelper

{

DatabaseHelper(Context context) {

super(context, DATABASE_NAME, null, DATABASE_VERSION);

}

@Override

public void onCreate(SQLiteDatabase _db) {

_db.execSQL(DATABASE_CREATE_SQL);

}

@Override

public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) {

Log.w(TAG, "Upgrading application's database from version " + oldVersion

+ " to " + newVersion + ", which will destroy all old data!");

_db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);

onCreate(_db);

}

}

}

有没有一种方法,我可以实现“query'法在此数据库类,如果是这样,如何?还是有人建议使用其他数据库代码?

编辑:

我可能还没有问正确的问题在这里...我的问题是,使用任何在该点的答案给出的方法,如

db.rawQuery("SELECT * FROM mainTable ORDER BY RANDOM() LIMIT 1", null);

返回错误,它是未定义的。

那么我需要在数据库适配器代码中更改以正确使用此代码?

2014-03-01

Thijs93H

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值