2013-12-18

Mysql/Mariadb] MariaDB 5.5.34 zip 파일 설치하기.

mysql 과 쌍둥이 Database 인 MariaDB 설치하기.

1. mariadb download
   https://downloads.mariadb.org 에 접속해서 해당하는 버전을 다운로드(zip 파일)
   ** 현재 안정화 버전은 5.5.34(mysql 5.5에 대응) , 베타버전은 10.6 beta(mysql 5.6에 대응)를 테스트 중.
       
2. download 된 zip 파일을 압축해제 한다.

3. 압축이 풀린 디렉토리를 설치하고자 하는 곳으로 옮긴다.
    ex) c:\maraidb-5.5.34

4. my-innodb-heavy-4G.ini 을 my.ini로 복사

5. my.ini 파일 편집

[client]

default-character-set = utf8

[mysqld]
init_connect = SET collation_connection = utf8_general_ci
init_connect = SET NAMES utf8
character-set-server = utf8
collation-server = utf8_general_ci



# innodb

innodb_data_home_dir = "c:/maraidb-5.5.34/data/"


[mysqldump]
default-character-set = utf8




[mysql]
default-character-set = utf8

5. mysql 실행
c:/maraidb-5.5.34/bin/mysqld


**  mysql을 윈도우 서비스로 등록

mysqld --install 서비스명.


6. mysql 에 root user로 접속
c:/maraidb-5.5.34/bin>mysql -u root -p
Enter password:   <== 엔터키 입력하고 넘어간다

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> use mysql <== db 변경
Database changed

7. mysql DB의 user 테이블의 내용 확인
MariaDB [mysql]> desc user; <== user 테이블의 구조 확인

8. root user의 비밀번호 변경 및 적용
MariaDB [mysql]> update user set password=password('변경할비밀번호') where user='root';  <== 비번 변경
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0

MariaDB [mysql]> flush privileges; <== 적용
Query OK, 0 rows affected (0.00 sec)

2013-12-03

javascript/SmartClient] RichTextEditor 사용하기.

RichTextEditor를 사용하기 위해서는 아래와 같은 선언문을 포함한 뒤.

<SCRIPT SRC=isomorphic/system/modules/ISC_RichTextEditor.js></SCRIPT><SCRIPT>isc._lastModule='RichTextEditor';</SCRIPT>

------------

isc.VLayout.create({
   membersMargin:5,
   members:[
       isc.RichTextEditor.create({
           autoDraw:false,
           ID:"contentEditor",
           height:155,
         
           overflow:"hidden",
           canDragResize:true, showEdges:true,

            // Standard control group options include
            // "fontControls", "formatControls", "styleControls" and "colorControls"
            controlGroups:["fontControls", "formatControls", "styleControls", "colorControls"],
            value:''
       })
       ]
});

와 같이 선언을 하여 사용한다.

(참조 URL : http://www.smartclient.com/docs/9.0/a/system/reference/SmartClient_Explorer.html#RichTextEditor
)

위의 RichTextEditor 를 DynamicForm 에 붙여서 사용하기 위해서는
DynamicForm에서 사용하고자 하는 field의 타입을 'canvas'로 선언해서 사용하면 된다.

추가적으로 해당 RichTextEditor 에서 사용하고자 하는 font를 더 추가하고자 하는 경우,

isomorphic/system/modules/ISC_RichTextEditor.js 파일의 82 line부근의 fontControls이 정의된 곳에 추가하고자 하는 Font 를 추가하면 된다.
추가하는 형식은 "font":"font 라벨(콤보에 표시되는 값)" 으로 "," 로 구분하여 추가하면 된다.

2013-10-27

재부도 전경


주말에 간 제부도전경. (파노라마 사진).
시원하고 좋은 날...
좋았다..

2013-10-25

DB2] DB2 에서 Assignment of a NULL value to a NOT NULL column 의 오류 발생시

