无法从sqlite获取多个表数据

时间:2016-12-12 14:21:35

标签: android database sqlite

我的数据库中有三个表我希望显示所有表中的记录,但它在所有行中提供相同的数据,但我在所有表中输入了不同的数据。这是代码。当我显示数据时,它给出了我在最后一张表中输入的相同记录。我想从每个表中调用随机数据。结果在我使用Random() limit 1时提供单个数据。但不是从所有表中给出。 它提供的数据与我在第三行输入的数据相同。我想从三个表中获取单个记录表。

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



        }


    }

2 个答案:

答案 0 :(得分:0)

尝试:

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

答案 1 :(得分: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());
}