数据库不检索所有行,而只获取唯一行

时间:2014-08-15 19:08:31

标签: android sqlite

我正在编写一个代码片段,我将我的json编码数据存储到txt文件中,并使用以下方法分离所有部分并将它们添加到数据库中。

public boolean addAnswersFromJSONArray() {
    boolean flag = false;

    Answer answer = new Answer();
    File sdcard = Environment.getExternalStorageDirectory();
    File file = new File(sdcard, "user_live.txt");

    FileReader fr;
    JsonReader reader;

    try {
        fr = new FileReader(file);
        reader = new JsonReader(fr);
        reader.beginArray();
        reader.setLenient(true);

        while (reader.hasNext()) {
            reader.beginObject();
            while (reader.hasNext()) {
                String name = reader.nextName();

                if (name.equals("product_name")) {
                    answer.setProductName(reader.nextString());
                } else if (name.equals("subject")) {
                    answer.setSubject(reader.nextString());
                } else if (name.equals("month")) {
                    answer.setMonth(reader.nextString());
                } else if (name.equals("year")) {
                    answer.setYear(reader.nextString());
                } else if (name.equals("question")) {
                    answer.setQuestion(reader.nextString());
                } else if (name.equals("answer")) {
                    answer.setAnswer(reader.nextString());
                } else if (name.equals("question_no")) {
                    answer.setQuestion_no(reader.nextString());
                } else if (name.equals("marks")) {
                    answer.setMarks(reader.nextString());
                } else {
                    reader.skipValue();
                }
            }

            answer.save(db);
            reader.endObject();
            flag = true;
        }

        reader.endArray();
        reader.close();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        file.delete();
        db.close();
    }
    return flag;
}  

然后我检索每个字段的部门,主题,月份和年份,问题,答案,question_no,但在检索标记时,我只获得10和5的唯一条目....理想情况下,一组的大小是18所以我得到ArrayIndexoutOfBounds Exception。

  //database calling part 
  marks = db.getMarksList(department, subject, month_year);

数据库方法是,

  public String[] getMarksList(String department, String subject,
        String month_year) {
    String month = month_year.split("-")[0];
    String year = month_year.split("-")[1];
    String whereClause = DEPARTMENT + " = '" + department + "'" + " AND "
            + SUBJECT + " = '" + subject + "' AND " + MONTH + " = '"
            + month + "' AND " + YEAR + " = '" + year + "'";
    System.out.println("questions: " + whereClause);
    Cursor cursor = db.query(true, "ANSWERS", new String[] { "MARKS" },
            whereClause, null, null, null, "DEPARTMENT", null);
    String list[] = new String[cursor.getCount()];
    int i = 0;
    if (cursor != null && cursor.getCount() > 0) {
        for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor
                .moveToNext()) {
            list[i] = new String(cursor.getString(0));
            i++;
        }
    }
    return list;
}

任何人都可以帮我解决这个问题吗?为什么只获取唯一值,我已经检查了我的json结果,每行也包含标记。

1 个答案:

答案 0 :(得分:0)

我得到了解决方案, 更改了数据库查询和方法,如下所示,

  public List<Answer> getMarksList(String department, String subject,
        String month_year) {
    List<Answer> list = new ArrayList<Answer>();
    String month = month_year.split("-")[0];
    String year = month_year.split("-")[1];
    try {
        String sql1 = "select all marks from " + TABLE_NAME
                + " where department = '" + department
                + "' AND subject = '" + subject + "' AND month = '" + month
                + "' AND year = '" + year + "';";
        SQLiteDatabase db1 = this.getWritableDatabase();
        Cursor cursor = db1.rawQuery(sql1, null);
        if (cursor.moveToFirst()) {
            do {
                Answer a = new Answer();
                a.setMarks(cursor.getString(0));
                list.add(a);
            } while (cursor.moveToNext());
        }
    } catch (Exception e) {
    }
    return list;
}

在查询中使用“all”检索所有记录。