DB2 로 프로그램 개발시 ,
Assignment of a NULL value to a NOT NULL column 메시지와 함께
"TBSPACEID=XX, TABLEID=XX, COLNO=XX" 라는 오류 메시지를 받게 되는 경우 아래의 방법으로 확인가능.

1.
select * from syscat.tables 
where tableid = xx 
;

로 해당 테이블 명을 확인.

2.
select * 
from syscat.columns 
where tabname = '확인한 테이블명'
and colno = xx;

로 해당 컬럼을 확인하여 조치를 취할 수 있다. 

2013-09-25

excel export 시에 chr(10)으로 line break 삽입시 cell wrap이 먹게 하는 방법.

excel export 시에 chr(10)으로 line break 삽입시 다운로드 된 excel 파일을 열면 라인이 안 바뀌어 보이는 현상이 발생할 수 있다.

그럴때 cell 내에서 라인이 바뀌어 보이게 처리하기 위해서는 아래의 방법으로 처리하면 된다.

HSSFWorkbook wb = new HSSFWorkbook();

CellStyle cs = wb.createCellStyle();
cs.setWrapText( true );

cell.setCellStyle( cs );

즉, cellStyle의 wrapText 속성을 true로 설정하여 대입하면 된다는 얘기.

2013-09-05

DB2] Alter table ... drop column

보통 DB에서 alter table  작업은 다음과 같이 한다.

alter table table_name 
drop column column 
;

위의 문장은 table_name 의 column 컬럼을 제거하겠다는 명령이다. 

하지만 db2에서 위 명령을 실행한 후, 

select * from table_name; 

명령을 실행하면 

SQL0668N Operation not allowed for reason code "7"

과 같은 오류를 발생시키면서 select 쿼리를 실행하지 못한다. 


이런 경우, 

reorg table table_name ;

을 실행하면 위의 오류가 해결 된다.

***
column 추가
==>
    alter table table_name
        add column column_name data_type ;


column 명 변경
==>
    alter table table_name
        alter column column_name_org
              set default 'modified_column_name' ;

pk 삭제
==>
    alter table table_name
        drop primary key

pk 추가
==>
    alter table table_name
        add primary key field_name

column 의 data type 변경
==>
   alter table table_name
         alter column column_name
             set data type 변경할 데이터 타입.


=========================================

pk 변경하기 위한 작업절차


-- pk 에 추가할 컬럼 생성. (pk 이기 때문에 not null 로 생성해야 됨)
alter table <테이블명>
    add column <컬럼명> <데이터타입> not null default 1
;

-- 테이블 데이터 확인.
select *
from <테이블명>
;

commit;

-- reorg 작업.
reorg table <테이블명> ;

-- pk 제거
ALTER TABLE <테이블명>
  drop PRIMARY KEY
;

-- pk 재생성
ALTER TABLE <테이블명>
  ADD PRIMARY KEY
    (pk 컬럼1, pk 컬럼2, ... , pk 컬럼N  )
;



CREATE SEQUENCE <Sequence명>
  AS INTEGER
  START WITH 1
  CACHE 20
  ORDER
;


---- 
sequence 삭제
drop SEQUENCE <Sequence명>

2013-08-08

javascript/eclipse] eclipse 에서 'Requesting JavaScript AST from selection' has encountered a problem' 오류 발생시 해결방법.

eclipse로 작업중에 'Requesting JavaScript AST from selectionhas encountered a problem.' 발생하면 다음과 같이 하면 문제가 해결 될 것이다.
(Eclipse JSDT 의 버그가 원인)

- eclipse 메뉴 :: Window -> Preference -> Javascript -> Editor -> Mark Occurences -> Mark occurences of the selected element in the current file 항목의 체크 해지

2013-07-24

.svn 폴더를 삭제하는 .bat 파일

.svn 폴더를 삭제하여 Subversion 서버와 연결을 끊고 싶은 경우에 아래의 내용을 notepad에서 입력 후, 저장시 확장자를 bat로 만들어서 저장한다.

