如何从结果集中获取满足某些条件的值并在表中显示

时间:2014-12-29 04:37:43

标签: java mysql

我有一个方法,可以在表中显示最新时间的值。此方法的代码为:

public String[][] beamline_Status() {
  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 = 0; j < 31; j++) {
        a[i][j] = rs.getString(j + 1);

      }


    }
  } catch (Exception e) {
System.out.println("\nException in  Bean " +e.getMessage());
  } finally {
    closeConnection(stmt, rs, con);
  }

  return a;



}

此方法返回正确的结果。

现在我有另一种方法,我只想从中检索那些存在1的列值和结果集中的另外三列,它们显示时间和beam_energy以及beam_current值,并在表中显示那些具有相应列名的值该方法的代码是:

public List < Integer > beam_CurrentStatus() throws SQLException {

  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 < 30; j++) {
        if (rs.getInt(j) == 1)

          al.add(rs.getInt(j));
      }


    }
  } catch (Exception e) {
    System.out.println("\nException in  Bean " + e.getMessage());
  } finally {
   closeConnection(stmt, rs, con);
  }


  return al;


}

此方法仅返回1表中存在1次,输出为

  

[1,1,1,1,1,1]

但是我想要以表格格式显示列名。如何做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以返回Map<String, Integer>来获取StringInteger。并且,您可以使用ResultSetMetaData来获取列标签。像,

public Map<String, Integer> beam_CurrentStatus() throws SQLException {
    Map<String, Integer> map = new HashMap<>();
    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();
        ResultSetMetaData rsmd = rs.getMetaData();
        while (rs.next()) {
            for (int j = 2; j < 30; j++) {
                if (rs.getInt(j) == 1) {
                    String name = rsmd.getColumnLabel(j);
                    map.put(name, rs.getInt(j));
                }
            }
        }
    } catch (Exception e) {
        System.out.println("\nException in  Bean " + e.getMessage());
    } finally {
        closeConnection(stmt, rs, con);
    }
    return map;
}