0

我在一个 android 项目的 sqlite 数据库中有两个表(dic,learnDataTable)。在 learDataTable 中只有 5 行。我的目标是从 dic 表中获取 5 个随机数据,并用这些获取的数据更新 learnDataTable 的 5 行。N:B: dic 和 learnDataTable 的结构类似,它们有两个字段,分别是字符串类型的单词和字符串类型的含义。我试过这样。

 // fetch 5 random data from dic table
 String sql ="SELECT  * FROM dic ORDER BY RANDOM() LIMIT 5" ;

         Cursor mCur = mDb.rawQuery(sql, null);
         if (mCur!=null)
         {
            mCur.moveToNext();
         }

         //now update learnDataTable
         for (int i = 0; i < mCur.getCount(); i++) 
        {
             mCur.moveToPosition(i);

               String word = mCur.getString(0).toString();
               String meaning = mCur.getString(1).toString();

               String sql2 ="update learnDataTable set english='"+word+"',bangla='"+meaning+"'";
                 mDb.execSQL(sql2);               

        }

但我知道它每次都会更新所有行。我的目标是用 dic 表中的 5 个随机数据更新 learnDataTable。我怎样才能做到这一点???

4

2 回答 2

1

检查这个:

 //Clears learnDataTable:
 mDb.execSQL("DELETE FROM learnDataTable");
 //Insert 5 random rows from dic:
 mDb.execSQL("INSERT INTO learnDataTable (english, bangla) SELECT english ,bangla FROM dic ORDER BY RANDOM() LIMIT 5");

快速简单!

于 2013-10-29T09:34:00.003 回答
0

还要从您的 dic 表中选择唯一的rowid ,因为它在更新语句中是需要的。

// fetch 5 random data from dic table
String sql = "SELECT rowid, english ,bangla "
            + "FROM dic ORDER BY RANDOM() LIMIT 5";

    ...

    // now update learnDataTable
    for (int i = 0; i < mCur.getCount(); i++) {
        mCur.moveToPosition(i);

        int id = mCur.getInt(0);
        String word = mCur.getString(1);
        String meaning = mCur.getString(2);

        String sql2 = "update learnDataTable set english='" + word
                + "',bangla='" + meaning + "'" + " WHERE rowid = " + id;
        mDb.execSQL(sql2);

    }
于 2013-10-29T05:46:26.217 回答