그 뒤, 해당 파일을 .svn 폴더를 삭제하고자 하는 상위 디렉토리로 이동.
cmd 창에서 생성한 파일명.bat 라고 입력하면,
bat 파일이 존재하는 폴더와 그 하위에 존재하는 .svn 폴더를 모두 삭제해 준다.

.bat 파일의 내용.
==========================================
FOR /R %1 %%1 IN (.svn) DO RMDIR /S /Q "%%1"


위의 내용을 활용하면 .cvs 에도 적용 가능 할 듯 싶다.

2013-07-23

DB2] 문자열을 인자로 받아 테이블 형태로 보여주는 user defined function

db2로 작업하다가 문자열을 parameter로 넣어 주면 table 형태의 데이터로 반환해 주는 사용자 정의 함수를 발견하게 되었다.

해당 소스는 아래 주소를 참조하여 상황에 맞게 수정하여 컴파일 후 사용하면 된다.

ELEMIDX :: 인자로 주어진 문자열 중 ',' 의 위치를 반환.
http://www.ibm.com/developerworks/data/library/techarticle/0303stolze/0303stolze1.html

ELEMENTS :: 인자로 주어진 문자열을 ELEMIDX() 를 사용하여 java의 split(',') 의 기능과 유사한 내용을 테이블 형태로 반환하는 함수.
http://www.ibm.com/developerworks/data/library/techarticle/0303stolze/0303stolze1.html


위 내용의 함수는 join을 이용하여 sql문을 작성할 경우 유용하게 사용할 수 있을 듯 하다.




2013-06-10

Select 에서 여러 행을 하나의 행으로 합쳐서 뽑고자 하는 경우


Select 쿼리를 사용하여 나온 결과가 여러행인 경우 키값이 같은 경우 하나의 행으로 보여주고자 하는 경우, 아래의 쿼리를 사용하여 간단하게 원하는 결과값을 얻을 수가 있다.

아래 쿼리는 DB2에서 재현을 해본 결과 해당 쿼리가 무난하게 돌아가는것을 확인하였다.


실행 쿼리 :
=================================
with tb(docno, seqno, prot, empno) as
(
select '1111' docno, 1 seqno, 1 prot, 'AAAA' empno from dual union all
select '1111' , 1 , 2 , 'BBBB' from dual union all
select '5555' , 3 , 1 , 'KKKK' from dual union all
select '5555' , 3 , 2 , 'MMMM' from dual union all
select '5555' , 3 , 3 , 'PPPP' from dual
)
select docno
, seqno
, listagg(empno,' ') WITHIN GROUP (ORDER BY seqNO, prot) as empno
from tb
group by docno
, seqno
;


실행 결과 :
=================================
docno seqno   empno
1111 1     AAAA BBBB
5555 3     KKKK MMMM PPPP


내용 출처 : http://www.oracleclub.com/article/51669

아래의 링크도 참조하기 바랍니다.
 http://blog.naver.com/PostView.nhn?blogId=jauroy&logNo=50044746370

위에 사용된 listagg() 란 함수에 대해 찾아보다가 발견한 아래의 페이지도 참고 바랍니다.
http://blog.naver.com/PostView.nhn?blogId=joonaha&logNo=70108717698

2013-05-26

Linux] Ubuntu 리눅스 설치 후 X윈도우 해상도 맞지 않아서 해상도 조정이 필요한 경우.

- 리눅스 부팅시 터미널 모드 진입
ctrl - alt - F1 : TTY1 로 진입

- 우분투 설치 완료 후 CUI 환경(터미널 모드)로 부팅시 GUI(X-window) 로 부팅하기 위한 설정 방법.
  1. 설치시 설정한 user 로 로그인.
  2. startx 명령을 했을때 에러 발생시 sudo apt-get install xinit 실행하여 x-widnow를 설치
  3. sudo apt-get update 를 실행하여 업데이터 및 설치
  4. sudo apt-get upgrade 를 실행 및 업그레이드
  5. sudo apt-get install ubuntu-desktop 실행해서 desktop manager 설치
  6. startx 로 x-window 실행.

