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