比较java中resultset的值

比较java中resultset的值,java,Java,我创建了一个方法,该方法生成的结果集包含1行31列,其中某些列的值为1、2或0。我想创建一个方法,该方法只提供那些列名称和值为1的值 我试过这样做 int status[] = {0, 2}; public int[][] beam_CurrentStatus() { int arr[][] = new int[1][31]; int i = 0; try { con = getConnection(); stmt = con.createStatement()

我创建了一个方法,该方法生成的结果集包含1行31列,其中某些列的值为1、2或0。我想创建一个方法,该方法只提供那些列名称和值为1的值

我试过这样做

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;
}
int status[]={0,2};
公共int[]beam_CurrentStatus(){
int arr[][]=新int[1][31];
int i=0;
尝试
{
con=getConnection();
stmt=con.createStatement();
字符串sql="1.c.逻辑时间,a.BL1和U数据数据资源库,a.BL2和U数据资源库,a.BL3和U数据资源库,a.BL3和U数据资源库,a.BL4和4和数据数据资源库,a.BL4和数据资源库,a.BL5和U数据资源库时间,a.BL1和1.BL1和数据数据数据资源库数据资源库,a.BL1 1 1和数据数据数据数据数据数据资源库,a.BL1 c时间,a.1 c.c.1 c.c.c.c.c.c.c.c.c.c.c.c.c.c.时间,a.c.c.c.c.c.c.c.逻辑时间,数据资源数据资源数据资源数据资源数据资源数据资源数据资源数据资源数据资源库数据资源库数据资源库数据资源库数据资源库,a.U数据资源库,a.BL3和数据资源库数据资源库,a.BL3和数据资源库,a.a.BL14_数据,a.BL15_数据,a.BL16_数据,a.BL17_数据,a.BL18_数据,a.BL19_数据a.BL21个数据源数据源数据源数据源数据源,a.BL22个数据源数据源数据源,a.BL22个数据源数据源,a.BL23个数据源数据源数据源,a.BL23个数据源数据源,a.BL23个数据源数据源,a.BL20个数据源数据源,a.BL20个数据源数据源数据源数据源数据源,a.BL21个数据源数据源数据源数据源数据源,a.BL27个数据源数据源数据源数据源数据源,b.27个数据源数据源数据源,b.ST,b.1个数据源数据源数据源数据源数据源数据源数据源数据源数据源数据源数据源数据源数据源,b.ST,b.ST,b.1(状态)状态(状态)是状态(状态)状态(状态)是状态(状态)状态(状态(状态)是状态)状态(状态)是状态)状态(状态)状态(状态)是状态)状态(状态)的数据源于在a.logtime=b.logtime内部连接indust2_BDS.dbo.DCCT上b、 logtime=c.logtime顺序由c.logtime DESC确定”;
执行程序(sql);
rs=stmt.getResultSet();
while(rs.next()){
对于(int j=2;j<29;j++){
如果(!status.equals(rs.getInt(j)))
arr[i][j]=rs.getInt(j);
}
}
}捕获(例外e){
System.out.println(“\n Bean中的异常”+e);
}最后{
闭合连接(stmt、rs、con);
}
返回arr;
}
但产量正在以惊人的速度增长

[[I@553763.


如何解决它???

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


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

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

将其更改为:

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

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

此代码可以帮助您实现所需的功能。您需要在if块中检查列类型

// 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)); 
    }
}
//获取结果集元数据
ResultSetMetaData meta=rs.getMetaData();
//获取列的计数
int columnCount=meta.getColumnCount();
//迭代所有列
对于(int i=0;i
早些时候,我做了你让我做的事情,但后来我也得到了回报[[I@881cb3作为output@SRY_JAVA哦,我忘了这是一个2D数组。试试数组。deepToString(arr)。现在我也得到了**[[I@19deddb**作为应用Array.deepToString(arr)后的输出。我只有一行31列,所以不需要I++而且我需要两个列名和三个值。当我应用你的代码时,我只得到了第一个列名,它的值为2014-09-02 16:05:10.0这就是为什么我写这篇文章的原因。你需要检查列的类型。我现在就修复代码。当我按照你说的做时,方法getColumnType例外(int)对于类型ResultSet是未定义的,当我使用它强制转换rs时,即当我将其更改为**if((ResultSetMetaData)rs时。getColumnType(I+1)=Types.INTEGER&&rs.getInt(I+1)=1**然后出现以下异常:Bean com.microsoft.sqlserver.jdbc.SQLServerResultSet中的异常无法转换为java.sql.ResultSetMetaData如何将rs转换为ResultSetMetaData?为什么要这样做?您有rs,在我的代码中我用rs.getMetaData()获取元数据。只需替换for(int j=2;j<29;j++{if(!status.equals(rs.getInt(j)))arr[i][j]=rs.getInt(j);}使用我提供的代码。它应该可以工作。然后根据需要将所需的值写入数组。不能使用!status.equals(rs.getInt(j))进行比较