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

@ -12,7 +12,7 @@ public interface DatabaseMapper {
/**
* 데이터베이스 스키마 조회 [comtsysdbinfo]테이블에 데이터를 저장한다
*
*
* @param vo
* @return
* @throws Exception
@ -21,7 +21,7 @@ public interface DatabaseMapper {
/**
* 사용자가 입력한 연결정보를 [comttblinfo]테이블에 저장한다
*
*
* @param vo
* @return
* @throws Exception
@ -30,7 +30,7 @@ public interface DatabaseMapper {
/**
* [comttblinfo]테이블에 저장된 내용을 조회한다
*
*
* @param vo
* @return
*/
@ -38,7 +38,7 @@ public interface DatabaseMapper {
/**
* Yaml 파일을 업데이트하기 위해 목록을 조회한다(pg_chameleon yaml용이나, 차후 다른 용도로 쓰임이 있다 판단되면 수정)
*
*
* @param vo
* @return
*/
@ -46,12 +46,28 @@ public interface DatabaseMapper {
/**
* DB 연결 정보 검증(중복확인)
*
*
* @param vo
* @return
*/
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 정보 관리 리스트
*

View File

@ -10,7 +10,7 @@ public interface DatabaseService {
/**
* 데이터베이스 스키마 조회 [comtsysdbinfo]테이블에 데이터를 저장한다
*
*
* @param vo
* @return
* @throws Exception
@ -19,7 +19,7 @@ public interface DatabaseService {
/**
* 사용자가 입력한 연결정보를 [comttblinfo]테이블에 저장한다
*
*
* @param vo
* @return
* @throws Exception
@ -28,7 +28,7 @@ public interface DatabaseService {
/**
* [comttblinfo]테이블에 저장된 내용을 조회한다(단일)
*
*
* @param vo
* @return
*/
@ -36,7 +36,7 @@ public interface DatabaseService {
/**
* Yaml 파일을 업데이트하기 위해 목록을 조회한다(pg_chameleon yaml용이나 차후 다른 용도로 쓰임이 있다 판단되면 수정)
*
*
* @param vo
* @return
*/
@ -50,6 +50,26 @@ public interface DatabaseService {
*/
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 정보 관리 리스트

View File

@ -43,6 +43,16 @@ public class DatabaseServiceImpl extends EgovAbstractServiceImpl implements Data
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
public List<DatabaseInfoVO> selectRegisterdDBInfoList(DatabaseInfoVO vo) {
return databaseMapper.selectRegisterdDBInfoList(vo);

View File

@ -1,13 +1,14 @@
package egovframework.com.mtdata.schema.service.impl;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.*;
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.LoggerFactory;
import org.springframework.stereotype.Service;
@ -25,11 +26,15 @@ public class MySQLSchemaViewerImpl implements DatabaseSchemaViewer {
@Resource(name = "DatabaseService")
private DatabaseService dbService;
@Resource(name = "ComtsrcdataService")
private ComtsrcdataService comtsrcdataService;
private String url;
private String user;
private String password;
private int dbConnId;
static {
try {
Class.forName(JDBC_DRIVER);
@ -46,8 +51,8 @@ public class MySQLSchemaViewerImpl implements DatabaseSchemaViewer {
dbConnId = dbInfoVO.getDbConnId();
try (Connection conn = DriverManager.getConnection(url, user, password)) {
processDatabases(conn);
} catch (SQLException e) {
processDatabases(conn, dbInfoVO);
} catch (Exception e) {
log.error("Error while connecting to the database: ", e);
}
@ -61,48 +66,52 @@ public class MySQLSchemaViewerImpl implements DatabaseSchemaViewer {
// while (databases.next()) {
// dbNm = databases.getString(1);
// System.out.println("dbName : " + dbNm);
// vo.setDbNmEn(dbNm);
// int insertDbList = dbService.insertDbinfo(vo);
//
// dbInfoVO.setDbNm(dbNm);
// int insertDbList = dbService.insertDbInfo(dbInfoVO);
//
// DatabaseMetaData metaData = conn.getMetaData();
// ResultSet tables = metaData.getTables(dbNm, null, "%", null); //catalog, schemaPattern, tableNamePattern, types
// // 여기서 부터 필요한 테이블의 정보를 출력함
// while(tables.next()) {
// String tableName = tables.getString(3);
// System.out.println("Table : " + tableName);
//
//
// ResultSet columns = metaData.getColumns(dbNm, null, tableName, "%");
// while (columns.next()) {
// String columnName = columns.getString(4);
// String columnType = columns.getString(6);
// System.out.println("\tColumn: " + columnName+ " (" + columnType + ")");
// }
//
//
// }
// }
// } catch (SQLException e) {
// } catch (Exception e) {
// 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')";
try (Statement stmt = conn.createStatement(); ResultSet databases = stmt.executeQuery(selectDbSql)) {
// 스키마
while (databases.next()) {
String dbNm = databases.getString("Database");
log.info("dbName : {}", dbNm);
DatabaseInfoVO vo = new DatabaseInfoVO();
vo.setDbConnId(dbConnId);
vo.setDbNm(dbNm);
DatabaseInfoVO dbVo = new DatabaseInfoVO();
dbVo.setDbConnId(dbConnId);
dbVo.setDbNm(dbNm);
if (dbService == null) {
log.error("dbService is null");
}
int insertDbList = dbService.insertDbInfo(vo);
int insertDbList = dbService.insertDbInfo(dbVo);
if (insertDbList > 0) {
dbVo.setSysId(dbConnInfoVO.getSysId());
tableProcess(conn, dbVo);
comtProcess(conn, dbVo);
log.info("Database info successfully inserted for: {}", dbNm);
} else {
log.warn("No database info was inserted for: {}", dbNm);
@ -112,4 +121,138 @@ public class MySQLSchemaViewerImpl implements DatabaseSchemaViewer {
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();
}
}
}