반응형
반응형
반응형


jdbc에서 resultSet.getDate() 하면 new java.util.Date();
 - 시간, 분, 초 정보는 가지고 있지 않다.

ResultSet 의 메소드를 살펴 보면.

java.sql.ResultSet


public abstract Date getDate(String columnName) throws SQLException
 Get the value of a column in the current row as a java.sql.Date object.
 Returns: the column value; if the value is SQL NULL, the result is null


public abstract Time getTime(String columnName) throws SQLException
 Get the value of a column in the current row as a java.sql.Time object.
 Returns: the column value; if the value is SQL NULL, the result is null

getDate() 나 getTime() 은 java.util.Date 객체를 반환하는 것이 아니라
java.sql 패키지의 java.sql.Date와 java.sql.Time 객체를 반환하고 있습니다.


반면

public abstract Timestamp getTimestamp(String columnName) throws SQLException
 Get the value of a column in the current row as a java.sql.Timestamp object.
 Returns: the column value; if the value is SQL NULL, the result is null


getTimestamp() 는 "java.sql.Date, java.sql.Time, java.sql.Timestamp 는 java.util.Date를 상속받아서
모든 정보를 가지고 있다.



2009.10.21 00:00:00  <-- rs.getDate()
1970.01.01 01:15:38  <-- rs.getTime()
2009.10.21 01:15:38  <-- rs.getTimestamp()

반응형

'프로그래밍 > Java' 카테고리의 다른 글

외부 명령어 실행  (1) 2010.01.29
순서 보장 되는 HashMap  (0) 2009.11.19
[CVS] 이클립스에서 CVS 생성하기.  (0) 2009.08.04
IOStream 관련..  (0) 2009.07.21
[log4j] log4j 에 대한 설명.  (0) 2009.07.10
반응형


1. 이클립스에서 프로젝트를 생성한다.

2. 프로젝트 클릭 후

 - Team -> Share Project -> CVS -> repository location(Create or use existing) ->

 - Enter Modul Name
   + Use project name as module name : 프로젝트 이름을 그대로 사용.(선택)
   + Use specified module name : 프로젝트와 다른 이름으로 사용.
   + 서버에 있는 모듈 사용.

 -> finish -> commit(최초)

반응형
반응형

문자스트림: 16비트 유니코드 문자 데이터를 다룬다.(2bytes = 16bit)
바이트스트림: 8비트 데이터를 다룬다.(1bytes = 8bit)

스트림 : 입력스트림 : 출력스트림
문자스트림: Reader : Writer
바이트스트림: InputStream : OuputStream


File file = new File();

FileWriter fw = new Filewriter(file)

fileoutputstream(file)

bufferedwriter(fw)

printwriter(fw)

 

직렬화된 객체에 대한 작업을 할때는
연결스트림인 FileOutputStream 과 FileInputStream에
연쇄스트림인 ObjectOutputStream과 ObjectInputStream을 써서 처리

텍스트 파일에 대한 작업을 할 때는
연결스트림인 FileWriter 와 FileReader 을 쓰고,
효율향상을 위한 연쇄스트림인 BufferedWriter 와 BufferedReader 를 사용

 

FileWriter 클래스에 PrintWriter 클래스를 붙여 println() 메소드를 포함한 편리한 메소드를 사용
(성능면에선 별로 - 사용 자제..ㅋ)

반응형
반응형


1. LOG4J 구조
① Logger(Category) : 로그의 주체 (로그 파일을 작성하는 클래스)
 - 로깅 메세지를 Appender에 전달합니다.
 - Log4j의 심장부에 위치하며, 개발자가 로그출력 여부를 런타임에 조정되도록 해준다.
 - Logger는 로그레벨을 가지고 있으며, 로그의 출력여부는 로그문의 레벨과 로거의 레벨을 가지고 결정된다.
 - 어플리케이션을 작성하기전 어떤 로거를 사용해야 할지 정해야 한다.
   ex) static Logger logger = Logger.getLogger(getClass());


② Appender : 로그를 출력하는 위치
 - 전달된 로깅 메세지를 파일에다 기록할 것인지, 콘솔에 출력할 것인지 아니면 DB에 저장할 것인지 매개체 역활을 합니다.


