다음카카오에서 제공하는 저장소로 변경해보자.


주소는 다음과 같다.

ftp.daumkakao.com


먼저 sources.list를 백업한다.

$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak


SED를 사용해서 kr.archive.ubuntu.com 를 ftp.daumkakao.com 로 바꿔 저장한다.

$ sudo sed -i 's/kr.archive.ubuntu.com/ftp.daumkakao.com/g' /etc/apt/sources.list


Update & Upgrade

$ sudo apt-get update

$ sudo apt-get upgrade



Posted by 후니아부지
:
Posted by 후니아부지
:

대량의 데이터를 DB에 넣고자 할 때, 엑셀로 작업해서 Toad의 Import 기능을 사용하면 편리하다.

그러나......

필드 중 Date 타입이 문제가 되는 경우가 많다........가 아니라......이게 제일 큰 문제다.

날짜 포멧 맞추기도 힘들고, 맞췄더니 날짜만 들어가고 시간은 빠져 버린다든지.......

수만 건의 데이터를 일일이 날짜 포멧 맞춰서 인서트 할 수 도 없고.... 참 죽을 맛이지.....

주위에 물어봐도 포기해라... 날짜는 중요한게 아니니 빼버려라...등등... 영양가 없는 소리나 해대고.....


아...놔.... 내일 약 10만 건 정도 작업해야하는데....... 으~아~~~~~~~~악~~~~~~~~



죽으란 법은 없는법!!

구글링하다 결국에는 방법을 찾았지롱~



다음과 같은 테이블이 있다.

HIREDATE가 DATE 타입이다!!!!


엑셀에 컬럼을 동일하게 구성한다.

아래처럼 제일 마지막(어디든지 상관 없으나 보기 편하게 제일 끝으로~)에  날짜 데이터를 넣는다.

위 화면에서 I열에 날짜 데이터가 있는데 실제값은 '2014-07-25 1:18:20 PM' 이렇게 들어가 있다.

실제로 넣을 날짜 컬럼인 HIREDATE에 위와 같이 텍스트로 변경되도록 식을 넣어준다.

=TEXT(컬럼, "YYYY-MM-DD HH:MM:SS")



테이블에 Date 타입으로 넣어야하는 컬럼에 날짜를 텍스트로 변경하는 식을 쓰는것!   

이게 핵심이다!!!


엑셀에서 작업은 이게 끝이다.


그다음은 Toad 데이터를 넣어보자.

엑셀 파일 불러오는 것은 다들 알테고.....


엑셀에서 날짜를 텍스트로 바꿀 때 'YYYY-MM-DD HH:MI:SS' 와 같이 포멧을 사용했으므로 

아래와 같이 설정해준다.


실제 컬럼과 엑셀 파일의 컬럼이 일치하게 맞춰준다.

엑셀 파일의 I컬럼은 테이블과 매칭되는 컬럼이 없도록 설정한다.


앞서 오류 났던 HIREDATE에 데이터가 제대로 나오는 것을 볼 수 있다.


넣어버렷~



데이터 조회해보면 아래와 같이 들어가 있는 것을 볼 수 있다.


끝~


Posted by 후니아부지
:

oracle 계정으로 로그인한다.

터미널에서 다음과 같이 진행한다.


※ sqlplus /nolog

데이터베이스에 접속하지 않고 실행


※ conn / as sysdba

운영체제 계정을 디폴트 로그온에 사용하며 시스템 권한으로 연결한다.


※ alter user 계정 identified by 암호;

해당 계정의 암호를 변경한다.



Posted by 후니아부지
:

구동하려는 Dynamic Web Project가 선택한 서버에서 지원하지 않아서 나는 오류이다. 

프로젝트 생성 시 Dynamic web module version을 3.0으로 설정했는데, 아래처럼 Tomcat v6.0에서 구동하려니 지원하지 않아서 발생하는 것이다.


Dynamic web module version 3.0은 Tomcat v7.0 부터 지원하므로 Tomcat v7.0으로 구동하면 된다.

그러나 Tomcat v6.0을 사용해야만 하는 경우는 프로젝트의 Dynamic web module version을 2.5로 낮추면 된다.


