Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/develop' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
MS-Song committed Jan 30, 2025
2 parents aaa4bb3 + 23a6696 commit 4bca2bb
Show file tree
Hide file tree
Showing 9 changed files with 1,306 additions and 1,182 deletions.
3 changes: 1 addition & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,4 @@
/bin
/.vscode
/.externalToolBuilders
.history/
.idea/
.history/
2 changes: 2 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -106,8 +106,10 @@ subprojects {
implementation('org.mariadb.jdbc:mariadb-java-client:2.2.3')
implementation('oracle:ojdbc6:11.2.0.3')
implementation('com.microsoft.sqlserver:mssql-jdbc:6.4.0.jre8')
implementation('org.postgresql:postgresql')
implementation('com.h2database:h2')


// web-socket
implementation('org.springframework.boot:spring-boot-starter-websocket')
implementation('org.webjars:sockjs-client:1.1.2')
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
zipStorePath=wrapper/dists
Original file line number Diff line number Diff line change
Expand Up @@ -156,8 +156,6 @@ public Database(@Length(max = 120) @NotBlank String host, @Length(max = 120) @No
* @param driver
* @param charset
* @param port
* @param createDate
* @param modifyDate
* @param name
*/
public Database(@Length(max = 120) @NotBlank String host, @Length(max = 120) @NotBlank String hostAlias,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,92 +43,95 @@ public MessageVo saveData(MultipartFile file, Long databaseId, String tableName,
if(!file.isEmpty()) {
// TODO - 파일을 저장 한 뒤에 비동기로 처리 하는 부분에 대한 고민이 필요하다.
try {
Database database = dbclientManager.getDatabase(databaseId);
ExecuteQueryDto dto = new ExecuteQueryDto(database.getId(), session.getLogin().getLoginId());
dto.setIp("CVS UPLOAD");
dto.setAutoCommit(true);
dto.setHtmlAllow(false);
dto.setUseCache(false);
dto.setUseLimit(false);

String createTableSql = null;
String columnType = null;
String tableCharset = "";
String insertSql = null;
List<String> insertValues = new ArrayList<String>();

// 테이블 사이즈 정의
switch(database.getDriver()) {
case ORACLE :
columnType=" varchar2(2000) ";
break;
case MYSQL :
columnType=" varchar(1000) ";
tableCharset="DEFAULT CHARSET=utf8";
break;
case MARIADB :
columnType=" varchar(1000) ";
tableCharset="DEFAULT CHARSET=utf8";
break;
case MSSQL :
columnType=" varchar(2000) ";
break;
case H2 :
columnType=" varchar(2000) ";
break;
Database database = dbclientManager.getDatabase(databaseId);
ExecuteQueryDto dto = new ExecuteQueryDto(database.getId(), session.getLogin().getLoginId());
dto.setIp("CVS UPLOAD");
dto.setAutoCommit(true);
dto.setHtmlAllow(false);
dto.setUseCache(false);
dto.setUseLimit(false);

String createTableSql = null;
String columnType = null;
String tableCharset = "";
String insertSql = null;
List<String> insertValues = new ArrayList<String>();

// 테이블 사이즈 정의
switch(database.getDriver()) {
case POSTGRESQL:
columnType=" varchar(2000) ";
break;
case ORACLE :
columnType=" varchar2(2000) ";
break;
case MYSQL :
columnType=" varchar(1000) ";
tableCharset="DEFAULT CHARSET=utf8";
break;
case MARIADB :
columnType=" varchar(1000) ";
tableCharset="DEFAULT CHARSET=utf8";
break;
case MSSQL :
columnType=" varchar(2000) ";
break;
case H2 :
columnType=" varchar(2000) ";
break;
default:
columnType=" varchar(1000) ";
break;
}

InputStream is = file.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line = null;
String[] column = null;
int loop=0;
while ((line = br.readLine()) != null) {
String[] values = line.split(",");
if(loop==0) {
// 테이블을 생성할 것인지?
if(isCreateTable) {
createTableSql= "create table " + tableName + "( ";

String[] columnDefine = new String[values.length];
for(int i=0; i<values.length;i++) {
columnDefine[i] = values[i].replaceAll("[^A-Za-z0-9]","") + columnType;
}
createTableSql+=String.join(",", columnDefine) + ") " + tableCharset;
logger.trace(format("{}", " CSV create table SQL "),createTableSql);

dto.setQuery(createTableSql);
dbclientManager.executeQuery(dto);
} // 테이블 생성 완료
// insert 하기 위해 insert 구문 생성
insertSql="insert into " + tableName ;
// values column 생성
column= new String[values.length];
}

InputStream is = file.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line = null;
String[] column = null;
int loop=0;
while ((line = br.readLine()) != null) {
String[] values = line.split(",");
if(loop==0) {
// 테이블을 생성할 것인지?
if(isCreateTable) {
createTableSql= "create table " + tableName + "( ";

String[] columnDefine = new String[values.length];
for(int i=0; i<values.length;i++) {
column[i] = values[i].replaceAll("[^A-Za-z0-9]","");
columnDefine[i] = values[i].replaceAll("[^A-Za-z0-9]","") + columnType;
}
} else {
// 필드를 기준으로 없는 데이터는 생성하여 넣는다.
String[] insertColumn = new String[values.length];
for(int i=0; i<values.length;i++) {
insertColumn[i] = column[i];
}
insertValues.add(insertSql + " ( " + String.join(",",insertColumn) + " ) " + "values('" + String.join("','",values) + "')");
}
loop++;
}
// insert 작업 시작
count=insertValues.size();

String query="";
for(String insertSQL : insertValues) {
query+=insertSQL+";";
createTableSql+=String.join(",", columnDefine) + ") " + tableCharset;
logger.trace(format("{}", " CSV create table SQL "),createTableSql);

dto.setQuery(createTableSql);
dbclientManager.executeQuery(dto);
} // 테이블 생성 완료
// insert 하기 위해 insert 구문 생성
insertSql="insert into " + tableName ;
// values column 생성
column= new String[values.length];
for(int i=0; i<values.length;i++) {
column[i] = values[i].replaceAll("[^A-Za-z0-9]","");
}
} else {
// 필드를 기준으로 없는 데이터는 생성하여 넣는다.
String[] insertColumn = new String[values.length];
for(int i=0; i<values.length;i++) {
insertColumn[i] = column[i];
}
insertValues.add(insertSql + " ( " + String.join(",",insertColumn) + " ) " + "values('" + String.join("','",values) + "')");
}
dto.setQuery(query);
dbclientManager.executeQuery(dto);
loop++;
}
// insert 작업 시작
count=insertValues.size();

String query="";
for(String insertSQL : insertValues) {
query+=insertSQL+";";
}
dto.setQuery(query);
dbclientManager.executeQuery(dto);

} catch (Exception e) {
throw new IllegalArgumentException("CSV 파일 저장 실패. 파일 내용을 확인해주세요\n" + e.getMessage());
Expand Down
Loading

0 comments on commit 4bca2bb

Please sign in to comment.