데이터베이스의 캐릭터셋 설정 확인 (설정 값이 한글이 지원이 안되는 캐릭터셋으로 되어 있는 경우에는 한글 입출력이 불가능하다.)

SQL> select * from nls_database_parameters;


PARAMETER                      VALUE
------------------------------ ----------------------------
NLS_LANGUAGE                   AMERICAN
NLS_TERRITORY                  AMERICA
NLS_CURRENCY                   $
NLS_ISO_CURRENCY               AMERICA
NLS_NUMERIC_CHARACTERS         .,
NLS_CHARACTERSET               AL32UTF8
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                DD-MON-RR
NLS_DATE_LANGUAGE              AMERICAN
NLS_SORT                       BINARY
NLS_TIME_FORMAT                HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY              $
NLS_COMP                       BINARY
NLS_LENGTH_SEMANTICS           BYTE
NLS_NCHAR_CONV_EXCP            FALSE
NLS_NCHAR_CHARACTERSET         AL16UTF16
NLS_RDBMS_VERSION              11.1.0.6.0


캐릭터셋을 확인하고 (AL32UTF8)

리눅스 쉘에서, 

$ export NLS_LANG=KOREAN_KOREA.AL32UTF8

$ sqlplus / as sysdba


SQL*Plus: Release 11.1.0.6.0 - Production on 월 11월 10 17:31:57 2008

Copyright (c) 1982, 2007, Oracle.  All rights reserved.


다음에 접속됨:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>
SQL> select '한글' from dual;


'한글'
------
한글

SQL>


sqlplus 인터페이스도 한글로 출력되고, 데이터도 한글로 잘 출력된다.


NLS_LANG 파마리터 설정을 해제하면

$ unset NLS_LANG

$ sqlplus / as sysdba


SQL*Plus: Release 11.1.0.6.0 - Production on Mon Nov 10 17:33:49 2008

Copyright (c) 1982, 2007, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select '한글' from dual;


'???????'
---------------------
???????

SQL> 

export NLS_LANG=KOREAN_KOREA.KO16MSWIN949


sql>create directory datadmp as '경로';
sql>grant read, write on directory datadmp to 계정;
c:\>expdp system/manager schemas=SMS directory=datadmp dumpfile=SMS.DMP


계정이 생성되어있는지 확인(생성 안되어있는상태에서 성공했음)
sql>create directory datadmp as '경로';
# impdp system/manager schemas=SMS directory=datadmp dumpfile=SMS.DMP remap_schema=익스포트한계정:임포트할계정




abcd
aaa bbb ccc ddd eee fff
aaa1
aaa1
aaa1
aaa1
aaa1
aaa1
aaa1
aaa1
aaa1 bbb2 ccc3 ddd1 eee2 fff3
aaa1 bbb2 ccc3 ddd1 eee2 fff3
aaa1 bbb2 ccc3 ddd1 eee2 fff3
aaa1 bbb2 ccc3 ddd1 eee2 fff3
aaa1 bbb2 ccc3 ddd1 eee2 fff3
aaa1 bbb2 ccc3 ddd1 eee2 fff3
aaa1 bbb2 ccc3 ddd1 eee2 fff3
aaa1 bbb2 ccc3 ddd1 eee2 fff3
mssql
:select CONVERT(CHAR(8),getdate(),112)+REPLACE(CONVERT(CHAR(8),getdate(),108),':','')
mysql 
:select convert(date_format(now(),'%Y%m%d%H%i'),char(12));

oracle 
:select to_char(sysdate, 'yyyymmddhh24mi') from dual;
@echo off
setlocal
 
:: str 변수 초기화
set str=
 
:RE
set /p str=복사해올 파일명 입력:
if "%str%" == "" goto RE

echo 방금 입력하신 문자열은 %str% 입니다.
copy d:\%str%.exe d:\job
rem 이런식으로 사용 하면 된다~~(주석임)


java Calendar 시간과 서버시간 불일치 처리

Calendar runTimeCal = Calendar.getInstance();
System.out.println ("현재 타임존 : " + runTimeCal.getTimeZone().getDisplayName() );
TimeZone tz = TimeZone.getTimeZone("GMT+09:00");
runTimeCal.setTimeZone(tz);




위와 같이 처리하면 나온다.

윈도우 비스타에선 운영체제의 timezone을 한국으로 설정해도
Java 관련 프로그램은 계속 그리니치 표준시로 나온다.
아래 옵션을 지정해주면 정상으로 출력된다.
-Duser.timezone=Asia/Seoul

 

 

출처는 까먹음(죄송해요)..ㅠㅠ 

@echo off
java -cp lib/jtds-1.2.jar;lib/log4j-1.2.15.jar;lib/xstream-1.3.1.jar;./;%CLASSPATH% mgr.MainEngine