프로젝트의 Properties -> Project Facets 를 보면 해당 프로젝트의 Dynamic Web Module이 보일 것이다. 이를 2.5로 변경한다.


버전 변경 후 Apply 버튼을 눌러 변환 작업을 시작한다.


그러나 아래처럼 2.5로 바꿀 수 없다고 나오는 경우가 있다.


구글링 해보니 이는 해당 프로젝트의 .settings\org.eclipse.wst.common.project.facet.core.xml 파일을 수정해야 한다고 한다.


Properties 창을 닫고 org.eclipse.wst.common.project.facet.core.xml 파일을 수정한다. 

Tomcat 버전을 6.0으로 jst.web 버전을 2.5로 변경한다.


프로젝트를 닫고 다시 열어서 Project Facet 화면을 보면 버전이 2.5로 바뀌어 있고 Apply 버튼이 활성화 되어 있을 것이다. 

변경 작업을 진행한 후 Tomcat v6.0에 올려본다.


잘~ 될 것이다~

Posted by 후니아부지
:

[Eclipse] Properties Editor

앎/tool 2014. 3. 27. 19:25 |

다국어를 지원하기 위해서는 리소스의 텍스트를 properties 파일로 분리해야 한다.

한글과 같은 non-latin 문자는 unicode 형식으로 저장해야 하는데, Properties Editor는 이를 작업하기 위한 도구이다.


설치

Eclipse의 메뉴에서 Help -> Install New Software


add를 클릭하여 다음과 같이 추가한다.


다음과 같이 PropertiesEditor를 체크하고 설치를 진행한다.


설치 후 .properties 파일을 더블 클릭하거나 다음과 같이 파일을 열 수 있다.


PropertiesEditor로 작업 시 한글은 다음과 같이 표시된다.


작업 파일을 일반 편집기로 열면 다음과 같이 표시된다.



Posted by 후니아부지
:

JSTL SQL Tags


JSTL sql 태그는 이름 그대로 sql 관련 작업을 처리하기 위한 태그 라이브러리이다.


JSP의 시작 부분에 taglib 정의를 추가한다.

1
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>



<sql:setDataSource> Tag

DataSource를 지정한다.

<sql:setDataSource {dataSource="데이터소스" | url="jdbc Url"}

                              driver="드라이버 클래스 명"

                              user="DB 사용자 계정"

                              password="DB 사용자 패스워드"

                              var="변수에 DataSource 스펙 저장"

                              scope="{page | request | session | application"} />

 Name

 Required

 Request-time  Type Desc

 var

 false  false  java.lang.String

 변수에 DataSource 스펙 저장

 scope

 false

 false 

 java.lang.String

 변수 공유 범위

 dataSource

 false

 true

 java.lang.String

 컨텍스트에 JNDI 설정 시 Resource Name

 driver

 false

 true

 java.lang.String

 드라이버 클래스 명

 url

 false

 true

 java.lang.String

 JDBC URL

 user

 false

 true

 java.lang.String

 DB 사용자 계정

 password

 false

 true

 java.lang.String

 DB 사용자 패스워드


MySQL의 경우로 예를 들어 보자.

MySQL Community Server 설치 시 기본적으로 만들어지는 world 테이블을 이용한다.

사용자 계정은 root를 사용하고 패스워드는 12345678 이다.

		<sql:setDataSource url="jdbc:mysql://localhost:3306/world" 
		                           driver="com.mysql.jdbc.Driver" 
		                           user="root" 
		                           password="12345678" 
		                           var="ds" 
		                           scope="session" />


이렇게 생성한 DataSource인 ds는 <sql:query> 태그에서 사용할 수 있다.


DataSource를 얻는 다른 방법으로 DBCP를 사용할 수 있다.

※ 참고: [Servlet] DBCP(Database Connection Pool)를 사용한 DB 연결


프로젝트/META-INF/Context.xml에 다음과 같이 연결 정보를 작성한다.

