java将oracle一个表的数据同步到另一个数据库的表(转载)

Java代码 复制代码  收藏代码
  1. import java.sql.Connection;   
  2. import java.sql.DriverManager;   
  3. import java.sql.ResultSet;   
  4. import java.sql.SQLException;   
  5. import java.sql.Statement;   
  6. import java.util.ArrayList;   
  7. import java.util.Date;   
  8. import java.util.List;   
  9.   
  10.   
  11. public class Bak {   
  12.        
  13.     public static String shengchanku = "aaa";//生产库登录名   
  14.     public static String shengchanku_pw = "1";//生产库密码   
  15.     public static String shengchanku_serviceName = "127.0.0.1";//生产库服务名   
  16.        
  17.     public static String ceshiku = "aaatest";//测试库登录名   
  18.     public static String ceshiku_pw = "1";//测试库密码   
  19.     public static String ceshiku_serviceName = "127.0.0.1";//测试库服务名   
  20.        
  21.     /**  
  22.      * @param args  
  23.      * @throws SQLException  
  24.      */  
  25.     public static void main(String[] args){   
  26.         Date d = new Date();   
  27.         long start = d.getTime();   
  28.         String msg = "";   
  29.         Connection conn = null;   
  30.         try {   
  31.             conn = getConnection();   
  32.         } catch (Exception e1) {   
  33.             msg = "获取生产库链接失败";   
  34.         }   
  35.         Connection connTest = null;   
  36.         try {   
  37.             connTest = getTestConnection();   
  38.         } catch (Exception e1) {   
  39.             msg = "获取测试库链接失败";   
  40.         }   
  41.         if("".equals(msg)){   
  42.             try {   
  43.                 //开启事务   
  44.                 conn.setAutoCommit(false);   
  45.                    
  46.                 //查询出生产库所有表的名称   
  47.                 List list_table_names = new ArrayList();   
  48.                 Statement stmt = conn.createStatement();   
  49.                 ResultSet rs = stmt.executeQuery("select table_name from user_tables");   
  50.                 while(rs.next()){   
  51.                     list_table_names.add(rs.getString(1));   
  52.                 }   
  53.                 rs.close();   
  54.                 stmt.close();   
  55.                    
  56.                 //查询测试库所有表的名称   
  57.                 List list_table_names_test = new ArrayList();   
  58.                 stmt = connTest.createStatement();   
  59.                 rs = stmt.executeQuery("select table_name from user_tables");   
  60.                 while(rs.next()){   
  61.                     list_table_names_test.add(rs.getString(1));   
  62.                 }   
  63.                    
  64.                 //拼接往测试库每个表插数据的sql   
  65.                 String table_name = "";   
  66.                 List sql_create = new ArrayList();   
  67.                 for(int i =0;i
  68.                     table_name = list_table_names.get(i);   
  69.                     sql_create.add("create table "+ceshiku+"."+table_name+" AS SELECT * FROM "+shengchanku+"."+table_name+"");   
  70.                 }   
  71.                    
  72.                 //拼接删除测试库表的sql   
  73.                 List sql_drop = new ArrayList();   
  74.                 for(int i =0;i
  75.                     table_name = list_table_names_test.get(i);   
  76.                     sql_drop.add("drop table "+ceshiku+"." + table_name);   
  77.                 }   
  78.                    
  79.                 //删除测试库的数据   
  80.                 stmt = conn.createStatement();   
  81.                 for(int i = 0 ;i
  82.                     stmt.addBatch(sql_drop.get(i));   
  83.                 }   
  84.                    
  85.                 //执行删除sql   
  86.                 int[] result = stmt.executeBatch();   
  87.                 System.out.println("执行删除表:" + result.length);   
  88.                 stmt.close();   
  89.   
  90.                 //重新创建测试库的数据   
  91.                 stmt = connTest.createStatement();   
  92.                 for(int i = 0 ;i
  93.                     stmt.addBatch(sql_create.get(i));   
  94.                 }   
  95.                    
  96.                 //执行创建sql   
  97.                 result = stmt.executeBatch();   
  98.                 System.out.println("执行创建表:" + result.length);   
  99.                 stmt.close();   
  100.                    
  101.                 //提交事务   
  102.                 conn.setAutoCommit(true);   
  103.             } catch (SQLException e) {   
  104.                 e.printStackTrace();   
  105.             }finally{   
  106.                 try {   
  107.                     conn.close();   
  108.                     connTest.close();   
  109.                 } catch (SQLException e) {   
  110.                     e.printStackTrace();   
  111.                 }   
  112.             }   
  113.         }else{   
  114.             System.out.println(msg);   
  115.         }   
  116.            
  117.         d = new Date();   
  118.         long end = d.getTime();   
  119.   
  120.         System.out.println("执行时间:" + (end-start) + "毫秒");   
  121.     }   
  122.        
  123.     //获取生产库链接   
  124.     public static Connection getConnection() throws Exception{   
  125.         Connection ct = null;   
  126.         Class.forName("oracle.jdbc.driver.OracleDriver");   
  127.         ct = DriverManager.getConnection("jdbc:oracle:thin:"+shengchanku+"/"+shengchanku_pw+"@"+shengchanku_serviceName+":1521:orcl");   
  128.         return ct;   
  129.     }   
  130.        
  131.     //获取测试库链接   
  132.     public static Connection getTestConnection() throws Exception{   
  133.         Connection ct = null;   
  134.         Class.forName("oracle.jdbc.driver.OracleDriver");   
  135.         ct = DriverManager.getConnection("jdbc:oracle:thin:"+ceshiku+"/"+ceshiku_pw+"@"+ceshiku_serviceName+":1521:orcl");   
  136.         return ct;   
  137.     }   
  138.   
  139. }  
  140. 如果是我实现的话,我会选择用存储过程来写,用dblink 获取正式库的数据,插入到测试库的表

你可能感兴趣的:(j2se)