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; }