③ Layout : Appender의 출력포맷
 - 어떤 형식으로 출력할 것이지 출력 layout을 결졍합니다.

 ※ Layout의 종류
 1) DateLayout
 2) HTMLLayout
 3) PatternLayout (일반적으로 PatternLayout을 사용하는 것이 디버깅에 가장 적합함)
 4) SimpleLayout
 5) XMLLayout

 

2. LOG4J 로깅 레벨
① FATAL : 가장 크리티컬한 에러가 일어 났을 때 사용합니다.
② ERROR : 일반 에러가 일어 났을 때 사용합니다.
③ WARN : 에러는 아니지만 주의할 필요가 있을 때 사용합니다.
④ INFO : 일반 정보를 나타낼 때 사용합니다.
⑤ DEBUG : 일반 정보를 상세히 나타낼 때 사용합니다

 

3. 설정 포맷

① 로그파일명 포맷 (DatePattern)
 - 로그파일명 포맷입니다. 날짜, 시간 및 분단위로까지 로그 파일을 분리할 수 있습니다.

 ※ 형식 설명
  '.'yyyy-MM 매달 첫번째날에 로그파일을 변경합니다
  '.'yyyy-ww 매주의 시작시 로그파일을 변경합니다. 
  '.'yyyy-MM-dd 매일 자정에 로그파일을 변경합니다.
  '.'yyyy-MM-dd-a 자정과 정오에 로그파일을 변경합니다.
  '.'yyyy-MM-dd-HH 매 시간의 시작마다 로그파일을 변경합니다.
  '.'yyyy-MM-dd-HH-mm 매분마다 로그파일을 변경합니다.


② PatternLayout 포맷
 - 로그자체를 어떤 포맷으로 남길지 결정합니다.
 - layout에는 HTMLLayout, PatternLayout, SimpleLayout, XMLLayout등이 있으며 PatternLayout이 일반적으로 가장 많이 쓰입니다.


%p  debug, info, warn, error, fatal 등의 priority 가 출력된다.
%m  로그내용이 출력됩니다
%d  로깅 이벤트가 발생한 시간을 기록합니다. 포맷은 %d{HH:mm:ss, SSS}, %d{yyyy MMM dd HH:mm:ss, SSS}같은 형태로 사용하며 SimpleDateFormat에 따른 포맷팅을 하면 된다
%t  로그이벤트가 발생된 쓰레드의 이름을 출력합니다.
%%  % 표시를 출력하기 위해 사용한다.
%n  플랫폼 종속적인 개행문자가 출력된다. \r\n 또는 \n 일것이다.
%c  카테고리를 표시합니다. 예) 카테고리가 a.b.c 처럼 되어있다면 %c{2}는 b.c가 출력됩니다.
%C  클래스명을 포시합니다. 예) 클래스구조가 org.apache.xyz.SomeClass 처럼 되어있다면 %C{2}는 xyz.SomeClass 가 출력됩니다
%F  로깅이 발생한 프로그램 파일명을 나타냅니다.
%l  로깅이 발생한 caller의 정보를 나타냅니다
%L  로깅이 발생한 caller의 라인수를 나타냅니다
%M  로깅이 발생한 method 이름을 나타냅니다.
%r  어플리케이션 시작 이후 부터 로깅이 발생한 시점의 시간(milliseconds)
%x  로깅이 발생한 thread와 관련된 NDC(nested diagnostic context)를 출력합니다.
%X  로깅이 발생한 thread와 관련된 MDC(mapped diagnostic context)를 출력합니다.


test.jsp

[%c] [%C] [%d] [%F] [%l] [%L] [%m] [%M] [%n] [%p] [%r] [%t] [%x] [%X]

[test.jsp] [org.apache.jsp.test_jsp] [2005-03-10 12:37:23,561] [test_jsp.java] [org.apache.jsp.test_jsp._jspService(test_jsp.java:64)] [64] [fatal!!] [_jspService] [개행] [FATAL] [765567] [http-8080-Processor25] [] []

반응형
반응형

# Log4j Setting file(DEBUG ~ FATAL, OFF 일 경우 로그 사용 안함), 사용 로그 이름(appender 이름)
log4j.rootLogger=INFO, console


# log level and appender
log4j.logger.com.some=DEBUG, console
log4j.logger.com.some.Any=INFO, logfile
log4j.additivity.com.some=false  // 상위 로거의 속성을 상속받지 않겠다.(중복 출력하지 않는다)


# Console log
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-5p %l - %m%n


