2015-11-03 57 views
1

数据库结构:如何获得活动中的数据从GETALL()方法

详细

rid  name 
    1  Beta 
    2  Release 

记录

recid  rname conrid (conrid is rid from Detail table) 
    1  App1  1 
    2  App2  1 
    3  App3  2 
    4  App4  1 

我写了一个方法,根据ridconrid获取来自两个表(Detail和Record)的所有数据。
下面是代码:

String select = "SELECT rname FROM " + TABLE_RECORD+ " where conrid =" +detail.getId();  
+0

尝试'从详细内心的选择Details.name,Record.rname JOIN记录上记录.conrid = Detail.rid' –

+0

注意,你不应该在主线程中执行此操作。另外这样的方法恕我直言应该在一个单独的类。您应该将GUI与业务逻辑分开。所以在你的Activity中使用这种方法已经不是一个好主意。还有那些方法名称......使用更详细的名称,它会使您的代码更具可读性。 – m0skit0

+0

@Sophie当我的眼睛流血时,我无法帮助您解决您的问题。祝你好运。 – m0skit0

回答

2

看来你在一个循环,你byting你的尾巴是关闭...
因此,我将混合将您的代码与@MD提供的答案结合在一起。

我相信他并没有把它弄坏。 ;)

您将需要添加一个名为RecDet的类(包含Detail中的Name字段和Record中的RName)。

使用那个代替DetailRecord

// to get all data from Detail and Record tables 
public List<RecDet> getAll() 
{ 
    List<RecDet> listRecDet = new ArrayList<RecDet>(); 

    // Select All Query 
    String selectQuery = 
     "SELECT Details.name, Record.rname FROM Detail INNER JOIN Record " + 
     "ON Record.conrid = Detail.rid"; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    // looping through all rows and adding to list 
    if (cursor != null && cursor.moveToFirst()) 
    { 
     do 
     { 
      RecDet recdet = new RecDet(); 
      recdet.setName(cursor.getString(cursor.getColumnIndex("name"))); 
      recdet.setRname(cursor.getString(cursor.getColumnIndex("rname"))); 
      listRecDet.add(recdet); 
     } while (cursor.moveToNext()); 
    } 
    return listRecDet; 
} 
+1

非常感谢你,今天我得到了如何使用SQLite中的多个连接。真的太容易了! – Sophie

+0

多JOINS将帮助您加入2个以上的表格。 “典型”用法:以“多对多”关系连接3个表格。是的,这很容易。现在您应该加深对RDBMS的了解。 –

1

让我们试试这个

select Details.name,Record.rname from Detail INNER JOIN Record ON Record.conrid=Detail.rid 
+0

在我的代码中,我必须尝试这个? – Sophie

+0

@Sophie这是'SQL'命令,你必须用'Cursor'执行它# –

+0

@Sophie。一旦你运行查询,你会得到一个Cursor。就像你查询单个表一样。只需使用光标。 DONE! –