如何从Resultset获取单个参数到String数组

时间:2014-11-10 12:36:02

标签: java arrays resultset

getDbTable()的代码是:

public String[][] getDbTable(String vs_name)
{
    int i = 0;
    String a[][] = new String[3600][16];
    System.out.println("datetime is" +d);
    System.out.println("datetime is" +currentDate);
    try
    {
         con = getConnection();


         String sql = "exec vcs_gauge @gauge_name=?,@first_rec_time=?,@last_rec_time=?";
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         System.out.println("date is "+df.format(currentDate));
         clstmt = con.prepareCall(sql); 
         clstmt.setString(1,"vs1_bag");

        clstmt.setString(2, "2014-09-01 10:00:00");
        clstmt.setString(3, "2014-09-01 11:00:00");

          clstmt.execute();
          rs = clstmt.getResultSet();



        while (rs.next())
        {
            for(int j=0; j<16; j++)
            {
                    a[i][j] = rs.getString(j+1);

            }

            i++;
        }

    }

    catch( Exception e )
    {
        System.out.println("\nException in Display Bean in getDbTable(String code):"+e);
    }
    finally
    {

        //closeConnection();
    }
    return a; 
}

如何从ResultSet获取单个参数到String类型的数组。我想检索“logtime”,这是我在表中的第一列,并将其存储到String Array中。我尝试了以下代码:

public String[] getcahrttime() throws SQLException
{   
    getConnection();
    getDbTable(vs_name);
    String[] timeStr = null;
    while(rs.next()){
        char[] time= rs.getString("logtime").toCharArray();
        timeStr = new String[time.length];
        for (int i=0,len=time.length; i<len; i++){
            timeStr[i] = String.valueOf(time[i]);
        }
    }
    System.out.println("time is"+timeStr);
    return timeStr;
}

其中getConnection建立连接,getDbTable(vs_name)返回包含其中所有列的表。

当我运行上述代码时,timestr获得null值。如何解决问题。

2 个答案:

答案 0 :(得分:2)

好的 - 您的第一个问题是每行,您重置timeStr变量并丢弃从早期行中读取的所有内容。这显然无法奏效。相反,我们需要初始化一次数组,然后只添加它(对于找到的每一行,只需要一个值)。

问题在于,数组需要使用特定大小进行初始化 - 而且我们不会提前知道将会有多少行。处理此问题的一种方法是首先运行count(*)查询,然后将数组初始化为该大小。或者,特定的ResultSet实现可能会告诉您集合的大小,但这不能保证。

但最简单的方法是使用List而不是数组,因为这些可以动态调整大小。我发现它们更容易使用,因此将它作为List传递到需要转换的点 - 但是为了演示,我将把它转换为数组。

除此之外,它很简单 - 没有必要弄乱字符数组:

public String[] getChartTime() throws SQLException
{
    // ...
    // Earlier lines as before, let's start from the variable
    final List<String> timeStr = new ArrayList<>();
    while(rs.next()) {
        // Just get the value of the column, and add it to the list
        timeStr.add(rs.getString("logtime"));
    }

    // I would return the list here, but let's convert it to an array
    return timeStr.toArray(new String[timeStr.size()]);
}

答案 1 :(得分:0)

我认为你的循环搞砸了。事情就是这样:

  • 取一行结果集。
  • 取列&#34; logtime&#34;从那一行
  • 创建一个包含与时间一样多的字符串的字符串数组 人物(为什么?!?)
  • 最后你转换每个时间字符 (char数组)成一个单独的字符串并将该字符串复制到一个 您声明所有内容后,字符串数组中的特定元素 循环,所有信息将在下一次迭代中消失 环

我建议你再考虑一下你的循环结构。尝试使用调试器,它会向您显示问题