DB2之CLOB物件用法
String resume=null;//這個變數是後面使用clob物件的substring方法獲取CLOB物件的內容
String empnum="000130";
int startper,starpter1,startdpt=0;//這個是標記,表示clob中從哪到哪的內容(CLOB存放txt內容)
PreparedStatement stmt1,stmt2,stmt3=null;//定義statement物件以執行sql語句
String sql1,sql2,sql3=null;//sql語句
String empno,resumefmt=null;
Clob resumelob=null;//從資料庫裡面讀取的ResultSet結果集中返回clob物件並用resumelob接收
ResultSet rs1,rs2,rs3=null;
sql1="select POSSTR(RESUME,'Personal') "+"FROM EMP_RESUME"+"WHERE EMPNO=? AND RESUME_FORMAT='ASCII ' ";
//以上內容中 POSSRT(RESUME,'Personal ')意思是查詢RESUME這個clob物件中Personal子串的首字母出現的第一個位置,有多個Personal子串則取
第一個Persona
stmt1=con.prepareStatement(sql1);
rs1=stmt1.executeQuery();
while(rs1.next())
{
startper=rs1.getInt(1);
}//end While,因為是wher empno所以startper只會被賦予一次值
sql2=" select POSSTR(RESUME,'DEPARTMENT') "+" FROM EMP_RESUME " +" WHERE EMPNO =? AND RESUMEFORMAT ='ascii' ";
stmt2=con.prepareStatement(sql2);
stmt2.setString(1,empnum);
rs2=stmt2.executeQuery();
while(rs2.next())
{
startdpt=rs2.getInt(1);
}
//獲取第二個位置
startper1=startper-1;
sql3="select EMPNO,RESUME_FORMAT,"+" SUBSTR(RESUME,1,?)||SUBSTR(RESUME,?) AS RESUME "+
"FROM EMP_RESUME"+" WHERE EMPNO=? AND RESUME_FORMAT ='ascii' ";
//這一句sql3是SUBSTR是指對RESUME物件進行拆分,拆分範圍是從resume物件的第一個位置到 ?位置,然後再與從resume的 ?位置到結束這兩個子串進行合併成為新的clob物件RESUME,這個RESUME是顯示的CLOB物件,資料庫內的clob內容不變;也就是說SUBSTR是求resume的子串的
stmt3=con.prepareStatement(sql3);
stmt3.setInt(1,startper1);
stmt3.setInt(2,startdpt);
stmt3.setString(3,empnum);
rs3=stmt3.executeQuery();
while(rs3.next())
{
empno=rs3.getString(1);
resumefmt=rs3.getString(2);
resumelob=rs3.getClob(3);
long len=resumeclob.length();
int len1=(int)len;//前提是長度沒有那麼長
String resumeout=resumelob.getSubString(1,len1);
}//end while