저는 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)));
}
}
}
이 코드는이 출력을 생성합니다. 세에서 System.out.println 라인 대신에
1
id
50
1
color
blue
2
id
60
2
color
red
등 ...
에는 다음과 같은 옵션을 시도하고 넷빈즈 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의 배열에서 데이터를 검색 할 수 있습니까?
(편집) 오류입니다. 배열은 index * number *에 의해 참조되어야합니다. 즉,이 [[0] [1]'not [0] [ "columnName"]'처럼. 또한 자바 배열은 1 기반이 아니라 0 기반임을 잊지 마십시오. (사이드 노트, 아무 것도하지 말고 메모리 누수를 막기 위해 모든 문장, 결과 집합, 연결 등을 닫는 것을 잊지 마라.) – Leigh
감사합니다. 다른 의견과 함께 저에게 도움이됩니다. 일단 그것이 작동하면 나에게 맞는 대답을 확인하기 위해 다시 올 것이다. – dutchlab