Java操做DB2字段Clob

    Clob字段類型定義:字符lob,字符數據,最長能夠達到4GB,存貯在數據庫中. java

因爲項目的須要.用到了大字段Clob.如下是讀取方法 sql

 第一種: 數據庫

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


    第二種: spa

    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");
    } code

    第三種: 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";
           } ci

    }  rem

    第一種方法代碼量少,且能避免中文亂碼問題;第二種方法與第一種方法效率差很少,也是常使用的一種方法;第三種方法效率極低,若是數據比較大的話建議不要使用。  get

    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中的大字段來進行讀取的時候數據庫鏈接是不能關閉的.

相關文章
相關標籤/搜索