各位前辈好
最近我在一个数据迁移的项目,就是把老项目的一个小应用挖出来,其中有有两个地方用到clob字段,分别如下:
一、
......
java.io.Reader reader = null;
ProposalBean ProposalBean = qpwebService.showProposalBean.getProposalByID(id);
String title = ProposalBean.getTitle();
java.sql.Clob content = ProposalBean.getContent();
reader = ((oracle.sql.CLOB)content).getCharacterStream();
char[] cbuf = new char[((oracle.sql.CLOB)content).getBufferSize()];
.......
二、
......
PFeedbackBean PFeedbackBean = qpwebService.showFeedbackBean.getFeedbackByID(id);
java.sql.Clob content = PFeedbackBean.getContent();
reader = ((oracle.sql.CLOB)content).getCharacterStream();
char[] cbuf = new char[((oracle.sql.CLOB)content).getBufferSize()];其中一的Clob能正确去到值
但是二中在运行到“reader = ((oracle.sql.CLOB)content).getCharacterStream();”时报错:
java.sql.SQLException: 必须登录到服务器
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:1160)
at oracle.jdbc.ttc7.TTC7Protocol.assertLoggedIn(TTC7Protocol.java:2196)
at oracle.jdbc.ttc7.TTC7Protocol.lobLength(TTC7Protocol.java:2698)
at oracle.sql.LobDBAccessImpl.length(LobDBAccessImpl.java:468)
at oracle.sql.CLOB.length(CLOB.java:214)
最近我在一个数据迁移的项目,就是把老项目的一个小应用挖出来,其中有有两个地方用到clob字段,分别如下:
一、
......
java.io.Reader reader = null;
ProposalBean ProposalBean = qpwebService.showProposalBean.getProposalByID(id);
String title = ProposalBean.getTitle();
java.sql.Clob content = ProposalBean.getContent();
reader = ((oracle.sql.CLOB)content).getCharacterStream();
char[] cbuf = new char[((oracle.sql.CLOB)content).getBufferSize()];
.......
二、
......
PFeedbackBean PFeedbackBean = qpwebService.showFeedbackBean.getFeedbackByID(id);
java.sql.Clob content = PFeedbackBean.getContent();
reader = ((oracle.sql.CLOB)content).getCharacterStream();
char[] cbuf = new char[((oracle.sql.CLOB)content).getBufferSize()];其中一的Clob能正确去到值
但是二中在运行到“reader = ((oracle.sql.CLOB)content).getCharacterStream();”时报错:
java.sql.SQLException: 必须登录到服务器
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:1160)
at oracle.jdbc.ttc7.TTC7Protocol.assertLoggedIn(TTC7Protocol.java:2196)
at oracle.jdbc.ttc7.TTC7Protocol.lobLength(TTC7Protocol.java:2698)
at oracle.sql.LobDBAccessImpl.length(LobDBAccessImpl.java:468)
at oracle.sql.CLOB.length(CLOB.java:214)
好像没有报ora错误啊,这里报的是:必须登录到服务器,你在后台 用system.out.print("conn:"+conn)打印下看你的数据库连接获取到了吗?
第二个的字段类型是Nclob吗?
可以把第二段代码上下贴出来吗,还有用到PFeedbackBean中的字段;
最后是详细的报错信息
再hibernate中把它映射成string类型就可以把它当
string类型来用了,楼主可以试一试
java.io.Reader reader = null;
PFeedbackBean PFeedbackBean = qpwebService.showFeedbackBean.getFeedbackByID(id);
String propID = PFeedbackBean.getProp_id();
java.sql.Clob content = PFeedbackBean.getContent();
java.util.Date feedbackDT = PFeedbackBean.getFeedbackDT();
reader = ((oracle.sql.CLOB)content).getCharacterStream();
char[] cbuf = new char[((oracle.sql.CLOB)content).getBufferSize()];
int len = 0;
int rowCount = 0;
int charCount = 0;
long fileLen = content.length();
//每行中半角字符的个数
int lowerCount = 0;
Loop:
while((len=reader.read(cbuf)) != -1){
for(int i =0;i<cbuf.length;i++){
System.out.print(cbuf[i]);}
}源代码就是这样,这里两边都是Nclob字段
......
java.io.Reader reader = null;
ProposalBean ProposalBean = qpwebService.showProposalBean.getProposalByID(id);
String title = ProposalBean.getTitle();
java.sql.Clob content = ProposalBean.getContent();
reader = ((oracle.sql.CLOB)content).getCharacterStream();
char[] cbuf = new char[((oracle.sql.CLOB)content).getBufferSize()];
.......
二、
......
PFeedbackBean PFeedbackBean = qpwebService.showFeedbackBean.getFeedbackByID(id);
java.sql.Clob content = PFeedbackBean.getContent();
reader = ((oracle.sql.CLOB)content).getCharacterStream();
char[] cbuf = new char[((oracle.sql.CLOB)content).getBufferSize()];放置在Biz层中,结果有用了,(我的框架是S2SH)并带了,事务管理。