Pessoal, essa semana me deparei com a seguite situação. precisei de uma base gis para teste no oracle e só possuia uma base de exemplo no postgres.
A primeira opção era exportar as tabelas do postgres para shapefile e depois importar no oracle. ainda não tive tempo para ver o porque de não ter funcionado (deu um erro bruto no aplicativo da oracle pra fazer a importação), mas como segunda opção, fiz uma classe Main pra fazer a migração.
Vai o exemplo pra quem precisar ou tiver alguma situação parecida. Pra mim funcionou muito bem e quando sobrar um tempo, vou pensar em um aplicativo pra facilitar esse tipo de coisa e postar o fonte no gogle code.
package sdoapi;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import oracle.jdbc.driver.OracleConnection;
import oracle.spatial.geometry.JGeometry;
import oracle.spatial.util.GeometryExceptionWithContext;
import oracle.spatial.util.WKT;
import oracle.sql.STRUCT;
public class Main {
public static void main(String[] args) {
Connection connOracle;
Connection connPostgres;
PreparedStatement ps;
try {
//connect postgis and select data
Class.forName("org.postgresql.Driver");
connPostgres = DriverManager.getConnection("jdbc:postgresql://localhost:5432/dbsolap", "postgres", "postgres");
Statement st = connPostgres.createStatement();
ResultSet rs = st.executeQuery("select id_micro,id_meso,nomemicro,ST_AsText(the_geom) as the_geom from microregiao;");
// connect oracle
Class.forName("oracle.jdbc.driver.OracleDriver");
connOracle = DriverManager.getConnection("jdbc:oracle:thin:@//localhost:1521/orcl", "igor", "oracle");
WKT wkt = new WKT();
ps = connOracle.prepareStatement("insert into microregiao values(?,?,?,?)");
// process resultset postgis and insert oracle
while (rs.next()) {
Integer param1 = rs.getInt("id_micro");
Integer param2 = rs.getInt("id_meso");
String param3 = rs.getString("nomemicro");
String param4 = rs.getString("the_geom");
JGeometry geom = wkt.toJGeometry(param4.getBytes());
OracleConnection oc = (OracleConnection) ps.getConnection();
STRUCT struct = JGeometry.store(geom, oc);
ps.setInt(1, param1);
ps.setInt(2, param2);
ps.setString(3, param3);
ps.setObject(4, struct);
ps.executeUpdate();
}
} catch (GeometryExceptionWithContext ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
T+ 