Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从活动中的getAll()方法获取数据_Java_Android_Sqlite - Fatal编程技术网

Java 如何从活动中的getAll()方法获取数据

Java 如何从活动中的getAll()方法获取数据,java,android,sqlite,Java,Android,Sqlite,数据库结构: 详细信息表格 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 记录表格 rid name 1 Beta 2

数据库结构:

详细信息表格

 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
记录表格

 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
我已经基于
rid
conrid
,编写了一个从两个表(详细信息和记录)中获取所有数据的方法
代码如下:

String select = "SELECT rname FROM " + TABLE_RECORD+ " where conrid =" +detail.getId();      
让我们试试这个

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

似乎你在一个循环中被关闭了,在这个循环中你靠着你的尾巴…
因此,我将把您的代码与@MD提供的答案混合在一起

我相信他不会觉得很糟糕

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

使用该选项代替
详细信息
记录

// 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;
}
//从明细表和记录表中获取所有数据
公共列表getAll()
{
List listRecDet=new ArrayList();
//选择所有查询
字符串选择查询=
从详细信息内部联接记录中选择Details.name、Record.rname+
“ON Record.conrid=Detail.rid”;
SQLiteDatabase db=this.getWritableDatabase();
Cursor Cursor=db.rawQuery(selectQuery,null);
//循环遍历所有行并添加到列表
if(cursor!=null&&cursor.moveToFirst())
{
做
{
RecDet RecDet=新的RecDet();
recdet.setName(cursor.getString(cursor.getColumnIndex(“name”)));
recdet.setRname(cursor.getString(cursor.getColumnIndex(“rname”));
listRecDet.add(recdet);
}while(cursor.moveToNext());
}
返回listRecDet;
}

尝试选择Details.name,Record.rname from Detail internal JOIN Record ON Record.conrid=Detail.rid注意不要在主线程中执行此操作。这些方法IMHO也应该在一个单独的类中。您应该将GUI与业务逻辑分开。因此,在你的活动中使用这种方法已经不是一个好主意。还有那些方法名称。。。使用更详细的名称,这将使您的代码更具可读性。我不知道为什么@MD删除了他的答案,因为它是正确的(取消删除!)。如何检索数据?与使用“非联接”查询的方式非常相同。只需跳过第一个查询。用提供的@MD“JOIN”查询替换第二个查询(希望取消删除您的答案!)。完成。关于SQLite连接的更多信息:@MD是的,但是。。。好答案仍然是好答案。不值得删除它。或者是吗?@Sophie这是
SQL
命令您必须使用
光标执行它。一旦运行查询,就会得到一个游标。例如,如果查询的是单个表。只需使用光标。完成了@苏菲,请你努力一点。我们不能用勺子喂你@苏菲这种行为被称为“帮助吸血鬼”。如果您知道如何将数据从表中提取到光标,这其实是一样的。@FrankN.Stein这就是我删除我的答案的原因。
我想提供帮助,但没有时间给出所有的代码。.非常感谢您,今天我了解了如何在SQLite中使用多个联接。。。那真是太容易了!多个联接将帮助您联接两个以上的表。“典型”用法:以
多对多关系连接3个表。是的,很简单。现在,您应该加深对RDBMS的了解。