# Daily file log
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.Append=true // restart 시 기존 파일에 추가, false : 새로 씀.
log4j.appender.logfile.Threshold=DEBUG // 이 appender 는 여기 명시된 priority 와 같거나 높은 메세지만 로깅한다
log4j.appender.logfile.ImmediateFlush=true // 로그메세지들이 전혀 버퍼되지 않는 것을 의미하며 대부분의 상황에 적당하다.
log4j.appender.logfile.File=./log_app.csv
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd
log4j.appender.logfile.MaxFileSize=300KB
log4j.appender.logfile.MaxBackupIndex=1 // 최대 파일이 넘어갔을 경우 백업
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=[%d{HH:mm:ss}][%-5p](%F:%L) - %m%n


# DB로그를 작성하기 위해서는 위와 같이 DB에 Table을 만들어야 한다
# jdbcappender.jar, ojdbc14.zip 파일 필요.

CREATE TABLE APP_LOG
(
  SYSTEMNAME  VARCHAR2(100 BYTE),
  LOGDATE     TIMESTAMP DEFAULT SYSDATE,
  LOGLEVEL    VARCHAR2(100 BYTE),
  MDC1        VARCHAR2(100 BYTE),
  MDC2        VARCHAR2(100 BYTE),
  MESSAGE     VARCHAR2(4000 BYTE),
  TROWABLE    VARCHAR2(4000 BYTE)
)

log4j.appender.dblog=org.apache.log4j.jdbcplus.JDBCAppender
log4j.appender.dblog.url=jdbc:oracle:thin:@127.0.0.1:1521:MCSDB // DB url 정의
log4j.appender.dblog.dbclass=oracle.jdbc.driver.OracleDriver  // DB 드라이버 클래스 정의
log4j.appender.dblog.username=sds     // DB User 정의
log4j.appender.dblog.password=sdsdb     // DB Password 정의
log4j.appender.dblog.sql=INSERT INTO APP_LOG( SYSTEMNAME, LOGDATE, LOGLEVEL, MDC1,MDC2, MESSAGE, TROWABLE ) values ('MCSMGR',TIMESTAMP '@TIMESTAMP@','@PRIO@','@MDC:APP@','@MDC:TSC@','@MSG@','@THROWABLE@') // INSERT SQL문 정의
log4j.appender.dblog.layout=org.apache.log4j.PatternLayout
log4j.appender.dblog.layout.ConversionPattern=%m
log4j.appender.dblog.buffer=1      // DB를 Update하기 전까지 SQL문의 Buffer 개수. 1이면 바로 Update 함
log4j.appender.dblog.commit=true     // commit 여부
log4j.appender.dblog.quoteReplace=true     // single quotes (')를 2 single quotes ('')로 변경 여부
log4j.appender.dblog.throwableMaxChars=3000    // throwable/exception stack trace의 최대 문자 개수 정의

반응형

'프로그래밍 > Java' 카테고리의 다른 글

IOStream 관련..  (0) 2009.07.21
[log4j] log4j 에 대한 설명.  (0) 2009.07.10
Enum 사용법.  (0) 2009.07.07
quartz 사용시 UserTransaction 에러 발생시 해결.  (0) 2009.06.18
abstract 와 interface 의 차이.  (0) 2009.06.05
반응형


###### Gender.java

public enum Gender {
 MALE("하하")
 , FEMAIL("호호");
 
 private String sound;
 
 Gender(String arg) {
  this.sound = arg;
 }
 
 String getSound() {
  return sound;
 }
}






####### TestEnum.java

public class TestEnum {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  // 외부에서 정의.
  System.out.println(" ================ 외부 정의 Enum ===============");
  Gender d = Gender.MALE;
  
  switch (d) {
   case MALE: System.out.println("싫어");break;
         default:        System.out.println("좋아");break;
  }
  
  for(Gender g : Gender.values()){
      System.out.println(g);
      System.out.println("name : " + g.name());
   System.out.println("ordinal : " + g.ordinal());
      System.out.println("sound : " + g.getSound());
  }
  
  
  // 내부에서 정의.
  System.out.println(" ================ 내부 정의 Enum ===============");
  Gender2 d2 = Gender2.FEMAIL;
  
  switch (d2) {
   case MALE: System.out.println("싫어");break;
         default:        System.out.println("좋아");break;
  }
  
