2013-02-27 10 views
0

У меня есть пробная база данных, импортированная в активы, она предварительно заполнена. Он имеет 6 столбцов: _ID, QUESTION, ANSWER, OPTION1, OPTION2, OPTION3, и у меня есть 10 строк. Я делаю что-то вроде викторины. Я хочу, чтобы открыть активность викторины, чтобы прочитать одну случайную строку, и после этого для кнопки setText to 4 я создал, button1 = ANSWER, button2 = OPTION1, button3 = OPTION2, button = OPTION3, снова случайным образом. Я знаю, как установить текст на кнопку и все, я просто хочу знать, как делать все чтение из db. У меня есть DataBaseHelper класса, где я импортирован база данных:Как получить одну случайную строку из SQLIte prepulated db

package rs.androidaplikacijekvizopstekulture; 

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 
import rs.androidaplikacijekvizopstekulture.Pitanja; 

public class DataBaseHelper extends SQLiteOpenHelper 
{ 
private static String TAG = "DataBaseHelper"; // Tag just for the LogCat window 
//destination path (location) of our database on device 
private static String DB_PATH = ""; 
private static String DB_NAME ="pitanja";// Database name 
private static final int DATABASE_VERSION = 1; 
private static SQLiteDatabase mDataBase; 
private final Context mContext; 
private static final String KEY_ID = "_ID"; 
private static final String KEY_PITANJE = "PITANJE"; 
private static final String KEY_ODGOVOR = "ODGOVOR"; 
private static final String KEY_OPCIJA1 = "OPCIJA1"; 
private static final String KEY_OPCIJA2 = "OPCIJA2"; 
private static final String KEY_OPCIJA3 = "OPCIJA3"; 
private static final String TABLE_NAME = "tblPitanja"; 

public DataBaseHelper(Context mojContext) 
{ 
    super(mojContext, DB_NAME, null, 1);// 1? its Database Version 
    DB_PATH = mojContext.getApplicationInfo().dataDir + "/databases/"; 
    this.mContext = mojContext; 
} 

public void createDataBase() throws IOException 
{ 
    //If database not exists copy it from the assets 

    boolean mDataBaseExist = checkDataBase(); 
    if(!mDataBaseExist) 
    { 
     this.getReadableDatabase(); 
     this.close(); 
     try 
     { 
      //Copy the database from assests 
      copyDataBase(); 
      Log.e(TAG, "createDatabase database created"); 
     } 
     catch (IOException mIOException) 
     { 
      throw new Error("ErrorCopyingDataBase"); 
     } 
    } 
} 
    //Check that the database exists here: /data/data/your package/databases/Da Name 
    private boolean checkDataBase() 
    { 
     File dbFile = new File(DB_PATH + DB_NAME); 
     //Log.v("dbFile", dbFile + " "+ dbFile.exists()); 
     return dbFile.exists(); 
    } 

    //Copy the database from assets 
    private void copyDataBase() throws IOException 
    { 
     InputStream mInput = mContext.getAssets().open(DB_NAME); 
     String outFileName = DB_PATH + DB_NAME; 
     OutputStream mOutput = new FileOutputStream(outFileName); 
     byte[] mBuffer = new byte[1024]; 
     int mLength; 
     while ((mLength = mInput.read(mBuffer))>0) 
     { 
      mOutput.write(mBuffer, 0, mLength); 
     } 
     mOutput.flush(); 
     mOutput.close(); 
     mInput.close(); 
    } 

    //Open the database, so we can query it 
    public boolean openDataBase() throws SQLException 
    { 
     String mPath = DB_PATH + DB_NAME; 
     //Log.v("mPath", mPath); 
     mDataBase = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.CREATE_IF_NECESSARY); 
     //mDataBase = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS); 
     return mDataBase != null; 
    } 

    @Override 
    public synchronized void close() 
    { 
     if(mDataBase != null) 
      mDataBase.close(); 
     super.close(); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase arg0) { 
     } 

    @Override 
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { 
     Log.w("DataBaseHelper", "Upgrading database!!!!!"); 
      onCreate(arg0); 

    } 

} 

Кроме того, я сделал класс TestAdapter, после выполнения одного из руководств в Интернете. Я действительно не знаю, нужен ли мне этот класс или нет.

package rs.androidaplikacijekvizopstekulture; 

import java.io.IOException; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.util.Log; 

public class TestAdapter 
{ 
    protected static final String TAG = "DataAdapter"; 

    private final Context mContext; 
    private SQLiteDatabase mDb; 
    private DataBaseHelper mDbHelper; 

    public TestAdapter(Context context) 
    { 
     this.mContext = context; 
     mDbHelper = new DataBaseHelper(mContext); 
    } 

    public TestAdapter createDatabase() throws SQLException 
    { 
     try 
     { 
      mDbHelper.createDataBase(); 
     } 
     catch (IOException mIOException) 
     { 
      Log.e(TAG, mIOException.toString() + " UnableToCreateDatabase"); 
      throw new Error("UnableToCreateDatabase"); 
     } 
     return this; 
    } 

    public TestAdapter open() throws SQLException 
    { 
     try 
     { 
      mDbHelper.openDataBase(); 
      mDbHelper.close(); 
      mDb = mDbHelper.getReadableDatabase(); 
     } 
     catch (SQLException mSQLException) 
     { 
      Log.e(TAG, "open >>"+ mSQLException.toString()); 
      throw mSQLException; 
     } 
     return this; 
    } 

    public void close() 
    { 
     mDbHelper.close(); 
    } 

    public Cursor getTestData() 
    { 
     try 
     { 
      String sql ="SELECT * FROM tblPitanja"; 

      Cursor mCur = mDb.rawQuery(sql, null); 
      if (mCur!=null) 
      { 
       mCur.moveToNext(); 
      } 
      return mCur; 
     } 
     catch (SQLException mSQLException) 
     { 
      Log.e(TAG, "getTestData >>"+ mSQLException.toString()); 
      throw mSQLException; 
     } 
    } 
} 

ответ

5

Чтобы сделать это, вы можете использовать RANDOM в sql-функции ex.

Строка sql = "select * from yourtable order by RANDOM() LIMIT 1";

+0

Хорошо, все было хорошо! Благодарю. – user2083882