자바로 파일변환 및 쿼리문 txt생성!
2021. 9. 15. 14:55ㆍDB이관
반응형
##기존에 다른 동료가 하는 프로젝트에서 DB를 부분이관을 진행했는데 파일다운로드에 오류가 발생했다..
알고봤더니 기존로직은 리눅스 서버에 파일업로드를 할 경우 한글파일이든 영어든 모두 임시의 값으로 변환되어 서버에 저장이되는데(ex 보통 안겹치기위해 날짜+randomString->20210915_abcdefg 와 같은형태) 한글로 가져와서 한글파일을 못찾는 사태가 발생했다.
모두가 그런게 아니고 새로 가져온부분만 안되기때문에 한글에대한 설정을 서버에 맞춰서 해보기보단 기존껄 자바에서 재 가공해서 넣기로함.
특정 폴더에 있는 파일만 오류를 발생시켰으므로 그 폴더에 있는파일 데이터만 Java에서 뽑아내고
<select id="fileTestListByFolder" resultType="java.util.HashMap">
SELECT
*
FROM
table
WHERE
DELETE_YN = 'N'
AND FILE_FOLDER LIKE '%/admin_upload%'
</select>
##수행로직##
컨트롤러를 임시로 태워서 해당 주소로 들어갔을경우 자동으로 for문을 돌아 원하는 형태의 쿼리문을 만들어주도록하여 가져가서 테스트를 진행했다!!
@RestController
public class fileTestController {
@Resource(name="fileTestMapper")
FileTestMapper fileTestMapper;
@RequestMapping("/file/test")
public String fileTest() throws SQLException, IOException{
//바꿀파일이름 형식 년월일+for문 i의 숫자 ex) 2021813_0~~~2021813_570까지
Calendar cal = Calendar.getInstance();
//오늘날짜 지정
String year = cal.get(cal.YEAR)+""; //년
String month = cal.get(cal.MONTH)+1+""; //월
String day = cal.get(cal.DATE)+""; //일
String madeDate= year+month+day+"_";
List<HashMap<String,String>> list = fileTestMapper.fileTestListByFolder();
StringBuffer sb = new StringBuffer();
StringBuffer sb2 = new StringBuffer();
//HashMap이라 중복되는 것 제거되버림
for(int i=0; i<list.size(); i++){
String FILE_ID = list.get(i).get("FILE_ID");
String FILE_NAME = list.get(i).get("FILE_NAME");
//String FILE_MASK = list.get(i).get("FILE_MASK");
String FILE_MASK = madeDate+Integer.toString(i);
System.out.println(i);
//생성해야하는 업데이트문 예시 UPDATE FROM table SET FILE_MASK = '' WHERE FILE_NAME='';
sb.append("UPDATE KHOME.J_ATTACHFILE SET FILE_MASK ='");
sb.append(FILE_MASK+"' ");
sb.append("WHERE FILE_NAME ='");
sb.append(FILE_NAME+"' ");
sb.append("AND FILE_ID ='");
sb.append(FILE_ID+"'");
sb.append(";");
sb.append("\r\n");
//생성해야하는 업데이트문 예시 UPDATE FROM table SET FILE_MASK = '' WHERE FILE_ID='';
sb2.append("UPDATE KHOME.T_BOARD SET BD_EXT1 ='/admin_upload/");
sb2.append(FILE_MASK+"' ");
sb2.append("WHERE BD_EXT2 ='");
sb2.append(FILE_NAME+"' ");
sb2.append("AND FILE_ID ='");
sb2.append(FILE_ID+"'");
sb2.append(";");
sb2.append("\r\n");
//파일변환처리
renameFile(FILE_NAME, FILE_MASK);
}
//쿼리저장용 텍스트파일 경로
String filePath = "C:\\adminuploadquery\\filequery.txt";
FileWriter fileWriter = new FileWriter(filePath);
fileWriter.write(sb.toString());
fileWriter.close();
String filePath2 = "C:\\adminuploadquery\\boardquery.txt";
FileWriter fileWriter2 = new FileWriter(filePath2);
fileWriter2.write(sb2.toString());
fileWriter2.close();
return "테스트용 URL";
}
//파일 이름 변경 메서드
public void renameFile(String filename, String newFilename) {
//읽을파일 경로
String path = "C:\\adminupload\\";
//읽을파일 이름
String filename1 = path+filename;
//바꿀파일 저장경로
String path2 = "C:\\adminupload\\changed\\";
//바굴파일 이름
String filename2 = path2+newFilename;
File file = new File( filename1 );
File fileNew = new File( filename2 );
if( file.exists() ) file.renameTo( fileNew );
}
}
반응형
'DB이관' 카테고리의 다른 글
MariaDB 최신버전(10.6.14) 설치 및 기본 DB 스키마 이관(utf8mb3 -> utf8mb4) (2) | 2023.12.29 |
---|---|
JAVA – Value ‘0000-00-00’ can not be represented as java.sql.Timestamp 에러해결 (0) | 2021.09.15 |
MariaDB my.cnf 파일설정 (0) | 2021.09.15 |
MariaDB 데이터 insert오류관련 개인정리 (0) | 2021.09.15 |
Oracle, mariaDB 차이점 정리 (0) | 2021.09.14 |