<?xml version="1.0" encoding="UTF-8"?>
<Context>
	<Resource name="jdbc/myconn" 
		       auth="Container" 
		       type="javax.sql.DataSource"
		       factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
		       driverClassName="org.gjt.mm.mysql.Driver"
		       url="jdbc:mysql://localhost:3306/world?AutoReconnect=true" 
		       username="root"
		       password="12345678" 
		       maxActive="100" 
		       maxIdle="30" 
		       maxWait="60"
		       removeAbandoned="true" 
		       removeAbandonedTiemout="60" />
</Context>


DBCP를 사용할 때는 다음과 같이 dataSource 속성에 리소스 이름을 쓰면 된다. 

<sql:setDataSource dataSource="jdbc/myconn" var="ds" scope="session" />


<sql:param>, <sql:dateParam> Tag

날짜 형식 파라미터에는 <sql:dataParam>을 문자열 형식 파라미터에는 <sql:param> 을 사용한다.

<sql:param value="값" />

 Name

 Required

 Request-time

 Type

 Desc 

 value

 false

 true

 java.lang.String

 파라미터 값


<sql:dateParam value="값" type="{timestamp | time | date}"  />

 Name 

 Required 

 Request-time

 Type

 Desc

 value

 true

 true

 java.lang.String

 DATE, TIME, TIMESTAMP 값

 type

 false

 true

 java.lang.String

 data, time, timestamp 중 하나를 쓴다.


<sql:query> Tag

sql 태그의 속성 또는 body에 정의된 쿼리 문장을 실행한다.

<sql:qeury var="varName" 

                dataSource="dataSource"

                sql="sqlQuery" 

                scope="{page | request | session | application}" 

                maxRows="maxRows" 

                startRow="startRow" />

 Name

 Required

 Request-time

 Type

 Desc

 var

 true

 false

 java.lang.String

 쿼리의 결과를 저장. 

 dataSource

 false

 true

 java.lang.String

 JNDI Resource Name or DriverManager를 위한 파라미터

 sql

 false

 true

 java.lang.String

 쿼리 문장

 scope

 false

 false

 java.lang.String

 변수 공유 범위

 maxRows

 false

 true

 java.lang.String

 쿼리 결과에 포함될 최대 행의 수

 startRow

 false

 true

 java.lang.String

 쿼리 결과에 포함될 시작 행 번호. 0부터 시작.


다음은 모두 동일한 결과를 보인다.

        <sql:query sql="select * from country where Continent='Asia' and Region='Middle East'" 
                   var="rs" dataSource="${ds}" />
	<c:set var="param1" value="Asia" />
	<c:set var="param2" value="Middle East" />
	
	<sql:query sql="select * from country where Continent=? and Region=?" 
               var="rs" dataSource="${ds}">
		<sql:param value="${param1}" />
		<sql:param value="${param2}" />
	</sql:query> 

	<c:set var="param1" value="Asia" />
	<c:set var="param2" value="Middle East" />
	
	<sql:query var="rs" dataSource="${ds}">
		select * from country where Continent=? and Region=?
		<sql:param value="${param1}" />
		<sql:param value="${param2}" />
	</sql:query>


<sql:update> Tag

INSERT, UPDATE, DELETE 과 같은 데이터를 반환하지 않는 SQL 문장을 실행시키는데 사용한다.

<sql:update var="varName" 

                  dataSource="dataSource"

                  sql="sqlQuery" 

                  scope="{page | request | session | application}"  />

 Name

 Required

 Request-time

 Type

 Desc

 var

 true

 false

 java.lang.String

 쿼리에 영향을 받은 rows 카운트

 dataSource

 false

 true

 java.lang.String

 JNDI Resource Name or DriverManager를 위한 파라미터

 sql

 false

 true

 java.lang.String

 쿼리 문장

 scope

 false

 false

 java.lang.String

 변수 공유 범위


<sql:param> 태그 과 함께 사용하는 방법은 <sql:query> 태그와 동일하다.


<sql:transaction> Tag

transaction을 만들 때 사용한다. 한 transaction에 여러 개의 query, update를 사용할 수 있다.

<sql:transaction dataSource="dataSource" isolation="isolationLevel">

<sql:query>

<sql:update>

....

