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
值。如何解决问题。
答案 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)
我认为你的循环搞砸了。事情就是这样:
我建议你再考虑一下你的循环结构。尝试使用调试器,它会向您显示问题