2016-12-12 25 views
0

我在我的数据库中有三个表我想要显示所有表中的记录,但它在所有行中给出相同的数据,但我在所有表中输入了不同的数据。这是代码。当我显示数据时,它给出了我在上表中输入的相同记录。我想从每个表中调用随机数据。结果给出了我使用Random() limit 1时的单个数据。但不是从所有表格中给出。 它给出了我在第三行输入的相同数据。我想从所有三个表格中获取单个记录。无法从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

东西不灵它给所有的表 –

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

它说,或)相同的记录,预计 –

+0

收到错误android.database.CursorIndexOutOfBoundsException:指数1请求,大小为1 –

+0

它给你该错误是因为您的光标只有一个值。我希望你从另一个答案中没有使用LIMIT 1,因为这意味着你只需要一个答案,那就是光标将包含的内容。 – bogdanN