- 위 과정으로 GUI 모드로 부팅후 화면 주사율(해상도)가 맞지 많아 화면이 제대로 나오지 않으면
아래의 과정으로 해결한다.
ubuntu 13.x 버전을 기준으로 한다.

1. 부팅 후 GUI로그인 화면에서  ctrl - alt - F1 를 눌러  TTY1 로 진입한다.
2. 사용자 계정으로 로그인한다.
3. $sudo service ligthdm stop <== service 종료
4. $sudo Xorg -configure   <== 현재 디렉토리에 신규 xorg.conf.new 파일 생성
5. $sudo mv ~/xorg.conf.new /etc/X11/xorg.conf  <== 신규 생성된 파일로 conf  파일 대체
6. $sudo reboot <== 시스템 재시작

위와 같이 하면 GUI에서도 제대로 사용 가능한다.

2013-05-10

SQL] DB2 date 를 milliseconds 로 변환하기.


DB2
=======
select to_number(sysdate - to_date('1970-01-01','YYYY-MM-DD')) * (24 * 60 * 60 * 1000)
FROM sysibm.sysdummy1 ;


ORACLE
========

select to_number(sysdate - to_date('1970-01-01','YYYY-MM-DD')) * (24 * 60 * 60 * 1000)
FROM dual;


2013-04-17

Javascript] Javascript 에서의 replace


자바스크립트에서  replace는 query, java 의 replace 와 달리 처음 등장한 딱 한개만 바꿔준다.

아래와 같이 실행하면,

str = "aaabbbaaa";
result = str.replace("aaa", "ccc");

result는 내가 의도한 "cccbbbccc"가 아닌 "cccbbbaaa"가 나온다.


따라서, 원하는 문자열을 모두 바꾸어 주려면 정규식 표현을 사용해야 한다.

str = "aaabbbaaa";
result = str.replace(/a/g, "c");


위의 /a /g 의 의미는  아래와 같다.
    /a/ : str 변수의 값 중 'a'라는 문자를
    g (완전일치(발생할 모든 pattern에 대한 전역 검색)) str 의 전체 문자열에 대해, 'c'로 변환.

그 외에 다른  플래그는 아래와 같다.

i : 대/소문자 무시, gi : 대/소문자 무시하고 완전 일치

2013-04-03

DB] oracle 에 있는 sign() 의 기능


오라클에 있는  SIGN이라는 함수의 기능은 원하는 결과값(?!)이 양수 / 음수 / 0 이냐에 따라서 값을 반환해주는 함수.

예)
SELECT SIGN(1+1) a, SIGN(1-1)  b, SIGN(1-5) c
FROM DUAL;

결과
---------------------------

a | b | c
==========
1 | 0 | -1


추가적인 예)
필드의 값이 100 이상인 것의 합과 미만인 것의 합을 구하는 쿼리.
출처 : http://ssiso.net/cafe/club/club1/board1/content.php?board_code=oracle%7Coratip&idx=31597&club=oracle


SELECT SUM(CASE SIGN(A-100)
                         WHEN 0 THEN A
                         WHEN 1 THEN A
                         ELSE 0
                     END)                      AS OVER100,
             SUM(CASE SIGN(A-100)
                         WHEN -1 THEN A
                         ELSE 0
                     END)                      AS DOWN100
    FROM DUAL;

2013-03-26

DB2] locking 정보 확인


-- db2 locking 정보 확인.  

SELECT lock_name,
  hld_member,
  lock_status,
  hld_application_handle
FROM  TABLE (MON_GET_APPL_LOCKWAIT(NULL, -2))

2013-02-20

cross site scripting(XSS) 공격 우회방법.