</sql:transaction>

 Name

 Required

 Request-time

 Type

 Desc

 dataSource

 false

 true

 java.lang.String

 JNDI Resource Name or DriverManager를 위한 파라미터

 isolation

 false

 true

 java.lang.String

 READ_COMMITED, READ_UNCOMMITED, REPEATABLE_READ, SERIALIZABLE 중 한 값을 가진다. 기본 값으로 dataSource에 설정된 값이 사용된다.


예제)


Posted by 후니아부지
:

JSTL Formatting Tags


JSP의 시작 부분에 taglib 정의를 추가한다.

1
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>


<fmt:bundle> Tag

resource bundle을 불러온다. 

basename 속성에 지정된 properties 파일을 locale 에 맞는 것을 불러온다.

properties 파일은 패키지 형식의 이름을 가진다.

com\study\messages 에 messages.properties, messages_ko.properties, messages_en.properties 이 있다면

basename="com.study.messages.messages" 이라고 지정하면 된다.

locale이 ko 이라면 messages_ko.properties 파일을 불러오며, 해당되는 것이 없다면 message.properties 파일을 불러올 것이다.

<fmt:bundle basename="로드 할 번들 베이스 이름"

                 prefix="key명칭의 공통적인 부분" />


<fmt:message> Tag

메시지 키와 지역화된 메시지를 바꾸어 출력한다.

<fmt:message key="메시지 키"

                     bundle="사용할 번들" />


<fmt:setLocale> Tag

locale 변경

<fmt:setLocale value="locale" />


예제)


<fmt:setBundle> Tag

페이지 전체에 사용할 수 있는 번들을 지정

<fmt:setBundle basename="로드 할 번들 베이스 이름"

                      var="번들을 저장하는 변수명" />


예제)


<fmt:formatDate> Tag

날짜 형식을 표현

<fmt:formatDate value="날짜값" 

                      [type="{time|date|both}"] 

                      [dateStyle="{default|short|medium|long|full}"] 

                      [timeStyle="{default|short|medium|long|full}"] 

                      [pattern="customPattern"] 

                      [timeZone="timeZone"] 

                      [var="varName"] 

                      [scope="{page|request|session|application}"] />


예제)


<fmt:formatNumber> Tag

숫자 형식을 표현

<fmt:formatNumber value="수치값" 

                          [type="{number|currency|percent}"]

                          [pattern="customPattern"] 

                          [currencyCode="currencyCode"]

                          [currencySymbol="currencySymbol"] 

                          [groupingUsed="{true|false}"]

                          [maxIntegerDigits="maxIntegerDigits"]

                          [minIntegerDigits="minIntegerDigits"]

                          [maxFractionDigits="maxFractionDigits"]

                          [minFractionDigits="minFractionDigits"] 

                          [var="varName"]

                          [scope="{page|request|session|application}"] />


예제)


<fmt:parseDate> Tag

정해진 패턴의 문자열에서 날짜를 파싱

<fmt:parseDate value="dateString" 

                      [type="{time|date|both}"] 

                      [dateStyle="{default|short|medium|long|full}"] 

                      [timeStyle="{default|short|medium|long|full}"] 

                      [pattern="customPattern"]                       

                      [timeZone="timeZone"] 

                      [parseLocale="parseLocale"] 

                      [var="varName"] 

                      [scope="{page|request|session|application}"] />


<fmt:parseNumber> Tag

정해진 패턴의 문자열에서 수치를 파싱

<fmt:parseNumber value="numericValue" 

                          [type="{number|currency|percent}"] 

                          [pattern="customPattern"] 

                          [parseLocale="parseLocale"] 

                          [integerOnly="{true|false}"] 

                          [var="varName"] 

                          [scope="{page|request|session|application}"] />


예제)


Posted by 후니아부지
:

JSTL Core Tags


JSP의 시작 부분에 taglib 정의를 추가한다.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


<c:set> Tag

JSP의 setAttribute()와 같은 역할

<c:set var="변수명" 

          value="변수에 넣을 값" 

          property="자바빈 객체나 Map 객체 값을 설정할 프로퍼티 명" 

          scope="변수 공유 범위"/>

		<c:set var="data1" value="100" scope="request" />
		<c:set var="data2" value="200" scope="session" />
		<c:set var="data3" value="<%=new int[] {1, 2, 3} %>" scope="request" />
		<c:set var="data4" value="<br/><br/>" scope="request" />
    
		data1 : ${requestScope.data1} <br/>
		data2 : ${sessionScope.data2} <br/>
		data1 + data2 = ${requestScope.data1 + sessionScope.data2} <br/>
		data3 : ${requestScope.data3[0]}, ${ requestScope.data3[1]}, ${ requestScope.data3[2]}


