2015년 9월 24일 목요일

오라클 연동시에 JDBC드라이버 주의하세요.


책의 예제는 MySQL로 작성되어 있지만, 간혹 오라클 버전에 관한 문의가 많이 와서 몇 자 적습니다.


Maven을 이용해서

<repository>
<id>oracle</id>
<name>ORACLE JDBC Repository</name>
<url>http://mesir.googlecode.com/svn/trunk/mavenrepo</url>
</repository>

에 있는 오라클용 JDBC를 받으시는 분들이 많습니다만..


이것은 과거에 CD에 있는 jar파일을 이용하시는 것 만큼 위험한 일입니다.

JDBC를 이용하실 때에는 반드시 현재 자신이 사용하는 DB의 드라이버 버전을 확인해 주시고 이에 맞게 사용해야만 합니다.

위의 경로의 경우는 오라클 10 버전의 드라이버이고, JDK1.4 버전에 최적화된 드라이버이므로 이를 사용하는 것은 에러를 발생하는 원인이 됩니다.

JDK1.6버전을 이용하신다면 이에 맞는 ojdbc6를 이용하시길 바랍니다.

2015년 9월 23일 수요일

Tomcat7 버전에서 파일다운로드 한글처리


Tomcat 8버전과 달리 Tomcat7 버전은 get방식으로 한글 데이터를 자동으로 처리하지 않습니다.

만일 Tomcat 7 버전에서 한글을 처리하려면 Tomcat의 설정을 변경하거나, 파라미터에 대한 대한 한글 처리를 해 주어야 합니다.


Tomcat이 설치된 실제 경로를 찾아서 conf 폴더내의 server.xml을 찾아서 아래와 같이 설정을 변경합니다.


 <Connector connectionTimeout="20000" port="8081" protocol="HTTP/1.1" redirectPort="8443"  URIEncoding="UTF-8"/>


STS나 Eclipse에서 Tomcat을 설정하는 경우 server.xml의 위치는

현재의 workspace 밑의

\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\conf

와 같은 경로입니다.

(해당 폴더가 안 보인다면 제어판의 폴더 옵션에서 숨김 폴더 보기를 설정합니다).



만일 코드로 처리한다면 다음과 같은 형태로 작성할 수 있습니다. 

 String test = request.getParameter("test ");
 test = new String(test .getBytes("8859_1"), "UTF-8");

2015년 9월 22일 화요일

Part4에서의 오라클 적용 참고하세요

Part 4의 예제에서는 tbl_user와 tbl_message 테이블이 생성됩니다.

오라클의 경우에는 Sequence를 이용해야 하므로 테이블의 생성은 다음과 같이 작성되어야 합니다.



create table tbl_user (
 userid varchar2(50) not null,
 userpw varchar2(50) not null,
 username varchar2(100) not null,
 upoint number(10,0) default 0
 );

alter table tbl_user add constraint pk_user primary key (userid);

create table tbl_message (
 mid number not null,
 targetid varchar2(50) not null,
 sender varchar2(50) not null,
 message varchar2(2000) not null,
 opendate date,
 senddate date default sysdate
 );

create sequence seq_message;


SQL Mapper에서는 Sequence를 사용하는 코드로 변경되어야 합니다.
아래의 코드는 소스 코드 중에서 messageMapper.xml의 일부 입니다.



<mapper namespace="org.zerock.mapper.MessageMapper">

<insert id="create">
insert into tbl_message (mid, targetid, sender,message)
values (seq_message.nextval, #{targetid}, #{sender}, #{message})
</insert>


<select id="readMessage" resultType="MessageVO">
select * from tbl_message where mid = #{mid}
</select>

<update id="updateState">
update tbl_message set opendate = now() where mid= #{mid}
</update>

</mapper>

실행되는 코드의 결과는 아래와 같이 출력되어야 합니다.


참고로 질문하신 479페이지까의 소스 코드 올려 두었으니 본인이 작성하신 부분과 다른 점들 비교해 보시면 좋을 듯 합니다.




2015년 9월 17일 목요일

오라클에서의 페이징 처리


구코단의 쿠키입니다. 




질문하시는 내용 중에 오라클로 페이징 처리와 관련해서 문의하시는 분들이 있으셔서 블로그에 정리해 놓도록 하겠습니다. 


게시판 생성 SQL문입니다. 


create table tbl_board (
bno number,
title varchar2(400) not null,
content varchar2(2000) not null,
writer varchar2(50) not null,
regdate date default sysdate,
viewcnt number default 0
);

create sequence seq_board;

alter table tbl_board add constraint pk_board primary key (bno);



페이지 처리 기본 



일반적으로 오라클의 경우는 페이징 처리에 rownum을 활용합니다. rownum은 테이블에서 데이터가 출력될 때 붙는 번호라고 이해하시면 좋습니다.

rownum은 출력되면서 붙는 번호이기 때문에 어떤 식으로 SQL문이 실행되는지에 따라서(실행 계획)에 붙는 번호가 달라지게 됩니다.



위의 SQL의 경우는 오라클의 힌트를 이용해서 역순으로 데이터를 조회하는 예입니다. 이 경우 pk_board는 PK의 이름으로 해석하자면 pk_board를 역순으로 뒤지면서 데이터를 찾아내라는 뜻입니다.

rownum이 10보다 작거나 같기 때문에 10개의 데이터만 출력되는 것을 볼 수 있습니다.




2페이지 처리 하기 


rownum은 데이터가 나오면서 붙여주는 번호이기 때문에 rownum > 10 and rownum <= 20과 같은 SQL문은 제대로 결과가 나오지 않습니다.

rownu > 10 구문에서 어떤 데이터가 나오면 rownum은 1이 되기 때문에 rownum > 10조건에 맞지 않기 때문에 건너뛰게 됩니다.

이러한 이유로 흔히 rownum은 반드시 1이 포함되어야 한다고 합니다.


2페이지를 처리하기 위해서는 'in-line view'라는 기술을 알아야만 합니다. in-line view는 쉽게 말해서 from 구문에 다른 SQL문이 들어간 형태입니다.


2페이지의 데이터 처리는 다음과 같습니다.



SQL문을 자세히 보면 from  내부에 SQL문이 하나 더 사용되는 것을 볼 수 있습니다.

위의 SQL문은 rownum이 20보다 작거나 같은 데이터(2페이지까지의 모든 데이터)를 in-line view로 처리하고, rn이라는 컬럼을 만들어 냅니다.

외부에서는 rn컬럼의 값이 10보다 크다는 조건을 이용합니다.




위의 결과와 비교해 보면 2페이지의 데이터가 출력되는 것을 볼 수 있습니다.



MyBatis의 SQL문 

MySQL의 limit의 경우 사용하기 쉽지만, 오라클의 경우는 조금 복잡하므로 페이징 처리와 관련한 SQL문은 아래와 같은 형태로 수정되어야 합니다. 




작성된 SQL문은 PART 2의 예제에서 다음과 같이 출력되어야 합니다.






2015년 9월 1일 화요일

PART1 1장에서 3장 동영상

PART 1의 강의자료와 동영상입니다. 

8월 말까지 제작을 목표로 했으나 9월 첫주까지 조금 연기될 듯 합니다.
작성되는 데로 게시물을 수정하도록 하겠습니다. 

강의자료 PPT 링크입니다. 



PART 1.1 STS설치 및 프로젝트 생성하기 




PART 1.1 STS설치 및 프로젝트 Tomcat 



PART 1. 2 스프링 간략 소개 



PART 1. 3 MySQL 설치 및 설정 




PART 1. 3 MySQL 연결 테스트