2016-12-12 4 views
0

データベースに3つのテーブルがありますすべてのテーブルからレコードを表示したいのですが、すべてのテーブルで同じデータを表示しますが、すべてのテーブルに異なるデータを入力しています。ここにコードがあります。今まで私がデータを表示しているときは、前回のテーブルで入力したのと同じレコードを返します。私は各テーブルからランダムなデータを呼び出したいと思う。結果は私がRandom() limit 1を使用して単一のデータを与えます。すべてのテーブルからは得られません。 3行目に入力したのと同じデータを返します。私はすべての3つのテーブルを単一のレコードフォームをフェッチしたい。sqliteから複数のテーブルデータを取得できません

package com.pawanigroup.myapplication; 

import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.graphics.Typeface; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.widget.TextView; 




public class ViewPeople extends AppCompatActivity { 
    private TextView Starter; 
    private TextView MainCource; 
    private TextView Dessert; 
    private static final String SELECT_SQL= "SELECT * FROM Starter,MainCourse,Dessert ORDER BY RANDOM() LIMIT 1"; 

    private SQLiteDatabase db; 

    private Cursor c; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_view_people); 
     openDatabase(); 
     Typeface myTypeface = Typeface.createFromAsset(getAssets(), "myFont.ttf"); 
     Starter = (TextView) findViewById(R.id.Starter); 
     MainCource =(TextView) findViewById(R.id.MainCourse); 
     Dessert = (TextView) findViewById(R.id.Dessert); 
     Starter.setTypeface(myTypeface); 
     MainCource.setTypeface(myTypeface); 
     MainCource.setTypeface(myTypeface); 



     c = db.rawQuery(SELECT_SQL, null); 
     c.moveToFirst(); 

     showRecords(); 
    } 

    protected void openDatabase() { 
     db = openOrCreateDatabase("PersonDB", Context.MODE_PRIVATE, null); 
    } 

    protected void showRecords() { 
     String Starter = c.getString(1); 
     String MainCourse = c.getString(1); 
     String Desstert = c.getString(1); 
     //Starter.setText(Starter); 
     MainCource.setText(MainCourse); 
     Dessert.setText(Desstert); 



     } 


    } 

答えて

0

試してみてください。

SELECT S.*, M.*, D.* FROM Starter as S,MainCourse as M ,Dessert as D ORDER BY RANDOM() LIMIT 1 
+0

ような何かが、それは誤りandroid.database.CursorIndexOutOfBoundsExceptionを取得 –

0

あなたはカーソルがどのように機能するかについての詳細をお読みください。

c.moveToFirst();// with this you go to the first position, but you don't ever move it in your showRecords(); 

は、あなたのケースでは、私はあなたのカーソルに十分なデータを持っている場合、これがクラッシュする可能性があることに注意してください。この

showRecords(Cursor c){ 
    if(c!=null && c.moveToFirst()){ 
    String Starter = c.getString(1); 
    c.moveToNext() 
    String MainCourse = c.getString(1); 
    c.moveToNext() 
    String Desstert = c.getString(1); 
    } 
} 

ような何かをするだろう。

通常、カーソルをループ内で繰り返す方法があります。この

if(c!=null && c.moveToFirst()){ 
    do{ 
     //get data from cursor and do stuff here 
     Log.i("Cursor_data",c.getString(1)); 
    }while(c.moveToNext()); 
} 
+0

それが言う、または)で同じレコードを与える動作していない:インデックス1が要求され、それはあなたを与える1 –

+0

を期待されているすべてのテーブル –

+0

のサイズでそのエラーはカーソルに1つの値しかないためです。私はあなたがLIMIT 1を他の答えから使用しないことを願っています。これは、答えが1つだけで、それがカーソルに含まれることを意味するためです。 – bogdanN

関連する問題