2013-11-28 14:58:24

Oracle JDBC获取DDL

在Oracle的console获取DDL语句:

SET LONG 2000000

SET PAGESIZE 0

EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false);

select dbms_metadata.GET_DDL(u.object_type,u.object_name,'SCOTT') from dba_objects u where owner = 'SCOTT'; 

这查询一旦搬到JDBC就会出问题,原因是查询出来的是Clob而非String 所以需要把Clob转换成String。

String clobToString(Clob clob) {
	try {
		// 以 java.io.Reader 对象形式(或字符流形式)  
		//检索此 Clob 对象指定的 CLOB 值 --Clob的转换  
		Reader inStreamDoc = clob.getCharacterStream();
		// 取得clob的长度  
		char[] tempDoc = new char[(int) clob.length()];
		inStreamDoc.read(tempDoc);
		inStreamDoc.close();
		return new String(tempDoc);
	} catch (IOException e) {
		e.printStackTrace();
	} catch (SQLException es) {
		es.printStackTrace();
	}
	return null;
}
String sqlSpecialChars(String str) {
	str = str.replaceAll("'", "''");
	return str;
}

 

发表回复