Java导出oracle表结构实例详解
Java导出oracle表结构实例详解
最近用到的,因为plsql是收费的,不让用,找了很多方法终于发现了这个。
核心语句
SELECTDBMS_METADATA.GET_DDL(U.OBJECT_TYPE,U.object_name),U.OBJECT_TYPE FROMUSER_OBJECTSU whereU.OBJECT_TYPE='TABLE' orU.OBJECT_TYPE='VIEW' orU.OBJECT_TYPE='INDEX' orU.OBJECT_TYPE='PROCEDURE' orU.OBJECT_TYPE='SEQUENCE' orU.OBJECT_TYPE='TRIGGER' orderbyU.OBJECT_TYPEdesc
自己写的Java方法,未做封装。
packagesql; importjava.io.FileInputStream; importjava.io.FileWriter; importjava.sql.Clob; importjava.sql.Connection; importjava.sql.DriverManager; importjava.sql.ResultSet; importjava.sql.Statement; importjava.util.ArrayList; importjava.util.List; importjava.util.Properties; publicclassMain{ privatestaticfinalStringTYPE_MARK="-1"; privatestaticStringSQL= "SELECTDBMS_METADATA.GET_DDL(U.OBJECT_TYPE,U.object_name),U.OBJECT_TYPE"+ "FROMUSER_OBJECTSU"+ "whereU.OBJECT_TYPE='TABLE'"+ "orU.OBJECT_TYPE='VIEW'"+ "orU.OBJECT_TYPE='INDEX'"+ "orU.OBJECT_TYPE='PROCEDURE'"+ "orU.OBJECT_TYPE='SEQUENCE'"+ "orU.OBJECT_TYPE='TRIGGER'"+ "orderbyU.OBJECT_TYPEdesc"; privatestaticStringURL="jdbc:oracle:thin:@192.168.1.2:1521:orcl"; privatestaticStringUSERNAME="abc"; privatestaticStringPASSWORD="abc"; privatestaticStringOUTFILE="tables.sql"; /** *@paramargs *@throwsException *@throws */ publicstaticvoidmain(String[]args)throwsException{ //TODOAuto-generatedmethodstub Propertiesproperties=newProperties(); properties.load(newFileInputStream("config.properties")); URL=properties.getProperty("url",URL); USERNAME=properties.getProperty("username",USERNAME); PASSWORD=properties.getProperty("password",PASSWORD); OUTFILE=properties.getProperty("outfile",OUTFILE); SQL=properties.getProperty("sql",SQL); FileWriterfw=newFileWriter(OUTFILE); Class.forName("oracle.jdbc.driver.OracleDriver"); Connectioncon=DriverManager.getConnection(URL,USERNAME,PASSWORD); Statementstatement=con.createStatement(); ResultSetrs=statement.executeQuery(SQL); Clobddl; Stringtype=TYPE_MARK; intcount=0; Listlist=newArrayList (); while(rs.next()){ ddl=rs.getClob(1); fw.write(ddl.getSubString(1L,(int)ddl.length())); if(!rs.getString(2).equals(type)){ if(!type.equals(TYPE_MARK)){ list.add(type+","+count); type=rs.getString(2); count=1; }else{ type=rs.getString(2); count++; } }else count++; } list.add(type+","+count); fw.flush(); fw.close(); rs.close(); statement.close(); con.close(); for(Stringtype1:list) System.out.print(type1.split(",")[0]+":"+type1.split(",")[1]+";"); System.out.println(); } }
config.properties
url=jdbc:oracle:thin:@192.168.1.2:1521:orcl username=abc password=abc outfile=tables.sql sql=SELECTDBMS_METADATA.GET_DDL(U.OBJECT_TYPE,U.object_name),U.OBJECT_TYPE\ FROMUSER_OBJECTSU\ whereU.OBJECT_TYPE='TABLE'\ orU.OBJECT_TYPE='VIEW'\ orU.OBJECT_TYPE='INDEX'\ orU.OBJECT_TYPE='PROCEDURE'\ orU.OBJECT_TYPE='SEQUENCE'\ orU.OBJECT_TYPE='TRIGGER'\ orderbyU.OBJECT_TYPEdesc
另外需要jdbc的Oracle驱动。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!