SQLite 从多个表中选择全部并从游标中读取

SQLite selecting all from multiple tables and reading from cursor

我有一个查询从不同的 tables

检索数据
select * from customer c, order o where c.id = o.pID 

两个 table 都有一列 'date_created',我想从订单 table

中检索 date_created

我试过 Cursor c = db.execute(sql); String dateCreated = c.getString("date_created") 返回客户日期而不是订单日期。当我尝试 c.getString("o.date_created") 我的应用程序崩溃并且 returns “E/SQLiteCursor: 请求列名称 table 名称 -- o.date_created java.lang.Exception

谁能指导我如何获得订单 date_created? 我

这个怎么样:

select *, c.date_created as customer_date_created, o.date_created as order_date_created from customer c, order o where c.id = o.pID

然后只需使用:

c.getString("order_date_created");

您可以使用别名来区分列名,如下所示:

select c.date_created as cust_date, o.date_created as order_date from customer c, order o where c.id = o.pID 

然后尝试:

c.getString("order_date");

您的查询结果集包含 2 个同名列,因此当您尝试按名称 date_created 检索列时,您无法确定得到的是哪一个。
这就是为什么您必须为所有具有相同名称的列使用别名的原因:

select c.column1, c.column2, c.date_created as cust_date_created, .....
       o.column1, o.column2, o.date_created as ord_date_created, ....
from customer c inner join [order] o 
on c.id = o.pID  

您可以在结果中省略不需要的列。
还要使用正确的连接语法。

现在您可以通过以下方式获取列的值:

String dateCreated = c.getString(c.getColumnIndex("ord_date_created"))