从条件查询数据库中的数据

时间:2011-02-12 19:43:10

标签: android sqlite

这是我的语言表

/*
         * initialValues in Languages( 
         * KEY_LANG_ID, 
         * KEY_LANG, \\ language name
         * KEY_ACT) \\ 0= not active, 1= active
         */
        ContentValues initialValues3 = new ContentValues();
        initialValues3.put(KEY_LANG, "English");
        initialValues3.put(KEY_ACT, "1");
        db.insert(LANGS_TABLE, null, initialValues3);
        initialValues3.put(KEY_LANG, "German");
        initialValues3.put(KEY_ACT, "1");
        db.insert(LANGS_TABLE, null, initialValues3);
        initialValues3.put(KEY_LANG, "Spain");
        initialValues3.put(KEY_ACT, "0");
        db.insert(LANGS_TABLE, null, initialValues3);
        initialValues3.put(KEY_LANG, "Italy");
        initialValues3.put(KEY_ACT, "0");
        db.insert(LANGS_TABLE, null, initialValues3);
        initialValues3.put(KEY_LANG, "China");
        initialValues3.put(KEY_ACT, "0");
        db.insert(LANGS_TABLE, null, initialValues3);

这是我的句子表

/*initialValues in Sentences(
 * KEY_SEN_ID,
 * KEY_SEN_ID_TH_SEN,
 * KEY_SEN_ID_LANG,
 * KEY_SEN,
 * KEY_SEN_READING,
 * KEY_ACT_VOL)
* */

我想在列表视图中显示句子,如果KEY_ACT = 1则句子必须从语言表中检查KEY_ACT然后在列表视图中从上面显示的句子必须只有英语和德语句子所以我尝试查询这样

public Cursor getSen_List(long id_thsen ) {
    String strTmp = "select "
        +SENS_TABLE+"."+KEY_SEN_ID+","
        +SENS_TABLE+"."+KEY_SEN_ID_TH_SEN+","
        +SENS_TABLE+"."+KEY_SEN_ID_LANG+","
        +SENS_TABLE+"."+KEY_SEN+","
        +SENS_TABLE+"."+KEY_SEN_READING+","
        +SENS_TABLE+"."+KEY_ACT_VOL+","
        +LANGS_TABLE+"."+KEY_LANG
        +" from "+SENS_TABLE+ ","+LANGS_TABLE
        +" where "+SENS_TABLE+"."+KEY_SEN_ID_TH_SEN + "=" + id_thsen+ " and " 
        +SENS_TABLE+"."+KEY_LANG_ID+"=(select "
                                    +LANGS_TABLE+"."+KEY_LANG_ID
                                    +" from "+LANGS_TABLE
                                    +" where "+LANGS_TABLE+"."+KEY_ACT+"=1)";
        return db.rawQuery(strTmp,null);
 }

但结果只显示5次相同的英语句子

有人有任何想法吗?

请帮助.....

1 个答案:

答案 0 :(得分:0)

之前我没有使用ContentValues,但看起来好像你一遍又一遍地重复使用同一个对象,你不断重新插入相同的值:

ContentValues initialValues3 = new ContentValues();
initialValues3.put(KEY_LANG, "English");
initialValues3.put(KEY_ACT, "1");
db.insert(LANGS_TABLE, null, initialValues3);
/* ok so far, initialValues3 now contains the "English" entry */
initialValues3.put(KEY_LANG, "German");
initialValues3.put(KEY_ACT, "1");
/* initialValues3 now has both the "English" entry and the "German" one */
db.insert(LANGS_TABLE, null, initialValues3);
/* the "English" entry has now been added twice, and the "German" one once */
...etc

我想你可能想在每次插入后调用initialValues3.clear()

至于查询的其余部分,您使用的是您未提供任何详细信息的KEY_SEN_ID_TH_SEN列。