【发布时间】:2016-09-14 14:07:00
【问题描述】:
我是 Java 新手,我试图完成的示例是 ColdFusion 结构。以如下数据结构为例。
id color
50 blue
60 red
70 green
80 yellow
我想从如下所示的查询结果集创建一个 Java 多维数组。
1 id 50
color blue
2 id 60
color red
3 id 70
color green
4 id 80
color yellow
我的目标是使用返回的数组来用数据填充 JSP 页面。我试图让我的代码适应查询返回的不同数量的行。我目前的代码如下。
private static String[][][] query(Connection connection) throws SQLException{
Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet resultSet = statement.executeQuery("SELECT colors.id,colors.color FROM colors");
int size;
resultSet.last();
size = resultSet.getRow();
resultSet.beforeFirst();
ResultSetMetaData rsltmetadata = resultSet.getMetaData();
int colCount = rsltmetadata.getColumnCount();
String[][][] rlstSetArray = new String[size][colCount][];
int m = 0;
while(resultSet.next()) {
++m;
for (int j=1; j <= colCount; j++){
System.out.println(m);
System.out.println(rsltmetadata.getColumnName(j));
System.out.println(resultSet.getString(rsltmetadata.getColumnName(j)));
}
}
}
这段代码产生这个输出。
1
id
50
1
color
blue
2
id
60
2
color
red
等等……
代替三个 System.out.println 行已尝试以下选项并从 NetBeans 8.1 收到相同的消息。 '不兼容的类型:字符串不能转换为int'
rlstSetArray[m][rsltmetadata.getColumnName(j)] = resultSet.getString(rsltmetadata.getColumnName(j));
rlstSetArray[m][rsltmetadata.getColumnName(j)] = "'" + resultSet.getString(rsltmetadata.getColumnName(j)) + "'";
rlstSetArray[m]["'" + rsltmetadata.getColumnName(j) + "'"] = resultSet.getString(rsltmetadata.getColumnName(j));
是什么导致了这条消息?
这是否允许我使用数组第二维中的列名从 JSP 中的数组中检索数据?
【问题讨论】:
-
(编辑)该错误是因为您将数组用作结构。数组必须由索引number 引用,即像这样
[0][1]而不是[0]["columnName"]。另外,不要忘记 java 数组是从 0 开始的,而不是从 1 开始的。 (旁注,与您的问题无关,但不要忘记在完成后关闭所有语句、结果集、连接等以防止内存泄漏)。 -
谢谢,这对我和其他 cmets 都有帮助。一旦我让它工作,我会回来检查适合我的答案。
标签: java arrays jsp coldfusion