<c:remove> Tag

JSP의 removeAttribute()와 같은 역할

<c:remove var="변수명" 

                scope="변수 공유 범위" />

		<c:remove var="data1" scope="request" />
		
		data1 : ${requestScope.data1} <br/>
		data2 : ${sessionScope.data2} <br/>
		data1 + data2 = ${requestScope.data1 + sessionScope.data2}


<c:out> Tag

'<%= ... >' 와 같다. JSP의 표현식을 대체한다.

<c:out var="변수명" 

          default="기본값" 

          escapeXML="true / false" />

escapeXML 속성은 HTML 태그를 해석할지 결정한다.

true일 경우, 변수 값에 포함된 < > Q ' " 문자를 실제 문자로 출력한다. 생략 시 default로 true. 

		<c:out value="${sessionScope.data2}" /> <br/>
		<c:out value="${requestScope.data4}" escapeXml="true" />


<c:catch> Tag

body에서 실행되는 코드의 예외를 처리

<c:catch var="에러 메세지가 포함될 변수명" />

		<c:catch var="ex">
			<%= 1/0 %>
		</c:catch> <br/>
		Error Msg: ${ex} <br/>


<c:if> Tag

조건문에 대응

<c:if test="조건 판별식" 

       var="변수명" 

       scope="변수 공유 범위" />

		<c:if test="${requestScope.data1 == null}">
			data1 was removed....
		</c:if>


<c:choose> Tag

switch문과 동일

여러 개의 when 태그와 하나의 otherwise 태그를 가진다.

<c:chose>

    <c:when> .... </c:when>

    <c:when> .... </c:when>

    <c:otherwise> .... </c:otherwise>

</c:choose>


<c:when> Tag

choose 태그의 서브 태그

choose 태그 내에서 여러 번 사용할 수 있다

<c:when test="조건 판별식" />


<c:otherwise> Tag

choose 태그의 서브 태그

choose 태그 내에서 한 번만 사용할 수 있다

<c:otherwise> .... </c:otherwise>

		<c:choose>
			<c:when test="${data1 == 100}">
				data1의 데이터는 100 입니다.
			</c:when>
			
			<c:when test="${data1 == null}">
				data1의 데이터는 null 입니다.
			</c:when>
			
			<c:otherwise>
				data1의 데이터는 어느 값도 아닙니다.			
			</c:otherwise>
		</c:choose>


<c:forEach> Tag

객체 전체에 걸쳐 반복 실행에 사용

<c:forEach var="현재 아이템의 변수 명"

             items="반복 데이터가 있는 아이템 Collection 명"

                begin="시작 값. 기본 값은 0"

                end="종료 값"

                step="증가 값"

                varStatus="반복 상태 값을 지닌 변수" />

varStatus는 forEach의 상태를 알 수 있는 값이 들어 있다.

${변수.current} 현재의 인덱스

${변수.index} 0부터의 인덱스

${변수.count} 1부터의 인덱스

${변수.first} 현재 루프가 처음인지 확인 

${변수.last} 현재 루프가 마지막인지 확인

${변수.begin} forEach문의 시작 값

${변수.end} forEach문의 끝 값

${변수.step} forEach문의 증가 값

		<c:forEach var="i" begin="0" end="9">
			${i+1}  
		</c:forEach> <br/>
		
		<c:forEach var="i" items="${requestScope.data3}" begin="0" end="2" >
			${i}
		</c:forEach> <br/>
		
		<c:forEach var="i" items="${requestScope.data3}" begin="0" end="2" step="1" varStatus="status">
			--------------------------------- <br/>
			${i} <br/>
			--------------------------------- <br/>
			현재 인덱스			${status.current} <br/>
			0부터의 인덱스                   ${status.index} <br/>
			1부터의 인덱스                   ${status.count} <br/>
			현재 루프가 처음인지 확인    ${status.first} <br/>
			현재 루프가 마지막인지 확인 ${status.last} <br/>
			forEach문의 시작 값            ${status.begin} <br/>
			forEach문의 끝 값               ${status.end} <br/>
			forEach문의 증가 값            ${status.step} <br/>
			<br/>
		</c:forEach>


