2011-07-05 28 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 –

相关问题