  for(Gender2 g : Gender2.values()){
   System.out.println(g);
   System.out.println("name : " + g.name());
   System.out.println("ordinal : " + g.ordinal());
  }
  
 }
 
 public enum Gender2 {
  MALE, FEMAIL
 }
}





################ 결과


 ================ 외부 정의 Enum ===============
싫어
MALE
name : MALE
ordinal : 0
sound : 하하
FEMAIL
name : FEMAIL
ordinal : 1
sound : 호호
 ================ 내부 정의 Enum ===============
좋아
MALE
name : MALE
ordinal : 0
FEMAIL
name : FEMAIL
ordinal : 1

반응형
반응형

Spring 으로 플젝하다가...

Quartz 를 사용해서 스케줄링 프로그램을 만드는데..

아래와 같은 에러가 발생했다.



org.springframework.beans.factory.BeanCreationException:

Error creating bean with name

'org.springframework.scheduling.quartz.SchedulerFactoryBean' defined in ServletContext resource
[/WEB-INF/applicationContext.xml]: Invocation of init method failed;

nested exception is java.lang.NoClassDefFoundError:

javax/transaction/UserTransaction


================= 해결 방법 ==================

jta.jar 를 lib 에 추가한다. --;;

반응형

'프로그래밍 > Java' 카테고리의 다른 글

[log4j] log4j.properties 설정 파일 예제  (0) 2009.07.10
Enum 사용법.  (0) 2009.07.07
abstract 와 interface 의 차이.  (0) 2009.06.05
ajax, jsp 에서 한글 깨짐 문제.  (1) 2009.04.23
서블릿 설정  (0) 2009.04.09
반응형
반응형

'프로그래밍 > Java' 카테고리의 다른 글

Enum 사용법.  (0) 2009.07.07
quartz 사용시 UserTransaction 에러 발생시 해결.  (0) 2009.06.18
ajax, jsp 에서 한글 깨짐 문제.  (1) 2009.04.23
서블릿 설정  (0) 2009.04.09
[xml] xml parsing - SAXParseException  (0) 2009.03.13
반응형

ajax 는 utf-8 통신.

자바스크립트에서 post 로 넘겨야됨.

sack 사용 시.

ex)

var description = description.value;

// sack 생성.
objSack = new sack();

// set variable(post)
objSack.setVar("description", description);


이렇게 하면 되네~

그리고 받는 쪽에서는..

request.setCharacterEncoding("utf-8");

요렇게 해줘야겠징..ㅋㅋ

^^

성공~~


반응형

'프로그래밍 > Java' 카테고리의 다른 글

quartz 사용시 UserTransaction 에러 발생시 해결.  (0) 2009.06.18
abstract 와 interface 의 차이.  (0) 2009.06.05
서블릿 설정  (0) 2009.04.09
[xml] xml parsing - SAXParseException  (0) 2009.03.13
inputStream <-> String  (0) 2009.03.03
반응형


===============================================================
== C:\javadev\programs\tomcat-5.5.23\conf\web.xml 파일 수정. ==
===============================================================
주석을 해제해야 하는 부분 : 2군데.

1.

    <servlet>
        <servlet-name>invoker</servlet-name>
        <servlet-class>
          org.apache.catalina.servlets.InvokerServlet
        </servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>

 

2.

    <servlet-mapping>
        <servlet-name>invoker</servlet-name>
        <url-pattern>/servlet/*</url-pattern>
    </servlet-mapping>

 

 

===============================================================
== Project Properties 수정 : servlet Library 추가. ============
===============================================================

Project -> Properties -> Java Build Path -> Source
 - Default output folder : Project Name/WebContent/WEB-INF/classes


Project -> Properties -> Java Build Path -> Libraries
 - Add External JARs... : C:\javadev\programs\tomcat-5.5.23\common\lib\servlet-api.jar

 

 

=============================================================
== jstl 사용시 추가.
=============================================================
jstl.jar
standard.jar

 


=============================================================
== java application library path 와 sevlet library path 는 다르다.
=============================================================

 

 

반응형

'프로그래밍 > Java' 카테고리의 다른 글

abstract 와 interface 의 차이.  (0) 2009.06.05
ajax, jsp 에서 한글 깨짐 문제.  (1) 2009.04.23
[xml] xml parsing - SAXParseException  (0) 2009.03.13
inputStream <-> String  (0) 2009.03.03
jstl 예제 - fn, fmt, foreach  (2) 2009.02.18

+ Recent posts