@@ -43,92 +43,95 @@ public MessageVo saveData(MultipartFile file, Long databaseId, String tableName,
4343 if (!file .isEmpty ()) {
4444 // TODO - 파일을 저장 한 뒤에 비동기로 처리 하는 부분에 대한 고민이 필요하다.
4545 try {
46- Database database = dbclientManager .getDatabase (databaseId );
47- ExecuteQueryDto dto = new ExecuteQueryDto (database .getId (), session .getLogin ().getLoginId ());
48- dto .setIp ("CVS UPLOAD" );
49- dto .setAutoCommit (true );
50- dto .setHtmlAllow (false );
51- dto .setUseCache (false );
52- dto .setUseLimit (false );
53-
54- String createTableSql = null ;
55- String columnType = null ;
56- String tableCharset = "" ;
57- String insertSql = null ;
58- List <String > insertValues = new ArrayList <String >();
59-
60- // 테이블 사이즈 정의
61- switch (database .getDriver ()) {
62- case ORACLE :
63- columnType =" varchar2(2000) " ;
64- break ;
65- case MYSQL :
66- columnType =" varchar(1000) " ;
67- tableCharset ="DEFAULT CHARSET=utf8" ;
68- break ;
69- case MARIADB :
70- columnType =" varchar(1000) " ;
71- tableCharset ="DEFAULT CHARSET=utf8" ;
72- break ;
73- case MSSQL :
74- columnType =" varchar(2000) " ;
75- break ;
76- case H2 :
77- columnType =" varchar(2000) " ;
78- break ;
46+ Database database = dbclientManager .getDatabase (databaseId );
47+ ExecuteQueryDto dto = new ExecuteQueryDto (database .getId (), session .getLogin ().getLoginId ());
48+ dto .setIp ("CVS UPLOAD" );
49+ dto .setAutoCommit (true );
50+ dto .setHtmlAllow (false );
51+ dto .setUseCache (false );
52+ dto .setUseLimit (false );
53+
54+ String createTableSql = null ;
55+ String columnType = null ;
56+ String tableCharset = "" ;
57+ String insertSql = null ;
58+ List <String > insertValues = new ArrayList <String >();
59+
60+ // 테이블 사이즈 정의
61+ switch (database .getDriver ()) {
62+ case POSTGRESQL :
63+ columnType =" varchar(2000) " ;
64+ break ;
65+ case ORACLE :
66+ columnType =" varchar2(2000) " ;
67+ break ;
68+ case MYSQL :
69+ columnType =" varchar(1000) " ;
70+ tableCharset ="DEFAULT CHARSET=utf8" ;
71+ break ;
72+ case MARIADB :
73+ columnType =" varchar(1000) " ;
74+ tableCharset ="DEFAULT CHARSET=utf8" ;
75+ break ;
76+ case MSSQL :
77+ columnType =" varchar(2000) " ;
78+ break ;
79+ case H2 :
80+ columnType =" varchar(2000) " ;
81+ break ;
7982 default :
8083 columnType =" varchar(1000) " ;
8184 break ;
82- }
83-
84- InputStream is = file .getInputStream ();
85- BufferedReader br = new BufferedReader (new InputStreamReader (is ));
86- String line = null ;
87- String [] column = null ;
88- int loop =0 ;
89- while ((line = br .readLine ()) != null ) {
90- String [] values = line .split ("," );
91- if (loop ==0 ) {
92- // 테이블을 생성할 것인지?
93- if (isCreateTable ) {
94- createTableSql = "create table " + tableName + "( " ;
95-
96- String [] columnDefine = new String [values .length ];
97- for (int i =0 ; i <values .length ;i ++) {
98- columnDefine [i ] = values [i ].replaceAll ("[^A-Za-z0-9]" ,"" ) + columnType ;
99- }
100- createTableSql +=String .join ("," , columnDefine ) + ") " + tableCharset ;
101- logger .trace (format ("{}" , " CSV create table SQL " ),createTableSql );
102-
103- dto .setQuery (createTableSql );
104- dbclientManager .executeQuery (dto );
105- } // 테이블 생성 완료
106- // insert 하기 위해 insert 구문 생성
107- insertSql ="insert into " + tableName ;
108- // values column 생성
109- column = new String [values .length ];
85+ }
86+
87+ InputStream is = file .getInputStream ();
88+ BufferedReader br = new BufferedReader (new InputStreamReader (is ));
89+ String line = null ;
90+ String [] column = null ;
91+ int loop =0 ;
92+ while ((line = br .readLine ()) != null ) {
93+ String [] values = line .split ("," );
94+ if (loop ==0 ) {
95+ // 테이블을 생성할 것인지?
96+ if (isCreateTable ) {
97+ createTableSql = "create table " + tableName + "( " ;
98+
99+ String [] columnDefine = new String [values .length ];
110100 for (int i =0 ; i <values .length ;i ++) {
111- column [i ] = values [i ].replaceAll ("[^A-Za-z0-9]" ,"" );
101+ columnDefine [i ] = values [i ].replaceAll ("[^A-Za-z0-9]" ,"" ) + columnType ;
112102 }
113- } else {
114- // 필드를 기준으로 없는 데이터는 생성하여 넣는다.
115- String [] insertColumn = new String [values .length ];
116- for (int i =0 ; i <values .length ;i ++) {
117- insertColumn [i ] = column [i ];
118- }
119- insertValues .add (insertSql + " ( " + String .join ("," ,insertColumn ) + " ) " + "values('" + String .join ("','" ,values ) + "')" );
120- }
121- loop ++;
122- }
123- // insert 작업 시작
124- count =insertValues .size ();
125-
126- String query ="" ;
127- for (String insertSQL : insertValues ) {
128- query +=insertSQL +";" ;
103+ createTableSql +=String .join ("," , columnDefine ) + ") " + tableCharset ;
104+ logger .trace (format ("{}" , " CSV create table SQL " ),createTableSql );
105+
106+ dto .setQuery (createTableSql );
107+ dbclientManager .executeQuery (dto );
108+ } // 테이블 생성 완료
109+ // insert 하기 위해 insert 구문 생성
110+ insertSql ="insert into " + tableName ;
111+ // values column 생성
112+ column = new String [values .length ];
113+ for (int i =0 ; i <values .length ;i ++) {
114+ column [i ] = values [i ].replaceAll ("[^A-Za-z0-9]" ,"" );
115+ }
116+ } else {
117+ // 필드를 기준으로 없는 데이터는 생성하여 넣는다.
118+ String [] insertColumn = new String [values .length ];
119+ for (int i =0 ; i <values .length ;i ++) {
120+ insertColumn [i ] = column [i ];
121+ }
122+ insertValues .add (insertSql + " ( " + String .join ("," ,insertColumn ) + " ) " + "values('" + String .join ("','" ,values ) + "')" );
129123 }
130- dto .setQuery (query );
131- dbclientManager .executeQuery (dto );
124+ loop ++;
125+ }
126+ // insert 작업 시작
127+ count =insertValues .size ();
128+
129+ String query ="" ;
130+ for (String insertSQL : insertValues ) {
131+ query +=insertSQL +";" ;
132+ }
133+ dto .setQuery (query );
134+ dbclientManager .executeQuery (dto );
132135
133136 } catch (Exception e ) {
134137 throw new IllegalArgumentException ("CSV 파일 저장 실패. 파일 내용을 확인해주세요\n " + e .getMessage ());
0 commit comments