В моем проекте мы разрабатываем инструмент для передачи данных из Oracle в базу данных DB2.Мой подход заключается в том, чтобы извлекать данные таблицы из таблицы Oracle и вставлять их в таблицу таблицы DB2.Моя реализация -
package com.rolta.ntps.service;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import org.apache.log4j.Logger;
import com.rolta.ntpc.Util.JdbcDB2Connection;
import com.rolta.ntpc.Util.JdbcOracleConnection;
public class PRJCT_TYPE_MST {
static Logger logger = Logger.getLogger(BOI_ITEM_DTL.class);
public void getAndInsertData(String tableName) {
logger.info("**************Fetching Data From Table "+tableName+"*************");
try {
JdbcOracleConnection oracleStem = new JdbcOracleConnection();
Statement oracleSmt = oracleStem.oracleStatement();
ArrayList<Integer> prjct_type_key = new ArrayList<Integer>();
ArrayList<Integer> prjct_drtn = new ArrayList<Integer>();
ArrayList<String> prjct_type_code = new ArrayList<String>();
ArrayList<String> prjct_type_desc = new ArrayList<String>();
ArrayList<String> crt_by = new ArrayList<String>();
ArrayList<String> upd_by = new ArrayList<String>();
ArrayList<String> audit_crt_date = new ArrayList<String>();
ArrayList<String> audit_upd_date = new ArrayList<String>();
String query = "select * from NTPC2." + tableName;
System.out.println("Query is : " + query);
logger.info("Oracle Query is : " + query);
ResultSet oracleRS = oracleSmt.executeQuery(query);
int rowCountInOracle = 0;
System.out.println("*************Data From Oracle Table************");
while(oracleRS.next()) {
prjct_type_key.add(oracleRS.getInt("PRJCT_TYPE_KEY"));
prjct_drtn.add(oracleRS.getInt("PRJCT_DRTN"));
prjct_type_code.add(oracleRS.getString("PRJCT_TYPE_CODE"));
prjct_type_desc.add(oracleRS.getString("PRJCT_TYPE_DESC"));
crt_by.add(oracleRS.getString("CRT_BY"));
upd_by.add(oracleRS.getString("UPD_BY"));
audit_crt_date.add(oracleRS.getString("AUDIT_CRT_DATE"));
audit_upd_date.add(oracleRS.getString("AUDIT_UPD_DATE"));
++rowCountInOracle;
}
System.out.println("Row count is : "+ rowCountInOracle);
logger.info("Row count is : "+ rowCountInOracle);
logger.info("Inserting Data To DB2");
JdbcDB2Connection db2Object = new JdbcDB2Connection();
Statement db2Smt = db2Object.dB2Statement();
String db2Query = "SELECT * from DRAWING."+tableName;
ResultSet db2RS = db2Smt.executeQuery(db2Query);
for(int i = 0; i < rowCountInOracle; i++) {
db2RS.moveToInsertRow();
db2RS.updateInt("PRJCT_TYPE_KEY", prjct_type_key.get(i));
db2RS.updateInt("PRJCT_DRTN", prjct_drtn.get(i));
db2RS.updateString("PRJCT_TYPE_CODE", prjct_type_code.get(i));
db2RS.updateString("PRJCT_TYPE_DESC", prjct_type_desc.get(i));
db2RS.updateString("CRT_BY", crt_by.get(i));
db2RS.updateString("UPD_BY", upd_by.get(i));
if(audit_crt_date.get(i) != null) {
db2RS.updateDate("AUDIT_CRT_DATE", stringToDate(audit_crt_date.get(i)));
} else {
System.out.println("audit_crt_date date is null");
logger.info("audit_crt_date date is null");
}
if(audit_upd_date.get(i) != null) {
db2RS.updateDate("AUDIT_UPD_DATE", stringToDate(audit_upd_date.get(i)));
} else {
System.out.println("audit_upd_date date is null");
logger.info("audit_upd_date date is null");
}
}
} catch(Exception ex) {
ex.printStackTrace();
}
}
public static java.sql.Date stringToDate(String date) {
logger.info("Accepted Date Format is - MM-DD-YYYY");
logger.info("Converting String : "+ date +" into Date Format");
SimpleDateFormat sdf = new SimpleDateFormat("MM/DD/YYYY");
java.util.Date utilDate;
java.sql.Date sqlDate = null;
try {
utilDate = sdf.parse(date);
sqlDate = new java.sql.Date(utilDate.getTime());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
logger.info("Date is : "+ sqlDate);
return sqlDate;
}
}
Этот подход работает, но я не удовлетворен производительностью.Я понимаю, это не код оптимизации производительности, потому что я читаю строку за строкой из таблицы из Oracle и вставляю строку за строкой в DB2.
Может ли кто-нибудь помочь мне найти лучший подход?