2016-12-12 5 views
0

Ich habe drei Tabellen in meiner Datenbank Ich möchte Datensatz aus allen Tabellen anzeigen, aber es gibt die gleichen Daten in allen Zeilen, aber ich habe verschiedene Daten in allen Tabellen eingegeben. Hier ist der Code. Wann immer ich die Daten zeige, gibt es den gleichen Datensatz, den ich in der letzten Tabelle eingegeben habe. Ich möchte zufällige Daten von jeder Tabelle aufrufen. Ergebnis gibt die einzelnen Daten wie ich Random() limit 1 benutze. gibt aber nicht von allen Tischen. Es gibt dieselben Daten wie in der dritten Zeile. Ich möchte einzelne Datensätze aus allen drei Tabellen holen.nicht in der Lage, mehrere Tabellendaten von sqlite zu erhalten

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



     } 


    } 

Antwort

0

Versuchen:

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

nicht funktioniert es denselben Datensatz in der ganzen Tabelle gibt –

0

Sie sollten mehr darüber, wie der Cursor Arbeit lesen.

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

In Ihrem Fall würde ich so etwas wie diese

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); 
    } 
} 

bewusst tun sein, dass dies möglicherweise zum Absturz bringen, wenn Sie auf Ihrem Cursor nicht genügend Daten haben.

Normalerweise ist der Weg zu durchlaufen über den Cursor in einer Schleife. So etwas wie diese

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

es sagt, oder) wird –

+0

erwartet Fehler android.database.CursorIndexOutOfBoundsException bekommen: Index 1 angefordert, mit einer Größe von 1 –

+0

Es gibt Ihnen dieser Fehler, weil Sie nur einen Wert in Ihrem Cursor haben. Ich hoffe, Sie haben das LIMIT 1 nicht von der anderen Antwort benutzt, weil das bedeutet, dass Sie nur eine Antwort wollen und das ist was der Cursor enthält. – bogdanN

Verwandte Themen