1. xss (cross site scripting) 공격을 was 설정을 통해 방어하는 방법
   ==> java class 와 web.xml 의 설정을 통한 방어로 기존의 작업분의 변경이 많이 필요할 수 있다.

2. jstl 태그를 사용해서 코딩을 한 경우 아래의 사이트를 참조하셔도 될것 같습니다. 

3. jsp 메소드를 사용하는 방법 (아래 메소드를 jsp에서 호출해서 사용하면 됩니다.)
/**
 * XSS 제거
 * @param value
 * @return
 */
public static String removeXSS(String value){
     
     value = value.replaceAll("&", "&");
     value = value.replaceAll("<", "<");
     value = value.replaceAll(">", ">");
     value = value.replaceAll("", null);
     value = value.replaceAll("\"", "";");
     value = value.replaceAll("\'", "';");
     value = value.replaceAll("%", "%;");    
     value = value.replaceAll("../", "");
     value = value.replaceAll("..\\\\", "");
     value = value.replaceAll("./", "");
     value = value.replaceAll("%2F", "");
     
     return value;
}

2013-02-19

DB2] 프로시저 script 확인하는 쿼리

-- procedure명으로 조회.
select * from SYSIBM.SYSPROCEDURES where PROCNAME like '%프로시저 명%';

-- oracle 의 dual 에 해당하는 테이블 :: sysibm.sysdummy1
select current_timestamp from sysibm.sysdummy1;

오라클] 프로시저 내용 확인하는 sql


select * from all_source where name = upper('프로시저명');

select * from user_source where name = upper('프로시저명');

2013-02-08

Javascript ] javascript 날짜(Date) 관련 함수.




// 현재 일자보다 7일전 날짜 구하기.

var dt = new Date();
var fd = timeShift(dt, "-7");
var val = fd.getFullYear()+"-"+(fd.getMonth()+1)+"-"+fd.getDate();

// fd 값을 가진 날의 요일

fnSetFromDateVal(fd);

// fd ~ dt 의 기간.
betweenDay(fd, dt);

/**
 * a : date()
 * s : 이동하고자 하는 일자 기간.(7 - 7일, 15 - 15일)
 */
function timeShift(a,str){

b = new Date();

b.setTime(a.getTime() + ((str) * 24 * 60 * 60 * 1000));

return b;

}



/**
  * 특정날짜의 요일을 구한다.
  * time : 날자형식의 데이터.
  */
function getDayOfWeek(time) {

     var now = new Date(time);
     var day = now.getDay(); //일요일=0,월요일=1,...,토요일=6
    // var week = new Array('일','월','화','수','목','금','토');
    // return week[day];  // 리턴값은 일 ~ 토 로 표시된다.
     return day;  // 리턴값은 0 ~ 6 로 표시된다.
 }



/**
  * 입력받을 날자 사이의 기간을 리턴
  * fd : 시작일자, td : 종료일자.
  */

function betweenDay(fd, td) {
    var betweenDay = (fd.getTime() - td.getTime())/1000/60/60/24;
    return betweenDay;
}

2013-01-09

eclipse에서 tomcat 기동시 에러


eclipse에서 tomcat 기동시 에러

java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
오류 발생시 대처 방법 ::


따라서 다음 사항에 대해 확인해 본다.

1) 해당 프로젝트 내의 WEB-INF/lib 폴더 내에 spring-x.x.x.jar 파일이 존재하는지 체크.

2) 해당 jar 파일이 존재하는데도 위와 같은 에러가 발생한다면 Eclipse와 Tomcat 연동이
   정상적이지 않을 가능성이 있으므로
   Eclipse -> Servers View에서 Tomcat을 선택하고 마우스 오른쪽 버튼을 클릭한 후
   Clean...과 Clean Tomcat Work Directory... 메뉴를 실행.
   그런 후에 실행 대상 프로젝트를 선택하고 Eclipse 메뉴 Project > Clean... 을 실행.

3) 작업을 마친 후 다시 Tomcat을 시작.