2016-11-21 116 views
0

(用什么我迄今制定出更新的注意问题) 我写的是具有由下记录位置的应用程序:SELECT DISTINCT不工作的Android SQLite的

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"}; 

但只是给我一个错误。

,所以我改变它回到了一部开拓创新,并修改查询,如下所示:

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); 

任何想法?

更新:所以我已经在附加的图像中尝试以下,所以我越来越接近解决方案,但不是那里。仍然需要帮助来解决这个问题。

enter image description here

+0

什么错误它给你? – JMRboosties

+0

就当我运行它,我得到:“不幸的是,APPNAME已停止OK” – timv

+0

哈你的声音新的,那好吧,我会解释。我假设你正在使用Android Studio。当手机连接到编译代码的计算机时,可以单击Android Studio程序底部的Android监视器选项卡。寻找来自您的应用的错误日志(最有可能的红色文本)。这会给你一些关于什么崩溃和哪里(指向导致崩溃的确切代码行)的细节。与我们分享这里,我们可以帮助你弄清楚。 – JMRboosties

回答

0

已解决!

所以SQLiteQueryBuilder方法返回一个光标不允许布尔参数直接。

但是在阅读课堂笔记后,我注意到了方法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; 
} 
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 
+0

Hi Karakuri。有趣的是“0 _id”起作用,“_id”和“0”,“_id”这两个选项都会导致SQLite错误。我会更新这个问题,以更好地反映我的问题以及迄今为止所做的工作。谢谢你的帮助。 – timv

+0

@timv我不明白这是怎么可能的,字面上应该会产生一个语法错误,就像堆栈跟踪中曾经是你问题一部分的错误一样。 – Karakuri

+0

仍处于源码一个新手,所以原谅我的无知。我知道你的权利,但我不认为你有我的修改问题的想法? – timv