JDBC链接SQLServer 2000取text类型字段的问题,解决者100分奉送

jndszl 2003-10-09 11:35:49

我有JDBC链接SQLServer 2000数据库中的一个表,有一个字段是类型是text的,

我用rs.getString(3) //3为字段是类型是text的字段编号一取就出错,但取其它类型的没事,放到EJB中通过findByPrimaryKey取出来也没有事。

org.apache.jasper.JasperException: [Microsoft][SQLServer 2000 Driver for JDBC]Re
sultSet can not re-read row data for column 3.


以下是我链接数据库的JAVABEAN

private void getContext() {
try {
ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:/MSSQLDS");

try {
con = ds.getConnection();

}
catch (SQLException ex1) {
System.out.println("new getConnection error Message is " +
ex1.getMessage());
}

try {
stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);

}
catch (SQLException ex2) {
System.out.println("new createStatement error Message is " +
ex2.getMessage());
}

}
catch (NamingException ex) {
System.out.println("new InitialContext error Message is " + ex.getMessage());
}
}

public void Record(String _strSql) {
System.out.println(_strSql);
try {
rs = stmt.executeQuery(_strSql) ;
rs.last() ;
this._intRowCount = rs.getRow() ;
rs.first() ;
}
catch (SQLException ex) {
System.out.println("new getRecord error Message is " + ex.getMessage());

}

}
...全文
248 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jndszl 2003-10-11
  • 打赏
  • 举报
回复
写的不错,不错,结贴了
mtou 2003-10-09
  • 打赏
  • 举报
回复
InputStream ais=rs.getAsciiStream(3);
jndszl 2003-10-09
  • 打赏
  • 举报
回复
up上去
ygrmry 2003-10-09
  • 打赏
  • 举报
回复
楼上已帮我说了,另外我要补充一下:在这种情况下一般不要用一个String=String+String来进行叠加,这样字符串相加效率很低的,最好用StringBuffer的append()方法,最后再.toString()转为字符串,效率是百分之几90的提高!不妨可做个实验
。总之像SQLSERVER的image,text,还有Oracle和DB2的blob,clob等类型的字段(称为大字段)都不要用简单的getString()来获取,都要用流来转换,不然会有意想不到的结果!我就说这么多啦!
mtou 2003-10-09
  • 打赏
  • 举报
回复
InputStream ais=rs.getAsciiStream(3);
try
{
int c;
String _strGetText ="";
char temp;
while((c= ais.read())>-1)
{
temp=(char)c;
_strGetText =_strGetText +temp;
}
}catch(IOException e)
{
e.printStackTrace();
}
jndszl 2003-10-09
  • 打赏
  • 举报
回复
不晚,不晚,InputStream ais=rs.getAsciiStream(3);取得以后,我如何打在页面上显示?

String _strGetText ;

_strGetText = (String)InputStream.toString() ;

out.println(strGetText ) ;

这样显示出来吗?
ygrmry 2003-10-09
  • 打赏
  • 举报
回复
唉!我来晚了!不管取也多少次,我觉得最好不要用getString(int)方法来读取text类型的。还是用InputStream ais=rs.getAsciiStream(3);
方式会好一些!
jndszl 2003-10-09
  • 打赏
  • 举报
回复
我在什么地方取了两次,我取了一次呀,是不是我的BEAN中取得this._intRowCount = rs.getRow() ;的时间用了一次。你给我说的,还真管用,一会我就给你结分。呵呵
jndszl 2003-10-09
  • 打赏
  • 举报
回复
试一下
hj12 2003-10-09
  • 打赏
  • 举报
回复
同意楼上的,可能取了两次
kevincom 2003-10-09
  • 打赏
  • 举报
回复
是不是rs.getString(3)用了两次?
如果是这样将你连接数据库的bean中代码改一下,如下:
stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
-->
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