站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题java如何读取sqlserver中的text类型的数据?

java如何读取sqlserver中的text类型的数据?

摘要: java如何读取sqlserver中的text类型的数据?


一字段为text类型,我用getString()读取时,若已数据则一切正常,但只要字段内容为空则有异常发生:
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Underlying input stream returned zero bytes.....

搜遍goole+baidu可始终没有一个完整的解决方案,拜托哪位高手指点一下。。。谢谢。。。



数据库的设计阶段规定该字段NOT NULL + DEFAULT(。。。。)


是的。可惜数据库不是我做的,我也无权修改。。。。


今天还没解决! 高手请进来支招啊!自顶...


你可用getObject()方法。
newxy技术值得关注 http://www.newxy.net


最好得方法还是NOT NULL + DEFAULT "" ,在程序里面数据库是Oracle的字段是char类型时候可以用if getString("field")=null{...这样来避免!} 搂住try 一下!


写错了:if getString("field")==null


是啊 同意楼上的
String text=null;
try{
text=Rs.getString("name");
}catch(SQLException e){
//doNothing
}


if ( s == null )
return "";


还是不行啊。其实问题的关键不是怎么处理为null的问题,而是只要值为null,而我又用getString()去取的话就会报异常:
[Microsoft][SQLServer 2000 Driver for JDBC]Underlying input stream returned zero bytes....

期待进一步的解决方案!...


getString()取得的是null时候,你可以在把要在画面上显示的值显示成" "!
如if getString("field")==null
{
画面上显示的值="";
}
else
{
画面上显示的值=getString("field")
}


我采用了捕捉异常的方法能表面上对付一下:
try{
out.println(rs.getString("colname"));
}
catch(SQLException e){
out.println("");
}

但这是在利用异常,异常总是要发生的。恐怕不太好。有没有不产生异常就能解决问题的方法呢??
欢迎大家讨论。。。


publist String toString(String str){
if(str==null){
return "";
}
}

a = toString(rs.getString("field"))




再给各位解释一下。问题不是null=>"" 而是当用getString()方法去取一个text类型(sqlserver)数据时,若字段值为null 会报异常!!


getString("field"),数据为空应该返回null,不会抛异常的.
你可以试一下byte[] b = rs.getBytes("field");判断b是否为空,不为空则据数据库的字符编码
String str = new String(b);得到str.可能出现乱玛问题,如果数据库使用的和机器的默认编码不一样,请使用String str = new String(b,"XXX");XXX为数据库的字符编码!


getString("field"),数据为空应该返回null,不会抛异常,你那个地方是因为是空时候你还对进行像有值的处理肯定会出异常啊!


确实为空时,会报异常!我也奇怪,我的数据库是sqlserver2000+sp3
谢谢大家!


在sql语句中用isnull函数


刚才忘说了,异常是因为从数据库里读出来的时候为null.而getString()方法的返回值是String类型,把底层的流(为null时)转换成String,抛出了异常!

getBytes()不行吗?


用getObject().toString()方法。


捕获异常

String TextString="";
try
{
TextString = rs.getString("field");
}
catch(Exception e)
{
TextString = "";
}


你有修改的权限没?
有的话你可以写个更新的语句 先把数据库里面字段为NULL的先更新为空或一个特定的符号
然后获取的时候过滤下 就可以避免这问题


Object obj=rs.getObject();



我认为并不是一定要避免所有的异常 这就好象是一种特殊情况
具体到楼主的例子 它发生了 但只要你用
try{
}
catch(){
}
能很好的处理就可以了 因为之后不会有连锁反应导致其他的问题发生:数据库连接不会中断,系统也不会崩溃...
(个人意见 欢迎指正^_^)


从朋友那弄来这段代码,与大家共亨!顺便结帖散分了


/**
* 当数据库字段为Text类型时调用
* @param rs
* @param col
* @return
*/
public static String getClobString(ResultSet rs, String col) {
try {
Reader reader = rs.getCharacterStream(col);
if (reader == null) {
return null;
}
StringBuffer sb = new StringBuffer();
char[] charbuf = new char[4096];
for (int i = reader.read(charbuf); i > 0; i = reader.read(charbuf)) {
sb.append(charbuf, 0, i);
}
return sb.toString();
} catch (Exception e) {
return "";
}
}


↑返回目录
前一篇: 想学java的web编程,兄弟们给些建议……
后一篇: 如何配置Apache+Tomcat作为webserver?