2011-07-05 27 views
0

我的jsp頁面上有一個表,其中有一列由類型爲CLOB的數據庫列填充。我遇到了一些麻煩,並且看到了有關這方面的其他問題,但答案對我沒有幫助。這裏是我的陳述,其中評論是CLOB。如何使用CLOB數據類型選擇列

stmt = conn.prepareStatement("SELECT DISTINCT restriction, person, start_date, end_date, comments " 
          + " FROM restrictions WHERE person = ? " 
          + " AND (start_date BETWEEN TO_DATE (? , 'yyyy/mm/dd') AND TO_DATE (? , 'yyyy/mm/dd') " 
          + " OR start_date < TO_DATE (? , 'yyyy/mm/dd') AND end_date IS NULL) "); 

     stmt.setString(1, Id); 
     stmt.setString(2, StartRest); 
     stmt.setString(3, EndRest); 
     stmt.setString(4, EndRest); 
     result = stmt.executeQuery();  

然後,我將有一個while循環中的列:

while (result.next()) {  
     restrictions = StringUtils.defaultString(result.getString("str_restriction")); 
     ....... 
     // here is where I would get my Clob data from the query. 

所以,基本上,我想知道是否有一種方法來翻譯在查詢中CLOB,甚至在java代碼,所以它可以在我的頁面中使用。

+0

2個問題:哪一部分是CLOB?限制嗎?第二:爲什麼它是一個CLOB而不是文本(或中/長文本)?從您的描述中不清楚 – PhD

+0

感謝您的閱讀。 1.'comments'是一個CLOB,見第一段2.一些(很少)將在該列中有很長的文字。不幸的是,表格設計不是我的,所以它可能在創建時就是另一種數據類型。 – Dan

+0

1.你有哪些麻煩?你嘗試了什麼,你有哪些例外?你用getClob()試過嗎? 2.爲什麼不使用日期(java.sql.Date實例)而不是使用TO_DATE解析的字符串? –

回答

2

問題來自查詢的distint子句,它無法應用於CLOB。

檢查是否真的需要distinct關鍵字。或者,也許你可以重寫你的查詢爲

select restriction, person, start_date, end_date, comments from restrictions 
where id in (select distinct id from restrictions where <original where clause>) 

PS:下一次,包括錯誤消息和您的數據庫的問題。我已經能夠在「ora-00932 clob」上通過簡單的谷歌搜索找到問題。

+0

好的,我很抱歉,我的問題可能是錯誤的。我現在已經運行了查詢(感謝你的回答),但結果只是(Clob)而不是它背後的實際數據。任何線索? – Dan

+0

我修復了我的答案查詢中的拼寫錯誤。但是,如果coments列是clob,則應該使用resultSet.getClob()來獲取它,並使用返回的Clob對象來獲取內容。請參閱http://download.oracle.com/javase/6/docs/api/java/sql/ResultSet.html#getClob%28java.lang.String%29和http://download.oracle.com/javase/6 /docs/api/java/sql/Clob.html –