set root_path=d:\test
set lib_home=%root_path%/lib
set classpath=%lib_home%/xstream-1.3.1.jar;%lib_home%/jtds-1.2.jar;%lib_home%/log4j-1.2.15.jar;

java mgr.MainEngine 

-- 컬럼수 조회 

import java.sql.*;

try{
       String driver = "oracle.jdbc.driver.OracleDriver";
       String url = "jdbc:oracle:thin:@localhost:1521:ORCL";

       Class.forName(driver);
       Connection conn = DriverManager.getConnection(url, "userid", "passwd");

       String Qry=" select * from ab";

       Statement Stmt = conn.createStatement();
       ResultSet Rs = Stmt.ExecuteQuery(Qry);

 

//**** 컬럼 갯수를 알고싶을때
       ResultSetMetaData Rsmd = Rs.getMetaData();

       int ColumnCount=Rsmd.getColumnCount();

//****

 

}catch(Exception e){
       e.printStackTrace()
}


// 패키지 컴파일
C:\temp>javac my\main\TestPackge.java


// 패키지 실행
C:\temp>java my.main/TestPackge
Test Package
Test_one 

// 오라클 패키지 프로시저 선언
 

CREATE OR REPLACE PACKAGE SDK_RESULT_PKG
AS 
   TYPE REF_TYPE IS REF CURSOR;
   PROCEDURE SDK_RESULT(
           V_RESULT OUT SDK_RESULT_PKG.REF_TYPE, 
           MSG_TYPE IN VARCHAR2, 
       FROMDATE IN VARCHAR2,
       TODATE IN VARCHAR2
      );
END SDK_RESULT_PKG;

// 오라클 패키지 프로시저 구현

CREATE OR REPLACE PACKAGE BODY SDK_RESULT_PKG 
AS
   PROCEDURE SDK_RESULT(
       V_RESULT OUT SDK_RESULT_PKG.REF_TYPE, 
       MSG_TYPE IN VARCHAR2, 
       FROMDATE IN VARCHAR2,
       TODATE IN VARCHAR2
      )
   AS
       SMS_SQL VARCHAR2(5000);
       MMS_SQL VARCHAR2(5000);
       VMS_SQL VARCHAR2(5000);
       FMS_SQL VARCHAR2(5000);
       SURVEY_SQL VARCHAR2(5000);
       
     BEGIN
       SMS_SQL := 'SELECT MSG,  ';
       SMS_SQL := SMS_SQL || '     USER_ID, ';
       SMS_SQL := SMS_SQL || '     SEND_DATE, ';
       SMS_SQL := SMS_SQL || '     0 AS REPLY_TYPE, ';
       SMS_SQL := SMS_SQL || '     SUM(DEST_COUNT) AS DEST_COUNT, ';
       SMS_SQL := SMS_SQL || '     SUM(SUCC_COUNT) AS SUCC_COUNT, ';
       SMS_SQL := SMS_SQL || '     SUM(FAIL_COUNT) AS FAIL_COUNT, ';
       SMS_SQL := SMS_SQL || '     SUM((DEST_COUNT-SUCC_COUNT) FAIL_COUNT) AS ING_COUNT, ';
       SMS_SQL := SMS_SQL || '     CALLBACK, ';
       SMS_SQL := SMS_SQL || '     SUBSTR(XMLAGG(XMLELEMENT(AB,MSG_ID || ''^'') ORDER BY MSG_ID).EXTRACT(''//text()''),1) AS MSG_ID ';
       SMS_SQL := SMS_SQL || '     FROM  TBL';
       SMS_SQL := SMS_SQL || '     GROUP BY SMS_MSG, USER_ID, SEND_DATE, CALLBACK, RESERVED5';
    
    OPEN V_RESULT FOR SMS_SQL;

  END SDK_RESULT; 
END SDK_RESULT_PKG;


// 자바 실행
// 자바 실행

Connection Conn=null;
ResultSet Rs = null;
CallableStatement cstmt = null;

DBClassTEST DBClass = new DBClassTEST()

DBClass.DB_Info();
DBClass.Connect();
Conn = DBClass.Conn();

//**** DB 연결 부분은 알아서 구현 위 내용은 임시 클래스
 
Qry = "BEGIN SDK_RESULT_PKG.SDK_RESULT(?,?,?,?); END;";

cstmt = Conn.prepareCall(Qry);
cstmt.registerOutParameter(1,OracleTypes.CURSOR);
cstmt.setString(2,"SMS");
cstmt.setString(3,"200901010000");
cstmt.setString(4,"201012312359");

cstmt.execute();
Rs = ((OracleCallableStatement)cstmt).getCursor(1);

ColumnName="TEST"; //컬럼이름

while(Rs.next()){
 System.out.println(Rs.getString(ColumnName));
}
Rs.close();
cstmt.close();
Conn.close();
DBClass.DB_Close();


+ Recent posts