android+数据库备份sdk,从SQLite数据库Android SDK获取随机行

我想从我创建的数据库中获取一个随机行,但我无法弄清楚如何做到这一点.

我在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);

返回未定义的错误.

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值