3

我正在编写一个涉及汽车和零件的 Android 应用程序。

我想要做的是提供数据库中所有部件的 ListView,不包括已经分配给特定汽车的部件。

我可以通过以下查询获得我想要的结果,其中包含 EXCEPT 语句。

SELECT DISTINCT Parts._id, Parts.PartNumber, Parts.PartName,  Parts.MFG, Parts.Barcode, Parts.Notes, Parts.Photo
FROM Parts
JOIN CarsToParts
WHERE CarsToParts.CarID != carID
EXCEPT
SELECT DISTINCT Parts._id, Parts.PartNumber, Parts.PartName,  Parts.MFG, Parts.Barcode, Parts.Notes, Parts.Photo
FROM Parts
JOIN CarsToParts
WHERE CarsToParts.CarID = carID AND CarsToParts.PartID = Parts._id

我遇到的问题是我得到了一个光标结果,其中包括表名作为键名的一部分,如下所示:

I/System.out: >>>>> Dumping cursor 
android.database.sqlite.SQLiteCursor@39719c0
I/System.out: 0 {
I/System.out:    Parts._id=21
I/System.out:    Parts.Photo=<unprintable>
I/System.out:    Parts.PartName=Oil Filter
I/System.out:    Parts.PartNumber=116 354 733
I/System.out:    Parts.MFG=Mercedes Benz
I/System.out:    Parts.Barcode=254485880
I/System.out:    Parts.Notes=
I/System.out: }
I/System.out: <<<<<

当我尝试将此发送到 CursorAdapter 时,它会窒息。

CarsToParts 表具有以下列:

_id
CarID
PartID

CarsToParts 表允许我将相同的零件映射到两辆不同的汽车,这通常是来自同一制造商的汽车的可能性。

有没有办法让 SQLite 不包括表名作为光标输出中键名的一部分?

编辑: 经过进一步调查,我发现 CursorAdapter 需要存在_id列。如果我能让 SQLite 不将表名包含在键名中,那就是这样。

4

1 回答 1

1

查询返回的列名是未指定的,除非您使用 AS:

SELECT DISTINCT Parts._id AS _id, Parts.PartNumber AS PartNumber, ...
于 2018-02-27T17:55:08.410 回答