我正在编写一个涉及汽车和零件的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
我遇到的问题是我得到一个Cursor结果,其中包含表名作为键名的一部分,如下所示:
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不在Cursor输出中包含表名作为键名的一部分?
修改 经过进一步调查,我发现CursorAdapter需要 _id 列。如果只有我可以让SQLite不将表名作为键名的一部分包含在内,那就是它。
答案 0 :(得分:1)
查询are unspecified返回的列名,除非您使用AS:
SELECT DISTINCT Parts._id AS _id, Parts.PartNumber AS PartNumber, ...