在网上查找了相关资料,有这样一个思路:通过Sql Server提供的ReadText进行分段读取,然后把ReadText放进存储过程,Java来调用存储过程获得读取字符串的指针,但问题是Java获得指针后,如何获得具体的字符串的内容呢?具体步骤如下:
1、创建表
CREATE TABLE yb_table_oa
   ( 
    id int,
    content text
   )
2、创建存储过程
CREATE   PROCEDURE   dbo.getText  
  @readt   varbinary(16)   output   
  AS   
  declare   @ptr   binary(16)   
  select   @ptr=textptr(content)   
  from   yb_table_oa
  where   id=1
  readtext   yb_table_oa.content  @ptr   0 1000
  set   @readt=@ptr
return 1234
GO
3、调用的Java代码
public String callTextString(String artId)  {
String textStr = "";
if (StringFun.notNull(artId)) {
Connection conn=null;
CallableStatement proc = null; 
try
{
//建立连接         
conn = SQLConnectionManager.getInstance().getSQLConnection();
defaultCommit = conn.getAutoCommit();
proc = conn.prepareCall("{?=call getText(?)}");
           proc.registerOutParameter(1,Types.INTEGER);
proc.registerOutParameter(2,Types.VARBINARY);
proc.execute();   
byte[] ptr = proc.getBytes(1);
                 //关键这里获得指针后如何读取到字符串的内容呢?
proc.close();
conn.close();
}
catch(Exception ex)
{
SystemLogger.instance().logError(ex.getMessage()); }
}
return textStr;

}    或者各位前辈和大侠有更好的方法,请告知,先行谢过了!

解决方案 »

  1.   

    ntext,text,image 以后微软可能要删减了!~ 可以用这些代替 nvarchar(max),varchar(max),varbinary(max)
      

  2.   

    已经解决了!其实直接用Select就可以读取出来,只是用getString取字段时,必须按照读取的顺序来取!例如:
    select id,name,content from info,假如content是Text类型的字段,你在java中读取的顺序必须是:
    rs.getInt("id");
    rs.getString("name");
    rs.getString("content");
    这个用微软的JDBC取得程序有关!