1. 程式人生 > >mysql和postgresql資料庫間的資料遷移(註釋遷移)

mysql和postgresql資料庫間的資料遷移(註釋遷移)

package test;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;


public class Test {
//---------------------------------------讀取資料-------------------------------------
public static void main(String[] args) throws Exception {
Connection con = null;// 建立一個數據庫連線
PreparedStatement pre = null;// 建立預編譯語句物件,一般都是用這個而不用Statement
PreparedStatement pre1 = null;// 建立預編譯語句物件,一般都是用這個而不用Statement
ResultSet result = null;// 建立一個結果集物件
ResultSet result1 = null;// 建立一個表名結果集物件


try {
Class.forName("com.mysql.jdbc.Driver");// 載入mysql驅動程式
System.out.println("開始嘗試連線mydatabase資料庫!");
String url = "jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=utf8";
String user = "root";// 使用者名稱,系統預設的賬戶名
String password = "123456";// 你安裝時選設定的密碼

con = DriverManager.getConnection(url, user, password);
//con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase","root","123456");// 獲取連線
System.out.println("輸入資料庫--mydatabase--連線成功!");


//--------------------查看錶名-----------------------------------------****1改庫名*****---------
String sql1 = "select table_name from information_schema.tables where table_schema='"
+ "pdl_warehouse1"                 //***********************1改輸入庫名***************************
+ "'";
pre1 = con.prepareStatement(sql1);
result1 = pre1.executeQuery();// 執行查詢,注意括號中不需要再加引數

//--------------------檢視列名/型別/註釋--------------------------------------------------
while(result1.next()) {
System.out.println("------------進入庫中表:"+result1.getString("table_name"));

//---------------------------mysql輸入所需欄位------------------------------
/*String sql = "select column_name,column_comment,column_type from information_schema.columns where table_schema='mydatabase' and table_name='"
+ result1.getString("table_name")
+ "'";// 預編譯語句
*/

//---------------------------postgresql輸入所需欄位------------------------------
String sql = "select column_name,column_comment from information_schema.columns where table_schema='"
+ "pdl_warehouse1"              //**********************2改輸入庫名************************
+ "' and table_name='"
+ result1.getString("table_name")
+ "'";// 預編譯語句
pre = con.prepareStatement(sql);// 例項化預編譯語句
result = pre.executeQuery();// 執行查詢,注意括號中不需要再加引數 
System.out.println("結果集result="+result+"結果集result="+result1);

   importData(result1,result);//進入更新
   
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// 逐一將上面的幾個物件關閉,因為不關閉的話會影響效能、並且佔用資源
// 注意關閉的順序,最後使用的最先關閉
if (result1 != null)
result1.close();
if (result != null)
result.close();
if (pre1 != null)
pre1.close();
if (pre != null)
pre.close();
if (con != null)
con.close();
System.out.println("輸入資料庫--mydatabase--資料庫連線已關閉!");
} catch (Exception e) {
e.printStackTrace();
}
}


}
//-------------------------------------------更新資料-------------------------------------


public static String importData(ResultSet result1,ResultSet result) {


Connection con = null;// 建立一個數據庫連線
PreparedStatement pre = null;// 建立預編譯語句物件,一般都是用這個而不用Statement
PreparedStatement pre1 = null;// 建立預編譯語句物件,一般都是用這個而不用Statement

try {
//--------------------mysql-------------------
/*Class.forName("com.mysql.jdbc.Driver");// 載入mysql驅動程式
System.out.println("開始嘗試連線testdb資料庫!");
String url = "jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf8";
String user = "root";// 使用者名稱,系統預設的賬戶名
String password = "123456";// 你安裝時選設定的密碼
con = DriverManager.getConnection(url, user, password);// 獲取連線
System.out.println("testdb連線成功!");*/


//-------------------postgresql---------------
Class.forName("org.postgresql.Driver");// 載入postgresql驅動程式
System.out.println("開始嘗試連線test資料庫!");
String url = "jdbc:postgresql://101.201.144.119:8765/dw?useUnicode=true&characterEncoding=utf8";
String user = "etl_user";// 使用者名稱,系統預設的賬戶名
String password = "temp4you";// 你安裝時選設定的密碼
con = DriverManager.getConnection(url, user, password);// 獲取連線
System.out.println("dw連線成功!");


int num = 0;//統計資料個數

while(result.next()) {
// System.out.println("表名:"+result1.getString("table_name")+"欄位名:"+result.getString("column_name")+",欄位型別:"+result.getString("column_type")+",欄位註釋:"+result.getString("column_comment"));
System.out.println("表名:"+result1.getString("table_name")+"欄位名:"+result.getString("column_name")+",欄位註釋:"+result.getString("column_comment"));


//-------------------------更新mysql庫中表註釋-------------------------
/* String sql = "ALTER TABLE "
+ result1.getString("table_name")
+ " MODIFY COLUMN "
+result.getString("column_name")
+" "
+result.getString("column_type")
+" COMMENT "
+"'"
       +result.getString("column_comment")
       +"'";    // 預編譯語句
       
               */
  //--------------------更新postgresql庫中表註釋------------------
 //comment on column test.test.name is 'hahaname';
       ResultSet rs = con.getMetaData().getTables(null, null, result1.getString("table_name"), null);  
                if(rs.next() ) {                                          //判斷庫中是否存在某表
String sql = "comment on column "
+"dw1."        //**************************************3改輸出庫名*****************************
   +result1.getString("table_name")
   +"."
   +result.getString("column_name")
+" is '"
+result.getString("column_comment")
+"'"; 
pre = con.prepareStatement(sql);// 例項化預編譯語句
pre.execute();
   pre.close();

num = num + 1;
System.out.println("更新成功第" + (num) + "條資料");

//==========================日誌管理==============================
Timestamp currentTime= new Timestamp(System.currentTimeMillis()); 
System.out.println("=========================="+currentTime);
String sql1 = "insert into test.message values('"
+result1.getString("table_name")
+"','"
   +result.getString("column_name")
+"','"
+result.getString("column_comment")
+"','"
+currentTime
                                 + "')";

pre1 = con.prepareStatement(sql1);// 例項化預編譯語句
pre1.execute();
   pre1.close();
}
}


} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// 逐一將上面的幾個物件關閉,因為不關閉的話會影響效能、並且佔用資源
// 注意關閉的順序,最後使用的最先關閉
if (result != null)
result.close();
if (pre != null)
pre.close();
if (con != null)
con.close();
System.out.println("dw資料庫連線已關閉!");
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}



}