【问题标题】:Retrieving values from DB and returning it to calling method从数据库中检索值并将其返回给调用方法
【发布时间】:2018-02-13 11:40:59
【问题描述】:

我正在从数据库中检索数据,并希望将其以 Map 的形式返回给调用函数。

但我在这里面临的问题是 form_dtl 数组中的值被最后一个值覆盖。

数据库结构如下:-

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;

【问题讨论】:

    标签: java sql-server database hashmap


    【解决方案1】:

    尝试这种方式,在循环内实例化您的 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;
    }
    

    【讨论】:

      【解决方案2】:

      您的值被覆盖,因为您将信息保存在 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 中的值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-24
        • 2017-04-03
        • 2017-02-07
        • 1970-01-01
        • 2020-02-02
        相关资源
        最近更新 更多