从DB中检索值并将其返回给调用方法

时间:2018-02-13 11:41:00

标签: java sql-server database hashmap

我正在从数据库中检索数据,并希望以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;

2 个答案:

答案 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中的值。