Java操作DB2字段Clob

    Clob字段类型定义:字符lob,字符数据,最长可以达到4GB,存贮在数据库中.

由于项目的需要.用到了大字段Clob.以下是读取方法

 第一种:

    Clob clob = rs.getClob("remark");//java.sql.Clob
    String detailinfo = "";
    if(clob != null){
     detailinfo = clob.getSubString((long)1,(int)clob.length());
    }


    第二种:

    Clob clob = rs.getClob("remark");//java.sql.Clob
    int i = 0;
    if(clob != null){
     InputStream input = clob.getAsciiStream();
     int len = (int)clob.length();
     byte by[] = new byte[len];
     while(-1 != (i = input.read(by, 0, by.length))){
      input.read(by, 0, i);
     }
     detailinfo = new String(by, "utf-8");
    }

    第三种:

   Clob clob = rs.getClob("remark");//java.sql.Clob
    String value="";
    String line="";
    if(clob!=null){
           Reader reader=((oracle.sql.CLOB)clob).getCharacterStream();
           BufferedReader br=new BufferedReader(reader);
           while((line=br.readLine())!=null)
           {
            value += line + "\r\n";
           }

    } 

    第一种方法代码量少,且能避免中文乱码问题;第二种方法与第一种方法效率差不多,也是常使用的一种方法;第三种方法效率极低,如果数据比较大的话建议不要使用。 

    Clob与String之间相互转换的方法如下:

         /**
	     * clob类型转换为String<p>
	     * @param clob
	     * @return <p>
	     * String
	     */
	    public static String ClobToString(Clob clob){
	    	String clobS="";
	    	try {
	    		clobS= clob.getSubString(1, (int)clob.length());
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	    	return clobS;
	    }
	    
	    /**
	     * String类型转换为Clob<p>
	     * @param clobs
	     * @return <p>
	     * Clob
	     */
	    public static Clob StringToClob(String clobs){
	    	Clob clob=null;
	    	try {
	    		clob=new SerialClob(clobs.toCharArray());
			} catch (SerialException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	    	return clob;
	    }

    另外特别注意的是:Clob是以流的形式读取的,所以在未完全读出来的时候,数据库连接是不能关闭的.这也和数据库的类型及驱动有关.目前来看对DB2中的大字段来进行读取的时候数据库连接是不能关闭的.

你可能感兴趣的:(Java操作DB2字段Clob)