我创建了一个方法,该方法生成一个包含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。
如何解决?
答案 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));
}
}