2011-06-14 2 views
1

이 내가 뭐하는 거지입니다 :MySQL의 JDBC 기록 검색 내부에 대한 루프 자바

String[] output = new String[index.length]; 

    try{ 
     for(int i=0; i<index.length; i++){ 
      Statement st = con.createStatement(); 
      ResultSet res = st.executeQuery(
       "SELECT url FROM resources WHERE rid = "+(index[i]); 

     while(res.next()){ 
      output[i] = res.getString("url"); //<-- this is where exception is thrown 
     } 
    } catch(...) 

하는 방법입니다 대신 올바른 URL 값을 인쇄하는 작업은 다음과 같이가 someting를 priting있다 :

[Ljava.lang.String;@85af80 

이게 무슨 의미입니까? mySQL의 url 필드는 VarChar입니다. 위의 메소드와 잘 작동했지만이 루프에서 왜 위의 결과를 얻었습니까 ??

+1

index [i]가 사용자 제어하에 있지 않음을 확인하십시오. 그렇지 않으면 SQL 주입 공격 벡터를 실제로 수정해야합니다. – Voo

답변

3

output[] 초기화하지 않았습니다! 자바 아무튼 그것은 좀 구식

System.out.println(Arrays.toString(output)); 

:하지만, System.out.println(output);

대신이 시도 즉, 이상한 출력이 배열를 인쇄하여 발생

String[] output = new String[index.length]; 

그건 :

이 시도 자동으로 배열 내용을 인쇄하지 않습니다. 내용을 출력합니다. 그는 객체 유형 및 주소입니다. 힌트는 처음에 배열을 나타내는 데 사용하는 L입니다.

+0

런타임 중에 결과 세트의 크기를 알지 못할 수도 있습니다. 고정 된 크기의 String 배열 대신 List를 사용하는 것이 좋습니다. – gouki

+0

고맙습니다. 나는 그렇게했지만 지금은 이상한 출력 문제에 직면 해있다. 무슨 일이 일어날 지 제안 해 주실 수 있습니까? – Johnydep

+0

@ gouki 그는 런타임에 크기를 알고 있습니다 : 인덱스 배열과 정확히 같은 크기입니다 - 코드 – Bohemian