postgre 추가, 접속데이터베이스명 컬럼 추가
This commit is contained in:
parent
e630ceeed5
commit
78a39288c9
@ -39,6 +39,9 @@ public class DatabaseInfoVO {
|
||||
/** 데이터베이스 접속PORT */
|
||||
private Integer dbConnPort;
|
||||
|
||||
/** 데이터베이스 접속 데이터베이스 명 */
|
||||
private String dbConnDatabase;
|
||||
|
||||
/** 데이터베이스 접속 계정 */
|
||||
private String dbConnUser;
|
||||
|
||||
|
||||
@ -2,6 +2,14 @@ package egovframework.com.mtdata.schema.service.impl;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import egovframework.com.mtdata.comtsrcdata.service.ComtsrcdataService;
|
||||
import egovframework.com.mtdata.comtsrcdata.vo.ComtColVO;
|
||||
import egovframework.com.mtdata.comtsrcdata.vo.ComtExtrtVO;
|
||||
import egovframework.com.mtdata.comtsrcdata.vo.ComtTableVO;
|
||||
import egovframework.com.mtdata.comtsrcdata.vo.ComtsrcdataVO;
|
||||
import egovframework.com.mtdata.database.vo.ColumnInfoVO;
|
||||
import egovframework.com.mtdata.database.vo.TableInfoVO;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -10,23 +18,210 @@ import egovframework.com.mtdata.database.service.DatabaseService;
|
||||
import egovframework.com.mtdata.database.vo.DatabaseInfoVO;
|
||||
import egovframework.com.mtdata.schema.service.DatabaseSchemaViewer;
|
||||
|
||||
import java.sql.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Service("postgreSchemViewer")
|
||||
public class PostgreSQLSchemaViewerImpl implements DatabaseSchemaViewer {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(PostgreSQLSchemaViewerImpl.class);
|
||||
// private static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
|
||||
private static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
|
||||
|
||||
@Resource(name = "DatabaseService")
|
||||
private DatabaseService dbService;
|
||||
|
||||
@Resource(name = "ComtsrcdataService")
|
||||
private ComtsrcdataService comtsrcdataService;
|
||||
|
||||
private String url;
|
||||
private String user;
|
||||
private String password;
|
||||
private int sysDataId;
|
||||
private int sysId;
|
||||
private int dbConnId;
|
||||
|
||||
static {
|
||||
try {
|
||||
Class.forName(JDBC_DRIVER);
|
||||
} catch (ClassNotFoundException e) {
|
||||
log.error("JDBC Driver loading error", e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void viewSchema(DatabaseInfoVO dbInfoVO) {
|
||||
url = "jdbc:postgresql://" + dbInfoVO.getDbConnIp() + ":" + dbInfoVO.getDbConnPort() +"/"+ dbInfoVO.getDbConnDatabase();
|
||||
user = dbInfoVO.getDbConnUser();
|
||||
password = dbInfoVO.getDbConnPw();
|
||||
dbConnId = dbInfoVO.getDbConnId();
|
||||
|
||||
try (Connection conn = DriverManager.getConnection(url, user, password)) {
|
||||
processDatabases(conn, dbInfoVO);
|
||||
} catch (Exception e) {
|
||||
log.error("Error while connecting to the database: ", e);
|
||||
}
|
||||
}
|
||||
|
||||
// 기관정보 스키마
|
||||
private void processDatabases(Connection conn, DatabaseInfoVO dbConnInfoVO) {
|
||||
String selectDbSql = "SELECT SCHEMA_NAME AS Database FROM information_schema.schemata WHERE schema_name NOT IN ('information_schema', 'pg_catalog') AND schema_name not like 'pg_toast%' and schema_name not like 'pg_temp%'";
|
||||
try (Statement stmt = conn.createStatement(); ResultSet databases = stmt.executeQuery(selectDbSql)) {
|
||||
|
||||
// 스키마
|
||||
while (databases.next()) {
|
||||
String dbNm = databases.getString("Database");
|
||||
log.info("dbName : {}", dbNm);
|
||||
|
||||
DatabaseInfoVO dbVo = new DatabaseInfoVO();
|
||||
dbVo.setDbConnId(dbConnId);
|
||||
dbVo.setDbNm(dbNm);
|
||||
|
||||
if (dbService == null) {
|
||||
log.error("dbService is null");
|
||||
}
|
||||
int insertDbList = dbService.insertDbInfo(dbVo);
|
||||
|
||||
if (insertDbList > 0) {
|
||||
dbVo.setSysId(dbConnInfoVO.getSysId());
|
||||
tableProcess(conn, dbVo);
|
||||
|
||||
log.info("Database info successfully inserted for: {}", dbNm);
|
||||
} else {
|
||||
log.warn("No database info was inserted for: {}", dbNm);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("Error processing databases", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 기관정보 테이블+컬럼
|
||||
private void tableProcess(Connection conn, DatabaseInfoVO dbVo) throws SQLException {
|
||||
// String selectTableSql = "SELECT TABLE_NAME AS `TableName` FROM information_schema.tables WHERE table_schema="+dbNm+"and table_type=`BASE TABLE`";
|
||||
DatabaseMetaData metaData = conn.getMetaData();
|
||||
try (ResultSet tables = metaData.getTables(null, dbVo.getDbNm(), null, new String[]{"TABLE"})){
|
||||
|
||||
int checkSysId = dbVo.getSysId();
|
||||
log.info("comtExInfo insert success : ", checkSysId);
|
||||
|
||||
// 테이블
|
||||
while (tables.next()) {
|
||||
String tbNm = tables.getString("TABLE_NAME");
|
||||
|
||||
TableInfoVO tbVo = new TableInfoVO();
|
||||
tbVo.setDbLinkId(dbVo.getDbLinkId());
|
||||
tbVo.setTableNm(tbNm);
|
||||
log.info("TableName :", tbNm);
|
||||
int insertTbCnt = dbService.insertDbTblInfo(tbVo);
|
||||
comtsrcProcess(conn, dbVo, tbVo);
|
||||
|
||||
if (insertTbCnt > 0) {
|
||||
log.info("TABLE info successfully inserted for: {}", tbNm);
|
||||
ResultSet columns = metaData.getColumns(null, dbVo.getDbNm(), tbNm, "%");
|
||||
ResultSet pk = metaData.getPrimaryKeys(null, dbVo.getDbNm(), tbNm);
|
||||
|
||||
// 컬럼
|
||||
while (columns.next()) {
|
||||
String columnName = columns.getString(4);
|
||||
String columnType = columns.getString(6);
|
||||
boolean nullable = columns.getInt(11) == 0 ? false : true;;
|
||||
|
||||
ColumnInfoVO colVo = new ColumnInfoVO();
|
||||
colVo.setTableId(tbVo.getTableId());
|
||||
colVo.setColumnNm(columnName);
|
||||
colVo.setColumnType(columnType);
|
||||
colVo.setNullable(nullable);
|
||||
colVo.setPkey(false);
|
||||
colVo.setFkey(false);
|
||||
// if(pk==columnName){
|
||||
// colVo.setIsPkey(false);
|
||||
// }else{
|
||||
// colVo.setIsPkey(false);
|
||||
// }
|
||||
|
||||
dbService.insertTblColInfo(colVo);
|
||||
System.out.println("\tColumn: " + columnName+ " (" + columnType + ")");
|
||||
}
|
||||
|
||||
} else {
|
||||
log.warn("No TABLE info was inserted for: {}", tbNm);
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 원천데이터 처리
|
||||
private void comtsrcProcess(Connection conn, DatabaseInfoVO dbVo, TableInfoVO tbVo) throws SQLException {
|
||||
try {
|
||||
// [ comtextrtblinfo ] 원천데이터 추출 정보 저장
|
||||
ComtExtrtVO comExVo = new ComtExtrtVO();
|
||||
comExVo.setSysId(dbVo.getSysId());
|
||||
int extCnt = comtsrcdataService.insertComtExtrtInfo(comExVo);
|
||||
|
||||
if (extCnt > 0) {
|
||||
String dbNm = dbVo.getDbNm();
|
||||
String tbNm = tbVo.getTableNm();
|
||||
|
||||
// [ comtsrcdatameta_new ] 원천테이블의 테이블 정보 저장
|
||||
ComtTableVO comtTableVo = new ComtTableVO();
|
||||
comtTableVo.setExtrId(comExVo.getExtrId());
|
||||
comtTableVo.setSrcDataTblNm(tbNm);
|
||||
int insertTbCnt = comtsrcdataService.insertComtTabledataInfo(comtTableVo);
|
||||
|
||||
if (insertTbCnt > 0) {
|
||||
String selectTableSql = "SELECT * FROM "+dbNm+"."+tbNm;
|
||||
Statement stmt = conn.createStatement();
|
||||
ResultSet datas = stmt.executeQuery(selectTableSql);
|
||||
ResultSetMetaData rsmd = datas.getMetaData();
|
||||
int colCnt = rsmd.getColumnCount();
|
||||
JSONObject obj = new JSONObject();
|
||||
int insertDataCnt = 0;
|
||||
int insertColCnt = 0;
|
||||
|
||||
// [ comtsrcdatacol_new ] 원천테이블의 컬럼 정보 저장
|
||||
for (int i=0; i<colCnt; i++) {
|
||||
ComtColVO colVo = new ComtColVO();
|
||||
colVo.setSrcDataColNm(rsmd.getColumnLabel(i+1));
|
||||
colVo.setSrcDataMetaId(comtTableVo.getSrcDataMetaId());
|
||||
insertColCnt = comtsrcdataService.insertComtSrcCol(colVo);
|
||||
}
|
||||
|
||||
// [ comtsrcdata_new ] 원천데이터 저장
|
||||
if(insertColCnt > 0){
|
||||
while (datas.next()){
|
||||
Map<String, String> dataVlMap = new HashMap<>();
|
||||
for (int i=0; i<colCnt; i++) {
|
||||
String columnName = rsmd.getColumnLabel(i+1);
|
||||
String value = datas.getString(i+1);
|
||||
dataVlMap.put(columnName, value);
|
||||
}
|
||||
obj.putAll(dataVlMap);
|
||||
ComtsrcdataVO srcVo = new ComtsrcdataVO();
|
||||
srcVo.setSrcDataVl(obj.toString());
|
||||
srcVo.setSrcDataMetaId(comtTableVo.getSrcDataMetaId());
|
||||
insertDataCnt = comtsrcdataService.insertComtSrcdata(srcVo);
|
||||
|
||||
if(insertDataCnt > 0){
|
||||
log.info("all data insert SUCCESS!!!!!!");
|
||||
}else{
|
||||
log.warn("No DATA was inserted for: {}", tbNm);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
log.warn("No COLUMN info was inserted for: {}", tbNm);
|
||||
}
|
||||
|
||||
}else{
|
||||
log.warn("No Table info was inserted for: {}", tbNm);
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -37,6 +37,7 @@
|
||||
DB_CONN_PW,
|
||||
DB_CONN_PORT,
|
||||
DB_CONN_IP,
|
||||
DB_CONN_DATABASE,
|
||||
REGISTER_ID)
|
||||
VALUES
|
||||
(#{sysId},
|
||||
@ -45,6 +46,7 @@
|
||||
#{dbConnPw},
|
||||
#{dbConnPort},
|
||||
#{dbConnIp},
|
||||
#{dbConnDatabase},
|
||||
#{registerId})
|
||||
</insert>
|
||||
|
||||
@ -57,6 +59,7 @@
|
||||
DB_CONN_PW ,
|
||||
DB_CONN_PORT ,
|
||||
DB_CONN_IP ,
|
||||
DB_CONN_DATABASE,
|
||||
DB_TYPE ,
|
||||
REGIST_DATE
|
||||
FROM INST_DB_CONN_INFO
|
||||
|
||||
Loading…
Reference in New Issue
Block a user