比较java中resultset的值

时间:2014-12-26 09:32:24

标签: java

我创建了一个方法,该方法生成一个包含1行和31列的ResultSet,其中一些列值为1,2或0.我想创建一个方法,该方法只提供那些值为1的列名和值。 / p>

我试过这种方式

int status[] = {0, 2};
public int[][] beam_CurrentStatus() {
  int arr[][] = new int[1][31];
  int i = 0;
  try

  {
    con = getConnection();
    stmt = con.createStatement();

    String sql = "SELECT TOP 1 c.logtime, a.BL1_data_SS_ST,a.BL2_data_SS_ST,a.BL3_data_SS_ST,a.BL4_data_SS_ST,a.BL5_data_SS_ST,a.BL6_data_SS_ST,a.BL7_data_SS_ST,a.BL8_data_SS_ST,a.BL9_data_SS_ST,a.BL10_data_SS_ST,a.BL11_data_SS_ST, a.BL12_data_SS_ST,a.BL13_data_SS_ST,a.BL14_data_SS_ST,a.BL15_data_SS_ST,a.BL16_data_SS_ST,a.BL17_data_SS_ST,a.BL18_data_SS_ST,a.BL19_data_SS_ST,a.BL20_data_SS_ST,a.BL21_data_SS_ST,a.BL22_data_SS_ST,a.BL23_data_SS_ST,a.BL24_data_SS_ST,a.BL25_data_SS_ST,a.BL26_data_SS_ST,a.BL27_data_SS_ST,b.st1_prmt_status_p45,c.beam_current,c.beam_energy from INDUS2_BLFE.dbo.main_BLFE_status a inner join INDUS2_MSIS.dbo.main_MSIS_status b on a.logtime=b.logtime inner join INDUS2_BDS.dbo.DCCT c on b.logtime=c.logtime ORDER BY c.logtime DESC ";

    stmt.executeQuery(sql);
    rs = stmt.getResultSet();

    while (rs.next()) {
      for (int j = 2; j < 29; j++) {
        if (!status.equals(rs.getInt(j)))
          arr[i][j] = rs.getInt(j);
      }
    }
  } catch (Exception e) {
    System.out.println("\nException in  Bean " + e);
  } finally {
    closeConnection(stmt, rs, con);
  }

  return arr;
}

但是输出是

  

[[I @ 553763。

如何解决?

3 个答案:

答案 0 :(得分:0)

print语句正在打印异常的字符串表示形式。要打印有意义的(人类有意义的)字符串,您需要将此System.out.println("\nException in Bean " + e);替换为:System.out.println("\nException in Bean " + e.getMessage());

有关详细信息,您可以e.printStackTrace()打印异常的堆栈跟踪。

答案 1 :(得分:0)

你的逻辑错了。您正在将数组与整数进行比较。

将其更改为:

  for (int j = 2; j < 29; j++) {
    if (rs.getInt(j)==1)
      arr[i][j] = rs.getInt(j);
  }

关于您看到的输出,您应该打印Arrays.deepToString(arr)。按照您当前的方式打印数组会调用Object的默认toString()实现,该实现不会显示数组的内容。

答案 2 :(得分:0)

此代码可以帮助您实现您想要的效果。您需要在if块中检查columnTypes。

// Get resultset metadata
ResultSetMetaData meta = rs.getMetaData();

// Get count of columns
int columnCount = meta.getColumnCount();

// Iterate over all columns
for (int i = 0; i < columnCount; i++) { 
    // Get name of column
    String columnName = meta.getColumnName(i + 1);
    if (meta.getColumnType(i+1) == Types.INTEGER && rs.getInt(i+1)==1) {
        // if columnt type is integer and value is 1 print name and value
        System.out.println("Columnname:" + columnName);
        System.out.println("Columnvalue:" + rs.getInt(i+1)); 
    }
}