2011-09-15 5 views
8

Sto cercando di ottenere risultati da DBPerché si dice "java.sql.SQLException: non valida nome di colonna"

 String strCommand = "select TO_CHAR (realdate, 'YYYYMMDD'), PURCHASE_PRICE, SELLING_PRICE from CURRENCY_VI where RATE_NAME='EUR'"; 

     cs.setQueryTimeout(m_nTimeout); 

     ResultSet rs = cs.executeQuery(strCommand); 

     while (rs.next()){ 
      System.out.println("!!!\n\nDATE = " + rs.getString("realdate") + " PURCHASE_PRICE = " + rs.getString("PURCHASE_PRICE") + " SELLING_PRICE = " + rs.getString("SELLING_PRICE")); 
     } 

Si dice che rs.getString("realdate") - "java.sql.SQLException: non valida nome di colonna ", perché?

Senza rs.getString("realdate") tutto funziona correttamente.

In realtà, tavolo ha questa colonna

CREATE TABLE "GPB"."CURRENCY_VI" 
    (   "REALDATE" DATE, 
       "PURCHASE_PRICE" FLOAT(126), 
       "SELLING_PRICE " FLOAT(126), 
       "RATE_NAME" VARCHAR2(20 BYTE) 
    ) 

Grazie!

risposta

11

Penso che non sta selezionando realdate. Stai selezionando TO_CHAR (realdate, 'YYYYMMDD') e quella colonna ha quel nome. Si potrebbe fare qualcosa del genere:

TO_CHAR (realdate, 'YYYYMMDD') as myrealdate 

e selezionare quello. (Con `rs.getString("myrealdate") naturalmente, non con realdate)

0

"realdate" non è in ur query di selezione fare ur query come questa

String strCommand = "select REALDATE, PURCHASE_PRICE, SELLING_PRICE from CURRENCY_VI where RATE_NAME='EUR'"; 
4

Non v'è alcuna colonna realdate nel vostro SELECT clausola. Si seleziona TO_CHAR (realdate, 'YYYYMMDD'), che è non la stessa cosa. Si potrebbe provare a utilizzare getString("TO_CHAR (realdate, 'YYYYMMDD')") e se questo non funziona uso AS per dare quella colonna un nome:

select TO_CHAR (realdate, 'YYYYMMDD') AS realdate, PURCHASE_PRICE, SELLING_PRICE from CURRENCY_VI where RATE_NAME='EUR' 

In alternativa è possibile utilizzare la selezione basata colonna-index: rs.getString(1) (si noti che l'indice di JDBC è sempre basato su 1).

2

Si sta selezionando la funzione TO_CHAR (realdate, 'YYYYMMDD') sul campo REALDATE, non sul campo stesso. Aggiungi un alias e usa quell'alias per recuperare il risultato.

SELECT TO_CHAR (realdate, 'YYYYMMDD') as realdate_str, .... 

rs.getString("realdate_str");