<c:forTokens> Tag

문자열을 구분자(delimiter)로 분할

<c:forTokens var="현재 아이템의 변수 명"

                items="반복 데이터가 있는 아이템 Collection 명"

                    delims="구분자. 여러 개 지정 가능"

                    begin="시작 값. 기본 값은 0"

                    end="종료 값"

                    step="증가 값"

                    varStatus="반복 상태 값을 지닌 변수" />

        <c:set var="data5" value="A, B. C, D. E, F" scope="request" />
        <c:forTokens var="ddd" items="${requestScope.data5}" delims=",.">
        	<c:out value="${ddd}" /><br>
        </c:forTokens>


<c:url> Tag

url 생성

<c:url var="생성한 URL이 저장될 변수 명"

         value="생성할 URL"

         scope="변수 공유 범위" />

		<a href="<c:url value='/TEST_EL_1.jsp'/>">
			View TEST_EL_1
		</a>


<c:param> Tag

url 생성 시 파라미터 추가

<c:param name="파라미터 명" 

              value="값"/>

		<c:url value="/TEST_EL_2.jsp" var="paramTest">
			<c:param name="data1" value="1000"/>
			<c:param name="data2" value="2000"/>
		</c:url>
		<a href="${paramTest}">
			View TEST_EL_2 with data1(1000), data2(2000)
		</a>


<c:import> Tag

페이지 첨부

<c:import url="첨부할 URL" />

import 태그 내에 param 태그도 사용할 수 있다.

var과 scope 속성도 있는데 var은 불러들인 페이지를 바로 출력하지 않고 String 형 변수에 넣어두기 위해 사용한다.

이때 이 변수의 scope를 지정할 수 있다.

		<c:import url="/TEST_EL_1.jsp"/> 
		
		<c:import url="/TEST_EL_2.jsp">
			<c:param name="data1" value="10000"/>
			<c:param name="data2" value="20000"/>
		</c:import> 


<c:redirect> Tag

respond.sendRedirect()와 동일

<c:redirect url="이동할 URL" />


예제) JSTL Core 태그 사용

JSTL_Test1.jsp

TEST_EL_1.jsp

TEST_EL_2.jsp


Posted by 후니아부지
:

JSTL (JavaServer Pages Standard Tag Library)


1. 다운로드

http://tomcat.apache.org/taglibs/standard/

여기에서는 Standard 1.1 을 사용할 것이다. 


바이너리를 클릭


1.1 의 마지막 버전을 다운로드 한다.

jakarta-taglibs-standard-1.1.2.zip



2. 설치

사용하려는 라이브러리는 lib 폴더 내의 jstl.jar 과 standard.jar 이다.

현재 프로젝트에서만 쓰려면 사용하고자 하는 프로젝트의 WebContent\WEB-INF\lib 에 넣어준다.

해당 WAS를 사용하는 모든 프로젝트에서 사용하려면 WAS의 lib 폴더에 넣으면 된다. (여기서는 Tomcat의 lib)


그리고 압축 푼 폴더에 있는 tld 파일을 사용하려는 프로젝트에 넣어줘야 한다.

해당 프로젝트의 WebContent\WEB-INF tld 폴더를 만들고 tld 파일 모두를 복사한다.


3. 사

사용하려는 페이지에 아래와 같이 써준다.

<%@ taglib prefix="태그" uri="Tag Library Descriptor 파일 경로 or URI %>

uri에는  Tag Library Descriptor 파일의 경로(파일 이름 포함)를 쓰거나 해당 tld 파일 내용 중 uri 값을 쓰면 된다.


c.tld 파일의 uri

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 


또는 Tag Library Descriptor 파일의 경로

<%-- @ taglib prefix="c" uri="WEB-INF/tld/c.tld" --%> 


4. 자주 사용하는 태그




Posted by 후니아부지
: