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