SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("select *,t1.mysql_sys_id AS surveyid" +
",t1.status AS activestatus" +
",t2.survey_id AS questiosurveyid" +
",t2.mysql_sys_id AS questiosysid" +
",t3.mysql_sys_id AS answerid" +
",t3.question_id AS answerquestionid" +
",t3.survey_id AS answersurveyid" +
",t4.survey_id AS dependendsurveyid" +
",t4.question_id AS dependendquestionid" +
",t4.answer_id AS dependendanswerid" +
",t4.survey_id AS nestsurveyid" +
",t4.question_id AS nestquestionid" +
" from " +
"survey_tbl AS t1 LEFT JOIN " +
"question_tbl AS t2 ON t1.mysql_sys_id = t2.survey_id LEFT JOIN " +
"answer_tbl AS t3 ON t1.mysql_sys_id = t3.survey_id AND t2.sys_id = t3.question_id LEFT JOIN " +
"dependent_question_tbl AS t4 ON t1.mysql_sys_id = t4.survey_id AND t2.mysql_sys_id = t4.question_id AND t3.sys_id = t4.answer_id LEFT JOIN " +
"nest_question_tbl AS t5 ON t1.mysql_sys_id = t4.survey_id AND t2.mysql_sys_id = t5.question_id WHERE" +
" t1.status = 'active' AND " +
"t1.mysql_sys_id = " + id + " ", null);
res.moveToFirst();
JSONObject jj = new JSONObject();
JSONArray survey = new JSONArray();
JSONArray question = new JSONArray();
JSONArray answer = new JSONArray();
JSONArray dependent = new JSONArray();
JSONArray nest = new JSONArray();
JSONObject j = new JSONObject();
Set < String > questionCodes = new HashSet < String > ();
Set < String > depquestionCodes = new HashSet < String > ();
Set < String > nestquestionCodes = new HashSet < String > ();
while (res.isAfterLast() == false) {
JSONObject k = new JSONObject();
JSONObject l = new JSONObject();
JSONObject m = new JSONObject();
JSONObject n = new JSONObject();
j.put("surveyid", res.getString(res.getColumnIndex("surveyid")));
j.put("surveynum", res.getString(res.getColumnIndex("survey_num")));
j.put("surveytitle", res.getString(res.getColumnIndex("survey_title")));
j.put("surveydescription", res.getString(res.getColumnIndex("survey_description")));
j.put("startdate", res.getString(res.getColumnIndex("start_date")));
j.put("enddate", res.getString(res.getColumnIndex("end_date")));
j.put("status", res.getString(res.getColumnIndex("activestatus")));
String questionCode = res.getString(res.getColumnIndex("questiosysid"));
if (questionCodes.contains(questionCode)) {
continue;
} else {
k.put("mysqlsysid", res.getString(res.getColumnIndex("questiosysid")));
k.put("questiondisplaynum", res.getString(res.getColumnIndex("question_display_order")));
k.put("questiosysid", res.getString(res.getColumnIndex("questiosysid")));
k.put("questionorder", res.getString(res.getColumnIndex("question_order")));
k.put("questioncategory", res.getString(res.getColumnIndex("question_category")));
k.put("question", res.getString(res.getColumnIndex("question")));
k.put("status", res.getString(res.getColumnIndex("activestatus")));
question.put(k);
}
l.put("displaynum", res.getString(res.getColumnIndex("input_display_order")));
l.put("answerid", res.getString(res.getColumnIndex("answerid")));
l.put("surveyid", res.getString(res.getColumnIndex("answersurveyid")));
l.put("questionid", res.getString(res.getColumnIndex("answerquestionid")));
l.put("inputtype", res.getString(res.getColumnIndex("input_type")));
l.put("inputname", res.getString(res.getColumnIndex("input_name")));
l.put("inputname", res.getString(res.getColumnIndex("input_other")));
l.put("status", res.getString(res.getColumnIndex("activestatus")));
String depquestionCode = res.getString(res.getColumnIndex("mysql_sys_id"));
if (depquestionCodes.contains(depquestionCode)) {
continue;
} else {
m.put("mysqlsysid", res.getString(res.getColumnIndex("mysql_sys_id")));
m.put("surveyid", res.getString(res.getColumnIndex("dependendsurveyid")));
m.put("questionid", res.getString(res.getColumnIndex("dependendquestionid")));
m.put("referralid", res.getString(res.getColumnIndex("referral_id")));
m.put("answerid", res.getString(res.getColumnIndex("dependendanswerid")));
m.put("status", res.getString(res.getColumnIndex("activestatus")));
dependent.put(m);
}
String nestquestionCode = res.getString(res.getColumnIndex("mysql_sys_id"));
if (nestquestionCodes.contains(nestquestionCode)) {
continue;
} else {
n.put("mysqlsysid", res.getString(res.getColumnIndex("mysql_sys_id")));
n.put("surveyid", res.getString(res.getColumnIndex("nestsurveyid")));
n.put("questionid", res.getString(res.getColumnIndex("nestquestionid")));
n.put("referralid", res.getString(res.getColumnIndex("referral_id")));
n.put("answerid", res.getString(res.getColumnIndex("answer_id")));
n.put("status", res.getString(res.getColumnIndex("activestatus")));
nest.put(n);
}
answer.put(l);
res.moveToNext();
}
survey.put(j);
jj.put("answer", answer);
jj.put("question", question);
jj.put("dependent", dependent);
jj.put("nest", nest);
jj.put("survey", survey);
finalmyArray.put(jj);
&#13;
我正在使用LEFT JOIN
选择多个表格。在上面的例子中,我为每个问题获得了额外的价值,因为我有多个答案。
情境:
在我的问题表中,我有1个条目。 在我的答案表中,我有3个条目。
由于答案表的迭代,问题对象将有3个条目。
目标
我想要实现的是问题对象只包含1个条目,因为在数据库中只有1个。并且对于包含3个条目的答案对象,因为在数据库中有3个。
假设:我认为这是由答案表上的迭代引起的。
我尝试在while循环中进行检查,但它无效。
答案 0 :(得分:0)
使用这种方法非常容易。只需在此方法中传递游标,方法返回JSONArray。
public static JSONArray CreateJsonRecords(Cursor cursor)
throws JSONException {
JSONArray jsonArry = null;
if (cursor != null && cursor.getCount() > 0) {
cursor.moveToFirst();
jsonArry = new JSONArray();
do {
JSONObject jsonObject = new JSONObject();
for (int k = 0; k < cursor.getColumnCount(); k++) {
jsonObject
.put(cursor.getColumnName(k), cursor.getString(k));
}
jsonArry.put(jsonObject);
} while (cursor.moveToNext());
}
cursor.close();
return jsonArry;
}
在这个方法中,您必须创建jsonArray,就像数据库字段名一样JsonObject Key.so如果您想使用我的方法,那么它必须与数据库字段名称相同,与jsonobject键名相同。