(注意问题已根据我目前的工作进行了更新) 我正在编写一个应用程序,其位置记录如下:
id(primary), state, region, area, latitude, longitude
我可以在屏幕上获取所有数据,但我只想列出状态,只列出状态而不是任何其他数据。每个唯一条目也只有一个条目。即新南威尔士州1新南威尔士州不是全部99个。然后,用户将选择他们所居住的所需状态,然后它将显示该状态的新数据表。 (按州我的意思是NSW,VIC,QLD等)
班级' Dataprovider和recyclerview类也可以正常工作,所以我会保留代码,除非有人想看到它。
这是有问题的数据库类。
public class MyDatabase extends SQLiteAssetHelper {
private static final String DATABASE_NAME = "ReefData.db";
private static final int DATABASE_VERSION = 1;
public MyDatabase(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
setForcedUpgrade();
}
public Cursor getData(){
SQLiteDatabase db = getReadableDatabase();
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
String [] sqlSelect = {"0 _id", "state", "area", "region", "latitude", "longitude"};
String sqlTables = "Reefs";
qb.setTables(sqlTables);
Cursor c = qb.query(db, sqlSelect, null, null, null, null, null);
c.moveToFirst();
return c;
}}
所以我的第一次尝试如下:
String [] sqlSelect = {"0 _id", "state=DISTINCT", "area", "region", "latitude", "longitude"};
但这只是给我一个错误。
所以我把它改回了orignal并按如下方式修改了查询:
String [] sqlSelect = {"0 _id", "state", "area", "region", "latitude", "longitude"};
Cursor c = qb.query(db, sqlSelect, "state= 'TAS'", null, null, null, null);
现在这只适用于TAS数据。我甚至可以用
修改它Cursor c = qb.query(db, sqlSelect, "state= 'TAS' and region='Flinders Island'", null, null, null, null);
并且效果很好。
但是,我怎样才能得到一个只有状态的列表,每个只有一个。我会考虑做以下事情,但它不起作用:
Cursor c = qb.query(db, sqlSelect, "state = DISTINCT", null, null, null, null);
有什么想法吗?
更新:所以我在附图中尝试了以下内容,因此我越来越接近解决方案,但并不完全在那里。仍然需要帮助来解决这个问题。
答案 0 :(得分:0)
此行中有一个错误的0
:
String [] sqlSelect = {"0 _id", "state", "area", "region", "latitude", "longitude"};`
^here
我怀疑你不打算选择文字值,所以你应该删除它:
String [] sqlSelect = {"_id", "state", "area", "region", "latitude", "longitude"};`
如果你 打算选择文字值,那么你需要用逗号分隔它:
String [] sqlSelect = {"0", "_id", "state", "area", "region", "latitude", "longitude"};`
^here
答案 1 :(得分:0)
<强>解决!强>
返回游标的SQLiteQueryBuilder方法不允许直接使用 Boolean 参数。
然而,在阅读课堂笔记后,我注意到方法 setDistinct 并将其应用于SQLiteQueryBuilder。
现在它起作用了,每个州只给我一个独特的条目,就像我想要做的那样。我确实需要删除其他列并只关注状态,但那是与此问题无关的另一个问题/解决方案。我只想说我必须只关注列状态并将 setDistinct 应用于该列,以获得所需的结果。
继承完成的代码:
public Cursor getData(){
SQLiteDatabase db = getReadableDatabase();
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
String [] sqlSelect = {"0 _id", "state"};
String sqlTables = "Reefs";
qb.setTables(sqlTables);
qb.setDistinct(true);
Cursor c = qb.query(db, sqlSelect, null, null, null, null, null);
c.moveToFirst();
return c;
}