我正在从数据库中检索数据,并希望以Map的形式将其返回给调用函数。
但我面临的问题是form_dtl数组中的值被最后一个值覆盖。
DB结构如下: -
base_mainid form_id form_link form_name
1 1 .//*[@id='collapse-text-dynamic-form-number WC1
1 2 .//*[@id='collapse-text-dynamic-form-number WC3
1 3 .//*[@id='collapse-text-dynamic-form-number WC6
1 4 .//*[@id='collapse-text-dynamic-form-number WC15
如何解决这个问题?
public static Map formXPath(int formid)
{
int form_id = -1;
Statement s3 = null;
String[] form_dtl = new String[2];
try {
s3 = con.createStatement();
String query = "SELECT form_id,form_link,form_name FROM form_details where base_mainid = " + formid;
ResultSet rs2 = s3.executeQuery(query);
while (rs2.next()) {
form_id = rs2.getInt(1);
form_dtl[0] = rs2.getString(2);
form_dtl[1] = rs2.getString(3);
// System.out.println("ID : "+formid+" Name : "+form_dtl[2]);
form.put(form_id, form_dtl);
}
return form;
答案 0 :(得分:0)
尝试这种方式,在循环中实现您的form_dtl
数组,以便在每次迭代时都有一个新数组。如果没有,您总是使用相同的值,并且值会被覆盖。
public static Map<Integer, String[]> formXPath(int formid) {
Map<Integer, String[]> form = new HashMap<>();
int form_id = -1;
Statement s3 = null;
String[] form_dtl;
try {
s3 = con.createStatement();
String query = "SELECT form_id,form_link,form_name FROM form_details where base_mainid = " + formid;
ResultSet rs2 = s3.executeQuery(query);
while (rs2.next()) {
// instanciate here
form_dtl = new String[2];
form_id = rs2.getInt(1);
form_dtl[0] = rs2.getString(2);
form_dtl[1] = rs2.getString(3);
form.put(form_id, form_dtl);
}
} catch(Exception e) { /* Handle exception here */ }
return form;
}
答案 1 :(得分:0)
您的值被覆盖,因为您将信息保存在while循环中的每个步骤的相同位置。
while (rs2.next()) {
form_id = rs2.getInt(1);
form_dtl[0] = rs2.getString(2);
form_dtl[1] = rs2.getString(3);
form.put(form_id, form_dtl);
}
每次执行循环(在这种情况下使用DB内容,四次)时,都会覆盖form_dtl中的值。