2011-06-14 83 views
1

這是我在做什麼:MySQL的JDBC記錄檢索中的for循環中的Java

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值,則priting成才這樣的:

[Ljava.lang.String;@85af80 

這是什麼意思? mySQL中的url字段是VarChar,它可以很好的使用上面的方法,但是在這個循環中爲什麼我得到了上面的結果?

+1

我希望你絕對確信index [i]不在用戶控制之下,否則你應該真正修復SQL注入攻擊載體。 – Voo 2011-06-14 01:46:48

回答

3

您還沒有初始化output[]

試試這個:

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

那個奇怪的輸出是通過打印陣列引起的,即System.out.println(output);

試試這個:

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

它有點瘸,但Java沒有按不會自動打印數組內容,它會打印出t他的對象類型和地址。提示是在開始的字母L,它用來表示一個數組

+0

您可能不知道運行時期間結果集的大小。我建議使用List而不是固定大小的String數組。 – gouki 2011-06-14 01:44:45

+0

謝謝。我已經這樣做了,但現在面臨着這個奇怪的輸出問題。你能提出可能的情況嗎? – Johnydep 2011-06-14 01:46:58

+0

@gouki他確實知道運行時的大小:它與索引數組的大小完全相同 - 根據代碼 – Bohemian 2011-06-14 01:47:00