填充Java多维数组
问题描述:
我是Java新手,我尝试完成的是ColdFusion结构。以下面的数据结构为例。填充Java多维数组
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中的数组中检索数据?
答
如何为您的结果集而不是3维数组创建POJO包装类?
public class Color {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
然后查询方法可以简化:
private static List<Color> query(Connection connection) throws SQLException{
List<Color> colors = new LinkedList();
...
while(resultSet.next()) {
Color color = new Color();
color.setName(resultSet.getString(rsltmetadata.getColumnName("color"));
color.setId(resultSet.getString(rsltmetadata.getColumnName("id"));
colors.add(color);
}
return colors;
}
+0
我使用这个选项是因为对于Java来说是新手,它对我来说更有意义。谢谢大卫。 – dutchlab
答
我不知道,我回答你的问题,但我听见说“哎哟”当我看到三重维度:
private static String[][][] query(Connection connection) throws SQLException{
你有没有考虑使用POJO的数据?
class ColorMap {
private final Integer id;
private final String color;
private static HashMap<String, Integer> nameMap = new HashMap<String, Integer>();
public ColorMap(int theId, String theColor) {
id = theId;
color = theColor;
addColorToMap();
}
private void addColorToMap() {
ColorMap.nameMap.put(this.color, this.id);
}
public static Integer getColorByName(String theName) {
return ColorMap.nameMap.get(theName);
}
}
这样,你会填充地图,你从查询中提取数据,我会使用的列名,以找到自己的价值观其他紧密地结合到查询文本。
(编辑)的错误是因为使用的是如下的结构阵列。数组必须通过索引*号*来引用,即像这样的[[0] [1]'而不是'[0] [“columnName”]''。另外,不要忘记,java数组是基于0的,而不是基于1的。 (注意,与你的问题无关,但在完成时不要忘记关闭所有语句,结果集,连接等等以防止内存泄漏)。 – Leigh
谢谢,这可以帮助我与其他评论一起。一旦我有它的工作,我会回来检查适合我的答案。 – dutchlab