我的数据库中有三个表我希望显示所有表中的记录,但它在所有行中提供相同的数据,但我在所有表中输入了不同的数据。这是代码。当我显示数据时,它给出了我在最后一张表中输入的相同记录。我想从每个表中调用随机数据。结果在我使用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);
}
}
答案 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());
}