2011-09-15 36 views
8

Tôi đang cố gắng để có được kết quả từ DBTại sao nó nói "java.sql.SQLException: Tên cột không hợp lệ"

 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")); 
     } 

Nó nói rằng rs.getString("realdate") - "java.sql.SQLException: Tên cột không hợp lệ ", tại sao?

Nếu không có rs.getString("realdate") mọi thứ hoạt động tốt.

Trên thực tế, bảng có cột này

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

Cảm ơn bạn!

Trả lời

11

Tôi nghĩ rằng bạn đang không chọn realdate. Bạn đang chọn TO_CHAR (realdate, 'YYYYMMDD') và cột đó nhận được tên đó. Bạn có thể làm điều gì đó như sau:

TO_CHAR (realdate, 'YYYYMMDD') as myrealdate 

và chọn điều đó. (với `rs.getString("myrealdate") ofcourse, không phải với realdate)

0

"realdate" không có trong lựa chọn truy vấn ur làm cho truy vấn ur như thế này

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

Không có cột realdate trong mệnh đề SELECT của bạn. Bạn chọn TO_CHAR (realdate, 'YYYYMMDD'), là không phải điều tương tự. Bạn có thể muốn thử sử dụng getString("TO_CHAR (realdate, 'YYYYMMDD')") và nếu điều đó không làm việc sử dụng AS để cung cấp cho cột đó một cái tên:

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

Hoặc bạn có thể sử dụng lựa chọn cột-index dựa trên: rs.getString(1) (lưu ý rằng các chỉ số trong JDBC là luôn luôn dựa trên 1).

2

Bạn đang chọn hàm TO_CHAR (realdate, 'YYYYMMDD') trên trường REALDATE, không phải là trường. Thêm bí danh vào nó và sử dụng bí danh đó để truy xuất kết quả.

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

rs.getString("realdate_str"); 
Các vấn đề liên quan