database 로직 추가

This commit is contained in:
psh 2024-06-07 11:05:56 +09:00
parent 3cb391fb66
commit a5edd57516
4 changed files with 216 additions and 27 deletions

View File

@ -52,6 +52,22 @@ public interface DatabaseMapper {
*/ */
public int checkDbConnInfo(DatabaseInfoVO vo); public int checkDbConnInfo(DatabaseInfoVO vo);
/**
* 스키마 테이블정보를 [inst_db_tbl_info] 테이블에 저장한다.
*
* @param tbVo
* @return
*/
public int insertDbTblInfo(TableInfoVO tbVo);
/**
* 컬럼 정보를 [inst_tbl_col_info] 테이블에 저장한다.
*
* @param colVo
* @return
*/
public int insertTblColInfo(ColumnInfoVO colVo);
/** /**
* 등록된 DB 정보 관리 리스트 * 등록된 DB 정보 관리 리스트
* *

View File

@ -50,6 +50,26 @@ public interface DatabaseService {
*/ */
int checkDbConnInfo(DatabaseInfoVO vo); int checkDbConnInfo(DatabaseInfoVO vo);
/**
* 스키마 테이블정보를 [inst_db_tbl_info] 테이블에 저장한다.
*
* @param tbVo
* @return
*/
int insertDbTblInfo(TableInfoVO tbVo) throws Exception;
/**
* 컬럼 정보를 [inst_tbl_col_info] 테이블에 저장한다.
*
* @param colVo
* @return
*/
public int insertTblColInfo(ColumnInfoVO colVo) throws Exception;
/** /**
* 등록된 DB 정보 관리 리스트 * 등록된 DB 정보 관리 리스트

View File

@ -43,6 +43,16 @@ public class DatabaseServiceImpl extends EgovAbstractServiceImpl implements Data
return databaseMapper.checkDbConnInfo(vo); return databaseMapper.checkDbConnInfo(vo);
} }
@Override
public int insertDbTblInfo(TableInfoVO tbVo) throws Exception {
return databaseMapper.insertDbTblInfo(tbVo);
}
@Override
public int insertTblColInfo(ColumnInfoVO colVo) throws Exception {
return databaseMapper.insertTblColInfo(colVo);
}
@Override @Override
public List<DatabaseInfoVO> selectRegisterdDBInfoList(DatabaseInfoVO vo) { public List<DatabaseInfoVO> selectRegisterdDBInfoList(DatabaseInfoVO vo) {
return databaseMapper.selectRegisterdDBInfoList(vo); return databaseMapper.selectRegisterdDBInfoList(vo);

View File

@ -1,13 +1,14 @@
package egovframework.com.mtdata.schema.service.impl; package egovframework.com.mtdata.schema.service.impl;
import java.sql.Connection; import java.sql.*;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.annotation.Resource; import javax.annotation.Resource;
import egovframework.com.mtdata.comtsrcdata.service.ComtsrcdataService;
import egovframework.com.mtdata.comtsrcdata.vo.ComtExtrtVO;
import egovframework.com.mtdata.comtsrcdata.vo.ComtsrcdataVO;
import egovframework.com.mtdata.database.vo.ColumnInfoVO;
import egovframework.com.mtdata.database.vo.TableInfoVO;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -25,11 +26,15 @@ public class MySQLSchemaViewerImpl implements DatabaseSchemaViewer {
@Resource(name = "DatabaseService") @Resource(name = "DatabaseService")
private DatabaseService dbService; private DatabaseService dbService;
@Resource(name = "ComtsrcdataService")
private ComtsrcdataService comtsrcdataService;
private String url; private String url;
private String user; private String user;
private String password; private String password;
private int dbConnId; private int dbConnId;
static { static {
try { try {
Class.forName(JDBC_DRIVER); Class.forName(JDBC_DRIVER);
@ -46,8 +51,8 @@ public class MySQLSchemaViewerImpl implements DatabaseSchemaViewer {
dbConnId = dbInfoVO.getDbConnId(); dbConnId = dbInfoVO.getDbConnId();
try (Connection conn = DriverManager.getConnection(url, user, password)) { try (Connection conn = DriverManager.getConnection(url, user, password)) {
processDatabases(conn); processDatabases(conn, dbInfoVO);
} catch (SQLException e) { } catch (Exception e) {
log.error("Error while connecting to the database: ", e); log.error("Error while connecting to the database: ", e);
} }
@ -61,8 +66,8 @@ public class MySQLSchemaViewerImpl implements DatabaseSchemaViewer {
// while (databases.next()) { // while (databases.next()) {
// dbNm = databases.getString(1); // dbNm = databases.getString(1);
// System.out.println("dbName : " + dbNm); // System.out.println("dbName : " + dbNm);
// vo.setDbNmEn(dbNm); // dbInfoVO.setDbNm(dbNm);
// int insertDbList = dbService.insertDbinfo(vo); // int insertDbList = dbService.insertDbInfo(dbInfoVO);
// //
// DatabaseMetaData metaData = conn.getMetaData(); // DatabaseMetaData metaData = conn.getMetaData();
// ResultSet tables = metaData.getTables(dbNm, null, "%", null); //catalog, schemaPattern, tableNamePattern, types // ResultSet tables = metaData.getTables(dbNm, null, "%", null); //catalog, schemaPattern, tableNamePattern, types
@ -80,29 +85,33 @@ public class MySQLSchemaViewerImpl implements DatabaseSchemaViewer {
// //
// } // }
// } // }
// } catch (SQLException e) { // } catch (Exception e) {
// e.printStackTrace(); // e.printStackTrace();
// } // }
} }
private void processDatabases(Connection conn) throws SQLException { 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', 'mysql', 'performance_schema', 'sys')"; String selectDbSql = "SELECT SCHEMA_NAME AS `Database` FROM information_schema.SCHEMATA WHERE SCHEMA_NAME NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')";
try (Statement stmt = conn.createStatement(); ResultSet databases = stmt.executeQuery(selectDbSql)) { try (Statement stmt = conn.createStatement(); ResultSet databases = stmt.executeQuery(selectDbSql)) {
// 스키마
while (databases.next()) { while (databases.next()) {
String dbNm = databases.getString("Database"); String dbNm = databases.getString("Database");
log.info("dbName : {}", dbNm); log.info("dbName : {}", dbNm);
DatabaseInfoVO vo = new DatabaseInfoVO(); DatabaseInfoVO dbVo = new DatabaseInfoVO();
vo.setDbConnId(dbConnId); dbVo.setDbConnId(dbConnId);
vo.setDbNm(dbNm); dbVo.setDbNm(dbNm);
if (dbService == null) { if (dbService == null) {
log.error("dbService is null"); log.error("dbService is null");
} }
int insertDbList = dbService.insertDbInfo(vo); int insertDbList = dbService.insertDbInfo(dbVo);
if (insertDbList > 0) { if (insertDbList > 0) {
dbVo.setSysId(dbConnInfoVO.getSysId());
tableProcess(conn, dbVo);
comtProcess(conn, dbVo);
log.info("Database info successfully inserted for: {}", dbNm); log.info("Database info successfully inserted for: {}", dbNm);
} else { } else {
log.warn("No database info was inserted for: {}", dbNm); log.warn("No database info was inserted for: {}", dbNm);
@ -112,4 +121,138 @@ public class MySQLSchemaViewerImpl implements DatabaseSchemaViewer {
log.error("Error processing databases", e); log.error("Error processing databases", e);
} }
} }
//psh
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());
if(tbNm.equals("sys_config")){
break;
}
tbVo.setTableNm(tbNm);
log.info("TableName :", tbNm);
int insertTbCnt = dbService.insertDbTblInfo(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();
}
}
//psh
private void comtProcess(Connection conn, DatabaseInfoVO dbVo) throws SQLException {
DatabaseMetaData metaData = conn.getMetaData();
try (ResultSet tables = metaData.getTables(null, dbVo.getDbNm(), null, new String[]{"TABLE"})){
// 원천데이터 추출 정보 저장
ComtExtrtVO comExVo = new ComtExtrtVO();
comExVo.setSysId(dbVo.getSysId());
int extCnt = comtsrcdataService.insertComtExtrtInfo(comExVo);
if (extCnt > 0) {
int checkSysId = dbVo.getSysId();
log.info("comtExInfo insert success : ", checkSysId);
String dbNm = dbVo.getDbNm();
while (tables.next()) {
String tbNm = tables.getString("TABLE_NAME");
if(tbNm.equals("sys_config")){
break;
}
// 원천데이터 저장
String selectTableSql = "SELECT * FROM "+dbNm+"."+tbNm;
Statement stmt = conn.createStatement();
ResultSet datas = stmt.executeQuery(selectTableSql);
while (datas.next()){
int i = 0;
ComtsrcdataVO comSrcVo = new ComtsrcdataVO();
comSrcVo.setExtrId(comExVo.getExtrId());
String value = datas.getObject(i).toString();
// comSrcVo.setSrcDataVl();
int insertTbCnt = comtsrcdataService.insertComtSrcdataInfo(comSrcVo);
i++;
}
// if (insertTbCnt > 0) {
//
// log.info("COMTSRCDATA 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();
// dbService.insertTblColInfo(colVo);
// System.out.println("\tColumn: " + columnName+ " (" + columnType + ")");
// }
// } else {
// log.warn("No TABLE info was inserted for: {}", tbNm);
// }
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
} }