SyntaxHighlighter.all(); 게을러지고 싶어 부지런한 개발자 :: 게을러지고 싶어 부지런한 개발자

구분자로 자르기

문자열: 'ABC\DE\FGH'

1)   '\' 기준으로 앞에서 자르기

SELECT LEFT('ABC\DE\FGH', CHARINDEX('\', 'ABC\DE\FGH')-1);

결과: ABC

2) '\' 기준으로 중간에서 자르기

SELECT SUBSTRING('ABC\DE\FGH', CHARINDEX('\', 'ABC\DE\FGH')+1, LEN('ABC\DE\FGH')-CHARINDEX('\', 'ABC\DE\FGH')-CHARINDEX('\', REVERSE('ABC\DE\FGH')));

결과: DE

3) '\' 기준으로 뒤에서 자르기

SELECT RIGHT('ABC\DE\FGH',CHARINDEX('\', REVERSE('ABC\DE\FGH'))-1);

결과: FGH

 

길이로 자르기

문자열: 'ABCDEFGH'

1) 앞에서 자르기

SELECT LEFT('ABCDEFGH', 3);

결과: ABC

2) 중간에서 자르기

SELECT SUBSTRING('ABCDEFGH', 4, 2);

결과: DE

3) 뒤에서 자르기

SELECT RIGHT('ABCDEFGH', 3);

결과: FGH

 

 

 

1. 테이블의 생성과 동시에 데이터까지 모두 복사하는 방법

SELECT * INTO [생성할 테이블명 ] FROM [원본 테이블명]

 

2. 테이블을 생성할 때 원하는 컬럼만 복사하는 방법

SELECT [원하는 컬럼명] INTO [생성할 테이블명 ] FROM [원본 테이블명]

 

3. 테이블을 생성할 때 테이블 구조만 복사하는 방법

SELECT * INTO [생성할 테이블명 ] FROM [원본 테이블명] WHERE  1=2

테이블을 복사할 때 테이블에서 테이터는 없이 테이블 구조만 복사할 때는 'WHERE  1=2'와 같은 쿼리를 실해시키면 테이블의 구조만 복사할 수 있다.

 

4. 테이블은 이미 있고 데이터만 복사하고 싶을 경우 사용하는 방법

INSERT INTO [ 데이터를 넣을 테이블명 ] SELECT * FROM [원본 테이블명]

 

5. 이를 응용해보면 아주 유용하게 사용할 수 있다.

INSET INTO [데이터를 넣을 테이블명](컬럼1, 컬럼2) SELECT 복사할 컬럼1, 복사할 컬럼2 FROM [원본 테이블명] GROUP BY 컬럼1

위와 같이 응용해모면 이미 있는 테이블에 원하는 컴럼만 정렬하여 데이터을 넣을 수도 있다. 

 



* 주의사항 : 복사 쿼리로 테이블의 구조와 레코드는 복사할 수 있으나 Primary Key, Foreign Key, Default, Index등은 복사를 할 수 없다.


컨트롤러에서redirect를 할 때, 파라미터 값을 넘겨야 할때가 있는데

@RequestParam을 사용해주면 된다.

리다이렉트를 하는 부분 addAttribute해준다.

 

 

@RequestMapping("/test.do")
	public String insertComment(RedirectAttributes redirectAttributes) {
		
        int boardno = 2;
		redirectAttributes.addAttribute("boardno", boardno);
        
		return "redirect:selectPage.do";
	}

리다이렉트 받는 부분 RequertParam으로 맵핑함

@RequestMapping("/selectPage.do")
	public String selectPage(@RequestParam("boardno") int boardno){
		
		
		BoardVO boardPage = boardDAO.selectPage(boardno);
		
		model.addAttribute("boardPage", boardPage);
		
		return "boardView";
	}

스프링 프로젝트 진행 중, 데이터를 엑셀 형태로 다운로드 받을 수 있어야하는 상황이 생겼다.

이 포스팅에 올리는 소스코는 단순히 엑셀 파일로 다운 받게 해주는 간단한 템플릿(?)이고, 각자 원하는 형태에 맞춰 customize 하길 바람 ..! 

우선 엑셀 파일로 업로드 혹은 다운로드 기능을 사용하기 위해 아래와 같은 poi 관련 라이브러리가 필요하다..

<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>4.1.2</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>4.1.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml-schemas</artifactId>
			<version>4.1.2</version>
		</dependency>

 

 

아래는 소스다.

 

* 참고: HSSFWorkBook은 xls확장명으로 다운로드 받게하고, HSSWorkbook을 XSSFWorkbook로 변경만 해주면 xlsx확장명으로 다운로드 받게 해준다!! 

Controller

	@PostMapping("/excel/download")
    public void excelDownload(@RequestParam String fileName, HttpServletResponse response, Model model) throws Exception {

        HSSFWorkbook objWorkBook = new HSSFWorkbook();
        HSSFSheet objSheet = null;
        HSSFRow objRow = null;
        HSSFCell objCell = null;       //셀 생성

        //제목 폰트
        HSSFFont font = objWorkBook.createFont();
        font.setFontHeightInPoints((short)9);
       // font.setBoldweight((short)font.BOLDWEIGHT_BOLD);
        font.setFontName("맑은고딕");

        //제목 스타일에 폰트 적용, 정렬
        HSSFCellStyle styleHd = objWorkBook.createCellStyle();    //제목 스타일
        styleHd.setFont(font);
//        styleHd.setAlignment(HSSFCellStyle.ALIGN_CENTER);
//        styleHd.setVerticalAlignment (HSSFCellStyle.VERTICAL_CENTER);

        objSheet = objWorkBook.createSheet("첫번째 시트");     //워크시트 생성

        // 1행
        objRow = objSheet.createRow(0);
        objRow.setHeight ((short) 0x150);

        objCell = objRow.createCell(0);
        objCell.setCellValue("번호");
        objCell.setCellStyle(styleHd);

        objCell = objRow.createCell(1);
        objCell.setCellValue("이름");
        objCell.setCellStyle(styleHd);

        // 2행
        objRow = objSheet.createRow(1);
        objRow.setHeight ((short) 0x150);

        objCell = objRow.createCell(0);
        objCell.setCellValue("1");
        objCell.setCellStyle(styleHd);

        objCell = objRow.createCell(1);
        objCell.setCellValue("홍길동");
        objCell.setCellStyle(styleHd);


        response.setContentType("Application/Msexcel");
        response.setHeader("Content-Disposition", "ATTachment; Filename="+URLEncoder.encode("테스트","UTF-8")+".xls");

        OutputStream fileOut  = response.getOutputStream();
        objWorkBook.write(fileOut);
        fileOut.close();

        response.getOutputStream().flush();
        response.getOutputStream().close();
   }

 

View

 <form id="excelForm" name="excelForm" method="post" action="/excel/download">
        <input type="text" name="fileName" />
        <input type="submit" value="xlsx파일로 받기" />
 </form>

 

==============아래는 실행화면 확인 ================

원하는 파일명을 칸에 입력해주고 버튼을 누르면 엑셀파일이 바로 다운되면서 엑셀을 열면 다음처럼 나온다.

프로젝트 우클릭 > Update Project 또는 Alt + F5 단축키로 프로젝트 업데이트를 실행하면 에러가 사라집니다.

아마도 이클립스 자체 버그인 듯.. 

1. JSON.stringify() 메소드

인수로 전달받은 자바스크립트 객체문자열로 변환하여 반환

<html>
<head>
<title>stringify</title>      
</head>

<body>
<p id="json"></p>

<script>
     var dog = {name: "식빵", family: "웰시코기", age: 1, weight: 2.14}; // 자바스크립트 객체

     var data = JSON.stringify(dog); // 자바스크립트 객체를 문자열로 변환함.
     document.getElementById("json").innerHTML = data;
</script>
</body>

</html>

=============================================================
결과| 

{"name":"식빵","family":"웰시코기","age":1,"weight":2.14}

 

2. JSON.parse() 메소드

JSON.stringify() 메소드와는 반대로 인수로 전달받은 JSON 형식의 문자열 자바스크립트 객체로 변환하여 반환

<html>
<head>
<title>parse</title>      
</head>

<body>
<p id="json"></p>

<script>
     // JSON 형식의 문자열
     var data = '{"name": "식빵", "family": "웰시코기", "age": 1, "weight": 2.14}';

     var data = JSON.parse(data); // JSON 형식의 문자열을 자바스크립트 객체로 변환함. 
     document.getElementById("json").innerHTML = dog + "<br>"; 

     document.getElementById("json").innerHTML += dog.name + "," + dog.family; 
</script> 
</body> 

</html>

=============================================================
결과 | 

[object Object]
식빵, 웰시코기

 

3. toJSON() 메소드

 자바스크립트의 Date 객체의 데이터JSON 형식의 문자열로 변환하여 반환

(따라서 이 메소드는 Date.prototype 객체에서만 사용할 수 있음) 

<html>
<head>
<title>toJSON</title>      
</head>

<body>
<p id="json"></p>

<script>
     var date = new Date(); // 자바스크립트 Date 객체
     var str = date.toJSON(); // Date 객체를 JSON 형식의 문자열로 변환함

     document.getElementById("json").innerHTML = date + "<br>";
     document.getElementById("json").innerHTML += str;
</script>
</body>
</html>
=============================================================
결과 | 

Fri Aug 28 2020 14:56:07 GMT+0900 (대한민국 표준시)

2020-08-28T05:56:07.578Z

split과 tokenizer 모두 토큰으로 문자열을 나누는 방법


split()

String클래스의 메소드
지정한 구분자으로 문자열을 나눠 배열에 저장
| 로 여러개의 구분자를 정할 수 있음

ex) str.split("&" "/" | "+");
공백도 문자열로 추가가 됨 (아래 예시 참고)

 

 


StringTokenizer

클래스이므로 객체를 생성하고 사용
구분자를 생략하면 공백이 기본 구분자
지정한 한가지 구분자로만 문자열을 나눌 수 있음

ex) StringTokenizer str = new StringTokenizer([문자열],"구분자");
공백은 무시 됨 (아래 예시 참고)

객체생성하면 메소드 사용가능해서 편함
-countTokens() : 남아있는 토큰수 int 반환
-hasMoreTokens() : 토큰 남아있는지 여부 boolean 반환
-nextToken() : 토큰 String 반환

 

 

 

 

출처: 개미는 뜐뜐님의 블로그 

httpServlet의 경로를 찾을 수 없어 생기는 오류로

해당 프로젝트 우클릭 > Properties > Project Facets > Dynamic Web Module > Runtime에서 실행할 웹서버를 체크!

svn으로 import 받았을 때 톰캣6.0으로 되어있었고, 현재 나는 8.5만 설정해놓았었으므로 둘이 일치하지 않아 에러가 생겼었음. 그래서 8.5에 체크하고 Apply해주니 빨란 에러 모두 해결

+ Recent posts