2011-09-01 41 views
0

我對JDBC的rs.getString(「column_name」)有一些問題,基本上它不會分配從查詢結果收到的值,我有一個String ris這應該從rs.getString獲取行名,對於我使用的問題的嚴重性ris而我的查詢只返回一行。這是代碼:JDBC的rs.getString()不會返回查詢結果的值

  //It returns null, or any other values I use to initialize the variable 
     String ris=null; 

     q = "SELECT DISTINCT nome FROM malattia WHERE eta='" + age + "' AND sesso='" + sexstr + "' AND etnia='" + etniastr + "' AND sintomi IN(" + tes + ")"; 

        ResultSet rs = st.executeQuery(q); 
        if (!rs.last()) { 
          ris = "no"; 
            } 
        else { 

         //This is the place where I'm having problems 
         while(rs.next()){ 
         //ris is supposed to get the name of the query result having column "nome" 
         ris=rs.getString("nome"); 

             } 
         } 


       conn.close(); 

     } catch (Exception e) { 
       ris = e.toString(); 
     } 

     return ris;     

我semplified的代碼,所以它很容易把重點放在問題出在哪裏。 在此先感謝!

+0

您是否嘗試從列中讀取某些內容(如我從代碼中看到的內容)或者您想要閱讀某些元數據(如我從註釋中看到的那樣)? –

+0

我會嘗試rs.getString(1),看看它是否有幫助,我檢查列name.rs.last是查看如果查詢返回零行的部分,然後返回ris =「no」 – tutak

+0

@Dmitry Alexandrov I '試圖使用查詢結果,在這種情況下(我semplified)我得到一行作爲結果,行是一個字符串,我想分配變量「ris」此行的值 – tutak

回答

1

試試這個,只是在if條件中刪除rs.last()調用..我同意@Thilo關於使用預準備語句。

String ris=null; 

     q = "SELECT DISTINCT nome FROM malattia WHERE eta='" + age + "' AND sesso='" + sexstr + "' AND etnia='" + etniastr + "' AND sintomi IN(" + tes + ")"; 

        ResultSet rs = st.executeQuery(q); 
        rs.first(); // go to first record. 
         //This is the place where I'm having problems 
         while(rs.next()){ 
         //ris is supposed to get the name of the query result having column "nome" 
         ris=rs.getString("nome"); 

             } 
         } 


       conn.close(); 
+0

剛剛嘗試過,它的工作原理!問題的確是在最後(),謝謝 – tutak

6
if (rs.last()) 
    while (rs.next()) 

這是行不通的,因爲你叫last後,你在最後一排和next總是返回false(它會返回true,帶你到下一行,如果有一個左) 。

請使用帶有綁定變量的預處理語句!

最後關閉ResultSet和Connection(或使用Jakarta Commons DbUtils)。

+0

+1因爲我認爲這是正確的答案,並且對於準備好的語句建議 – Wivani

+0

是的,問題出在last(),很好的解釋,是的,我會重新實現是使用準備好的聲明謝謝! – tutak