Access Privledges

Access.h
#import <Foundation/NSObject.h>

@interface Access: NSObject {
    @public
        int publicVar;
    @private
        int privateVar;
        int privateVar2;
    @protected
        int protectedVar;
}
@end


Access.m
#import "Access.h"

@implementation Access
@end


main.m
#import "Access.h"
#import <stdio.h>

int main(int argc, const char* argv[]) {
    Access* a = [[Access alloc] init];
   
    // Works
    a->publicVar = 5;
    printf("public var: %i\n", a->publicVar);
   
    // doesn't compile
//    a->privateVar = 10;
//    printf("private var: %i\n", a->privateVar);
   
    [a release];
   
    system("PAUSE");
    return 0;
}


인스턴스 내의 변수에 직접 접근 시에는 -> 사용

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

[Objective C] 04 Exceptions  (0) 2009.10.28
[Objective C] 03 Class Level Access  (0) 2009.10.27
[Objective C] 01 Creating Classes  (0) 2009.10.27
[Objective C] 환경설정  (0) 2009.10.27
[Objective C] 튜토리얼  (0) 2009.10.14
이후 관련 소스는 http://www.otierney.net/objective-c.html 를 참고했음.

Creating Classes

Fraction.h
#import <Foundation/NSObject.h>

@interface Fraction: NSObject {
    int numerator;
    int denominator;
}

-(Fraction*) initWithNumerator: (int) n andDenominator: (int) d;
-(void) print;
-(void) setNumerator: (int) n;
-(void) setNumerator: (int) n andDenominator: (int) d;
-(void) setDenominator: (int) d;
-(int) numerator;
-(int) denominator;
@end


Fraction.m
#import "Fraction.h"
#import <stdio.h>

@implementation Fraction
-(Fraction*) initWithNumerator: (int) n andDenominator: (int) d {
    self = [super init];
   
    if(self) {
        [self setNumerator: n andDenominator: d];
    }
   
    return self;
}

-(void) print {
    printf( "%i/%i", numerator, denominator );
}

-(void) setNumerator: (int) n {
    numerator = n;
}

-(void) setNumerator: (int) n andDenominator: (int) d {
    numerator = n;
    denominator = d;
}

-(void) setDenominator: (int) d {
    denominator = d;
}

-(int) denominator {
    return denominator;
}

-(int) numerator {
    return numerator;
}
@end


main.m
#import <stdio.h>
#import "Fraction.h"

int main( int argc, const char *argv[] ) {
    // create a new instance
    Fraction *frac = [[Fraction alloc] init];
    Fraction *frac2 = [[Fraction alloc] init];
    Fraction *frac3 = [[Fraction alloc] initWithNumerator: 3 andDenominator: 10];

    // set the values
    [frac setNumerator: 1];
    [frac setDenominator: 3];
   
    // combined set
    [frac2 setNumerator: 1 andDenominator: 5];

    // print it
    printf( "The fraction is: " );
    [frac print];
    printf( "\n" );
   
    // print it
    printf("Fraction 2 is: ");
    [frac2 print];
    printf( "\n" );
   
    // print it
    printf("Fraction 3 is: ");
    [frac3 print];
    printf( "\n" );

    // free memory
    [frac release];
    [frac2 release];
    [frac3 release];
   
    system("PAUSE");

    return 0;
}


[클래스 메소드명]의 메소드 호출 방식
객체 할당 후 초기화 잊지말기
메소드 호출 시에 인자 넘기는 경우, 인자에 이름 붙이기 가능

Objective-C 다운 표현으로는 [receiver message]. 리시버에게 메시지를 보낸다고 표현

메소드 정의 시의 +/-
- Instance method
+ Class method

[Objective C] 환경설정

프로그래밍/iPhone Dev 2009. 10. 27. 14:26 Posted by galad
공부할 환경을 설정.

출처: http://umaking.tistory.com/45

위 블로그 참고할 것

참고로 Dev-C는 영문버전으로 설정할 것. 한글로 할 경우 프로젝트에 .m 파일이 인식 안되는 버그 있음.

[eclipse] 이클립스 + Mantis

프로그래밍/Library 2009. 10. 27. 11:02 Posted by galad

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

[Eclipse] Aptana Studio  (0) 2009.11.30
[Eclipse] 형상관리 plug-in  (0) 2009.11.30
[Utils] Paros 사용법  (0) 2009.09.06
[Subversion] 오리지널 서브버젼 이클립스 플러그인  (0) 2009.08.28
[Subclipse] ignore  (0) 2009.04.02
출처: http://www.viper.pe.kr/docs/make-ko/make-ko_2.html#SEC5

SRC=Fraction.m main.m
OBJ=$(SRC:.m=.o)
EXE=hello.exe

CC=gcc
#-Wall -O3
DEBUG= `gnustep-config --objc-flags`
FLAGS= -I /home/uclick/GNUstep/Local/Library/Headers -L /home/uclick/GNUstep/Local/Library/Libraries
LDFLAGS= -lobjc -lgnustep-base
EFLAGS= -enable-auto-import -fconstant-string-class=NSConstantString
RM=rm

%.o: %.m
    $(CC) $(DEBUG) $(FLAGS) $(LDFLAGS) $(EFLAGS) -o $@ -c $<

$(EXE): $(OBJ)
    $(CC)  -o $@ $(OBJ)  $(FLAGS) $(LDFLAGS) $(EFLAGS)

all: $(EXE)
    

clean:
    -$ $(RM) $(OBJ)

make 로 실행.

SRC에 입력한 파일 목록에 해당하는 *.o 를 먼저 컴파일하고
exe를 생성.

make clean 하면 .o파일 삭제

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

[unix] ftp 사용법  (0) 2010.04.21
[unix] find 명령어 사용하기  (0) 2010.02.08
[Shell Script] Shell Script 문법  (0) 2009.10.14
[Shell Script] PATH추가  (0) 2009.10.14
[Tomcat] 톰캣에 https 설정하기  (0) 2009.09.02

[ORACLE] 특수문자 입력

프로그래밍/DB 2009. 10. 21. 16:59 Posted by galad
출처: http://munduki.tomeii.com/darkhorse/entry/ORACLE-%ED%8A%B9%EC%88%98%EB%AC%B8%EC%9E%90-%EC%9E%85%EB%A0%A5

set escape on

UPDATE TBL_US_MEMBER_BPINFO SET BP_EMAIL_AUTH_URL = 'http://idp.nate.com/web/JC.mail?q=64adff31fc80c86f8991a90bf0cad011c5e364370f1b45a4b2bca822d7683c3135628ec969ef57352f3e9b0e429db66b1c7ff0d7adeef4d42f6bcedbc96b63d3085d0fcef961826ed2a963f304d4efbb3af99ad07da28057c835683cdf48ad219de23d21376576530539089db264d3602fdc44908d3e98e45c9c03ec7e67e1d82c0c91a0ed61366508ffd5fb4acba40dce8400621d77af8ca051a7d5a28144e33bf10b78dcf3a79384f7365a47d49fdc3f25466e6e5d360544d4e472c3da8ac9\&\&resp_url=http%3A%2F%2Fbp.tstore.co.kr%2Fbppoc%2Fmember%2FidpEmailAuth.omp'

set escape off

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

[oracle] 제약조건 확인하기  (0) 2010.02.25
[Toad] tab 간격 조정하기  (0) 2010.02.02
[Oracle] Toad 단축키  (0) 2009.08.22
[oracle10g] 페이징 시 rownum 사용하기  (0) 2009.04.06
[Oracle] [펌] sqlplus 사용법  (0) 2009.03.24

[Objective C] 튜토리얼

프로그래밍/iPhone Dev 2009. 10. 14. 15:11 Posted by galad
http://blog.lyxite.com/2008/01/compile-objective-c-programs-using-gcc.html
http://www.otierney.net/objective-c.html

http://umaking.tistory.com/45

compile

$ gcc Fraction.m main.m  -I /home/uclick/GNUstep/Local/Library/Headers -L /home/uclick/GNUstep/Local/Library/Libraries/
 -lobjc -lgnustep-base -enable-auto-import

[Shell Script] Shell Script 문법

프로그래밍/Server 2009. 10. 14. 13:01 Posted by galad
출처: http://www.2apes.com/~chack/htdocs/unix/script/


if문 사용관련
 if test $1  // 첫번째 인자가 있으면
then
        echo "Filename: $1"
else
        echo "Input Filename!!!"
        exit 1
fi
gcc -v -o $1 $1.m -lobjc


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

[unix] find 명령어 사용하기  (0) 2010.02.08
[Makefile] Makefile 소개(An Introduction to Makefiles)  (0) 2009.10.23
[Shell Script] PATH추가  (0) 2009.10.14
[Tomcat] 톰캣에 https 설정하기  (0) 2009.09.02
[unix] vi명령어  (0) 2009.04.16

[Shell Script] PATH추가

프로그래밍/Server 2009. 10. 14. 13:00 Posted by galad
출처: http://mwultong.blogspot.com/2006/07/cygwin-path-linux.html

PATH=${PATH}:추가할디렉토리경로

[html] html 특수기호

프로그래밍/Web 2009. 9. 8. 10:13 Posted by galad
출처: http://blog.eloitcube.co.kr/35

HTML 특수문자코드표

표현문자

숫자표현

문자표현

설명

-

&#00;-&#08;

-

사용하지 않음

space

&#09;

-

수평탭

space

&#10;

-

줄 삽입

-

&#11;-&#31;

-

사용하지 않음

space

&#32;

-

여백

!

&#33;

-

느낌표

"

&#34;

&quot;

따옴표

#

&#35;

-

숫자기호

$

&#36;

-

달러

%

&#37;

-

백분율 기호

&

&#38;

&amp;

Ampersand

'

&#39;

-

작은 따옴표

(

&#40;

-

왼쪽 괄호

)

&#41;

-

오른쪽 괄호

*

&#42;

-

아스트릭

+

&#43;

-

더하기 기호

,

&#44;

-

쉼표

-

&#45;

-

Hyphen

.

&#46;

-

마침표

/

&#47;

-

Solidus (slash)

0 - 9

&#48;-&#57;

-

0부터 9까지

:

&#58;

-

콜론

;

&#59;

-

세미콜론

<

&#60;

&lt;

보다 작은

=

&#61;

-

등호

>

&#62;

&gt;

보다 큰

?

&#63;

-

물음표

@

&#64;

-

Commercial at

A - Z

&#65;-&#90;

-

A부터 Z까지

[

&#91;

-

왼쪽 대괄호

\

&#92;

-

역슬래쉬

]

&#93;

-

오른쪽 대괄호

^

&#94;

-

탈자부호

_

&#95;

-

수평선

`

&#96;

-

Acute accent

a - z

&#97;-&#122;

-

a부터 z까지

{

&#123;

-

왼쪽 중괄호

|

&#124;

-

수직선

}

&#125;

-

오른쪽 중괄호

~

&#126;

-

꼬리표

-

&#127;-&#159;

-

사용하지 않음


&#160;

&nbsp;

Non-breaking space

¡

&#161;

&iexcl;

거꾸로된 느낌표

&#162;

&cent;

센트 기호

&#163;

&pound;

파운드

¤

&#164;

&curren;

현재 환율

&#165;

&yen;

|

&#166;

&brvbar;

끊어진 수직선

§

&#167;

&sect;

섹션 기호

¨

&#168;

&uml;

움라우트

&#169;

&copy;

저작권

ª

&#170;

&ordf;

Feminine ordinal

&#171;

&laquo;

왼쪽 꺾인 괄호

&#172;

&not;

부정


&#173;

&shy;

Soft hyphen

?

&#174;

&reg;

등록상표

&hibar;

&#175;

&macr;

Macron accent

°

&#176;

&deg;

Degree sign

±

&#177;

&plusmn;

Plus or minus

²

&#178;

&sup2;

Superscript two

³

&#179;

&sup3;

Superscript three

´

&#180;

&acute;

Acute accent

μ

&#181;

&micro;

Micro sign (Mu)

&#182;

&para;

문단기호

·

&#183;

&middot;

Middle dot

¸

&#184;

&cedil;

Cedilla

¹

&#185;

&sup1;

Superscript one

º

&#186;

&ordm;

Masculine ordinal

&#187;

&raquo;

오른쪽 꺾인 괄호

¼

&#188;

&frac14;

4분의 1

½

&#189;

&frac12;

2분의 1

¾

&#190;

&frac34;

4분의 3

¿

&#191;

&iquest;

거꾸로된 물음표

A

&#192;

&Agrave;

Capital A, grave accent

A

&#193;

&Aacute;

Capital A, acute accent

A

&#194;

&Acirc;

Capital A, circumflex accent

A

&#195;

&Atilde;

Capital A, tilde

A

&#196;

&Auml;

Capital A, dieresis or umlaut mark

A

&#197;

&Aring;

Capital A, ring (Angstrom)

Æ

&#198;

&AElig;

Capital AE diphthong (ligature)

C

&#199;

&Ccedil;

Capital C, cedilla

E

&#200;

&Egrave;

Capital E, grave accent

E

&#201;

&Eacute;

Capital E, acute accent

E

&#202;

&Ecirc;

Capital E, circumflex accent

E

&#203;

&Euml;

Capital E, dieresis or umlaut mark

I

&#204;

&Igrave;

Capital I, grave accent

I

&#205;

&Iacute;

Capital I, acute accent

I

&#206;

&Icirc;

Capital I, circumflex accent

I

&#207;

&Iuml;

Capital I, dieresis or umlaut mark

Ð

&#208;

&ETH;

Capital Eth, Icelandic

N

&#209;

&Ntilde;

Capital N, tilde

O

&#210;

&Ograve;

Capital O, grave accent

O

&#211;

&Oacute;

Capital O, acute accent

O

&#212;

&Ocirc;

Capital O, circumflex accent

O

&#213;

&Otilde;

Capital O, tilde

O

&#214;

&Ouml;

Capital O, dieresis or umlaut mark

×

&#215;

&times;

Multiply sign

Ø

&#216;

&Oslash;

width="130"Capital O, slash

U

&#217;

&Ugrave;

Capital U, grave accent

U

&#218;

&Uacute;

Capital U, acute accent

U

&#219;

&Ucirc;

Capital U, circumflex accent

U

&#220;

&Uuml;

Capital U, dieresis or umlaut mark

Y

&#221;

&Yacute;

Capital Y, acute accent

Þ

&#222;

&THORN;

Capital Thorn, Icelandic

ß

&#223;

&szlig;

Small sharp s, German (sz ligature)

a

&#224;

&agrave;

Small a, grave accent

a

&#225;

&aacute;

Small a, acute accent

a

&#226;

&acirc;

Small a, circumflex accent

a

&#227;

&atilde;

Small a, tilde

a

&#228;

&auml;

Small a, dieresis or umlaut mark

a

&#229;

&aring;

Small a, ring

æ

&#230;

&aelig;

Small ae diphthong (ligature)

c

&#231;

&ccedil;

Small c, cedilla

e

&#232;

&egrave;

Small e, grave accent

e

&#233;

&eacute;

Small e, acute accent

e

&#234;

&ecirc;

Small e, circumflex accent

e

&#235;

&euml;

Small e, dieresis or umlaut mark

i

&#236;

&igrave;

Small i, grave accent

i

&#237;

&iacute;

Small i, acute accent

i

&#238;

&icirc;

Small i, circumflex accent

i

&#239;

&iuml;

Small i, dieresis or umlaut mark

ð

&#240;

&eth;

Small eth, Icelandic

n

&#241;

&ntilde;

Small n, tilde

o

&#242;

&ograve;

Small o, grave accent

o

&#243;

&oacute;

Small o, acute accent

o

&#244;

&ocirc;

Small o, circumflex accent

o

&#245;

&otilde;

Small o, tilde

o

&#246;

&ouml;

Small o, dieresis or umlaut mark

÷

&#247;

&divide;

Division sign

ø

&#248;

&oslash;

Small o, slash

u

&#249;

&ugrave;

Small u, grave accent

u

&#250;

&uacute;

Small u, acute accent

u

&#251;

&ucirc;

Small u, circumflex accent

u

&#252;

&uuml;

Small u, dieresis or umlaut mark

y

&#253;

&yacute;

Small y, acute accent

þ

&#254;

&thorn;

Small thorn, Icelandic

y

&#255;

&yuml;

Small y, dieresis or umlaut mark


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

[jQuery] jQuery를 이용한 팝업. div, layer  (0) 2009.12.16
[json] json 사용법  (0) 2009.12.15
[servlet] servlet  (0) 2009.09.04
[jQuery] jQuery 예제 02  (0) 2009.09.04
[javascript] IE6.0 프레임 - 가로 스크롤바 버그  (0) 2009.08.21
출처: http://khie74.tistory.com/1169521335

일단 windows에서 유닉스 환경을 사용하기 위해 cygwin을 설치.

다음은 출처의 내용을 따른다.

설치할 때 다음의 패키지를 추가한다.

gcc-core:C compiler
gcc-g++:C++ compiler(C++도 함께 사용하는 경우에)
gcc-objc:ObjC compiler

테스트해보기

에디터로 다음의 hello.h와 hello.m을 작성한다.

// hello.h
#import <objc/Object.h>

@interface Hello : Object
-(void)print;
@end

// hello.m
#import <stdio.h>
#import "hello.h"

@implementation Hello
-(void)print
{
  printf("Hello world\n");
}
@end

int main()
{
  id obj = [Hello alloc];
  [obj print];
  return 0;
}

자~ 이제 컴파일을 해보자~

gcc -v -o hello hello.m -lobjc
(옵션 -v는 컴파일 과정 출력  -0는 출력파일명지정 -lobjc는 Objective-C라이브러리 사용)

컴파일이 성공한 후, 생성된 실행파일을 실행하면 아래와 같이 "Hello world"가 콘솔에 출력된다.


http://wisdom.sakura.ne.jp/programming/objc/index.html
http://cocoadev.tistory.com/10

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

[Objective C] 03 Class Level Access  (0) 2009.10.27
[Objective C] 02 Access Privledges  (0) 2009.10.27
[Objective C] 01 Creating Classes  (0) 2009.10.27
[Objective C] 환경설정  (0) 2009.10.27
[Objective C] 튜토리얼  (0) 2009.10.14

[Utils] Paros 사용법

프로그래밍/Library 2009. 9. 6. 15:20 Posted by galad

[java] 소스 분석

프로그래밍/Java 2009. 9. 6. 15:19 Posted by galad
public static void setAllowedTypes(FileUploadInfo info, SubContentInfo sinfo) throws ContentException {
        log.debug("<< setAllowedTypes >> START");
       
        Class cls = info.getClass();
        Class scls = sinfo.getClass();
        Method[] mtd = cls.getDeclaredMethods();
        Pattern p = Pattern.compile("get_fileUpload_(\\d+)FileName");
        Matcher m = null;
        String mStr = null;
        String mType = null;
        String defExt = null;
        int i;
       
        for(i = 0; i < mtd.length; i++) {
            m = p.matcher(mtd[i].getName());
            if(m.find()) {
                try {
                    // 파일명이 존재하는 경우만
                    mStr = FileUploadInfo.getValueOfMethod(info, m.group());
                    if(mStr != null) {
                        mType = FileUploadInfo.getValueOfMethod(info, "get_fileUpload_" + m.group(1) + "ContentType");
                        // 기본 확장자 지정
                        defExt = "";
                        if(mType != null) {
                            defExt = mStr.substring(mStr.lastIndexOf(".") + 1);
                            defExt = defExt.toLowerCase().trim();
                           
                            log.debug("defExt = " + defExt);
                           
                            if("jpg".equals(defExt) ||
                               "gif".equals(defExt) ||
                               "xml".equals(defExt) ||
                               "xmp".equals(defExt) ||
                               "png".equals(defExt) ||
                               "zip".equals(defExt) ) {
                                // 진행
                            }else {
                                // 오류 발생
                                throw new ContentException("지원하지 않는 파일입니다.");
                            }
                        }
                       
                        Class[] cParam = new Class[]{String.class};
                        Method cMtd = cls.getMethod("set_fileUpload_" + m.group(1) + "FileName", cParam);
                        Object[] oParam = new Object[]{mStr};
                        // FileUploadInfo에 등록
                        cMtd.invoke(info, oParam); // 마찬가지로 첫번째 인자는 실행시킬 메소드를 갖고 있는 obj, 두번째는 실제 메소드의 파라미터
                        // SubContentInfo에 등록
                        // 1. FileUPloadInfo의 FieldName을 찾는다.
                        cMtd = cls.getMethod("get_fileUpload_" + m.group(1) + "FieldName", null);
                        String tmpFieldName = (String)cMtd.invoke(info, null);
                        // 2. SubContentInfo의 의 1번의 Method에 등록한다.
                        cMtd = scls.getMethod("set" + tmpFieldName.substring(0, 1).toUpperCase() + tmpFieldName.substring(1)  , cParam);
                        cMtd.invoke(sinfo, oParam);

                    }
                }
                catch (ContentException e) {
                    log.debug("지원하지 않는 파일 예외 발생", e);
                    throw e;
                }
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
       
    }
   
public static String getValueOfMethod(Object obj, String methodName) throws SecurityException, NoSuchMethodException,                               IllegalArgumentException, IllegalAccessException, InvocationTargetException {
        String str = "";
        Class cls = obj.getClass(); // obj의 클래스 종류를 얻고
        Method mtd = cls.getMethod(methodName, null); // 위에서 얻은 클래스의 어떤 메소드를 얻는데, 메소드명을 인자로 받음
        str = (String)mtd.invoke(obj, null); // 위에서 얻은 메소드를 실행하는데, 그 메소드를 갖고 있는 obj를 인자로 받음?
        return str;
    }

[servlet] servlet

프로그래밍/Web 2009. 9. 4. 14:22 Posted by galad

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

[json] json 사용법  (0) 2009.12.15
[html] html 특수기호  (3) 2009.09.08
[jQuery] jQuery 예제 02  (0) 2009.09.04
[javascript] IE6.0 프레임 - 가로 스크롤바 버그  (0) 2009.08.21
[ajax] 소스  (0) 2009.08.19

[jQuery] jQuery 예제 02

프로그래밍/Web 2009. 9. 4. 14:22 Posted by galad
참조: http://tomcat.apache.org/tomcat-5.5-doc/ssl-howto.html

로컬에서 톰캣이 https 를 처리할 수 있게 설정하기

self-signed 인증키 생성
%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA
이 때, 비밀번호는
changeit
으로 하기. 이게 톰캣 디폴트. 변경 시에는 아래 설정에서 변경해줘야 함.
인증키 생성 시 나오는 질문에 적당히 대답하고(국가코드 82(한국)), 마지막 비번은 그냥 엔터. 위의 비번과 동일하게 설정됨.

톰캣의 server.xml에서

<-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
<!--
<Connector
port="8443" minProcessors="5" maxProcessors="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" debug="0" scheme="https" secure="true";
clientAuth="false" sslProtocol="TLS"/>
-->
주석 제거.

https://localhost:8443
로 테스트.

안될때는 인증키 생성 시 만들어지는 .keystore 파일 위치를 바꿔볼 것(톰캣에서 읽을 수 있는 곳으로).

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

[Shell Script] Shell Script 문법  (0) 2009.10.14
[Shell Script] PATH추가  (0) 2009.10.14
[unix] vi명령어  (0) 2009.04.16
[Tomcat] 톰캣, JSP 등등 버전 에러 시  (0) 2009.04.07
[Tomcat] Quoting in attributes  (0) 2009.04.07

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

[eclipse] 이클립스 + Mantis  (0) 2009.10.27
[Utils] Paros 사용법  (0) 2009.09.06
[Subclipse] ignore  (0) 2009.04.02
[firebug] 파이어버그 가이드  (0) 2009.03.20
[MD5] MD5 암호화  (0) 2009.03.13

[Oracle] Toad 단축키

프로그래밍/DB 2009. 8. 22. 20:11 Posted by galad
출처: http://it.kimgisa.net/30

TOAD를 사용하면서 편리하게 이용할 수 있는 단축키를 정리한 것입니다.

 

테이블 정보 상세보기

F4 : Table, View, Proc, Funct, Package DESC(테이블명 위에 커서를 두고 F4)

 

자동완성

Ctrl+. : Table Completion (매칭되는 테이블목록 출력)

Ctrl+T : Columns Dropdown (해당테이블의 컬럼목록 표시)

 

SQL문 실행

F5 : SQL Editor내의 모든 SQL문 실행

Ctrl+Enter : 현재 커서의 SQL문 실행

F9 : SQL문 실행 후 Grid에 출력

 

히스토리(과거 수행SQL문 조회)

F8 : 과거에 실행한SQL HISTORY 목록

Alt+Up : History UP

Alt+Down : History DOWN

 

텍스트 대/소문자 변환

CTRL+L : 텍스트를 소문자로

CTRL+U : 텍스트를 대문자로

 

주석처리

Ctrl+B : 주석처리

Ctrl+Shift+B : 주석해제

 

편집 창 전환(이동)

F6 : SQL Editor와 결과창간의 이동

F2 : SQL Editor창 전체화면 전환

Shift+F2 : Grid Output창 전체화면 전환

 

기타 단축키

F7 : 화면을 모두 CLEAR

Ctrl+Shift+F : 쿼리문을 보기좋게 정렬

Ctrl+F9 : SQL Validate (SQL문을 수행하지 않음)


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

[Toad] tab 간격 조정하기  (0) 2010.02.02
[ORACLE] 특수문자 입력  (0) 2009.10.21
[oracle10g] 페이징 시 rownum 사용하기  (0) 2009.04.06
[Oracle] [펌] sqlplus 사용법  (0) 2009.03.24
[펌] MSSQL 함수모음  (0) 2009.01.14
출처: http://hyeonseok.com/pmwiki/index.php/Markup/Frame/

인터넷 익스플로러에서 프레임 안에 표준 DTD 문서를 사용할 때 생기는 스크롤바 제거

<!--[if ie]>
<style type="text/css">
html {
overflow: scroll;
overflow-x: auto;
}
</style>
<![endif]-->

[ajax] 소스

프로그래밍/Web 2009. 8. 19. 01:01 Posted by galad
/**
 * BP설명 이미지, BP브랜드 이미지를 삭제한다.(ajax)
 */
function deleteBpFile(fileType) {
    var mbrNo = document.getElementById("mbrNo").value;

    // 이미지 삭제 링크 숨기기
    if(fileType == "BP_DESC") {
        document.getElementById("deleteBpDesc").style.display = "none";
        //document.getElementById("linkBpDesc").style.display = "none";
    }
    else {
        document.getElementById("deleteBpBrand").style.display = "none";
    }

    var parameter = "mbrNo=" + mbrNo + "&fileType=" + fileType;
    //alert(parameter);

    var req = newXMLHttpRequest();
    req.onreadystatechange=getReadyStateXmlHandler(req, fileDeleted);
    req.open("POST", "${pageContext.request.contextPath}/manage/deleteBpFile.omp", true); // 비동기처리여부
    req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    req.send(parameter);
}

/**
 * ajax 응답(xml)을 받아서 처리
 */
function fileDeleted(xml) {
    var bodyTag = xml.getElementsByTagName("body")[0];
    var typeTag = bodyTag.getElementsByTagName("type")[0];
    //alert(typeTag);
    var type = typeTag.firstChild.nodeValue;
    //alert(type);
    var resultTag = bodyTag.getElementsByTagName("result")[0];
    var result = resultTag.firstChild.nodeValue;

    if(result == "Y") {
        // 파일 링크 지우기
        if(type == "BP_DESC") {
            document.getElementById("linkBpDesc").style.display = "none";
        }
        else {
            document.getElementById("linkBpBrand").style.display = "none";
        }
    }
    else {
        // 파일 삭제 링크 다시 보여주기
        if(type == "BP_DESC") {
            document.getElementById("deleteBpDesc").style.display = "";
        }
        else {
            document.getElementById("deleteBpBrand").style.display = "";
        }
    }
}


// ajax call
<span id="linkBpDesc"><strong><s:a href="%{url}"><s:property value="%{umBpInfo.bpDescImgName}"/></s:a></strong></span>
<span id="deleteBpDesc"><a href="#" onclick="deleteBpFile('BP_DESC'); return false;">이미지 삭제</a></span>

Action & Service
// Action
// BP회원 관련 파일 - BP설명이미지, BP브랜드이미지 파일 삭제
    public String deleteBpFile() {
        log.debug("<< ManageAction.deleteBpFile... >>");
       
        HttpServletRequest request = this.getRequest();
       
        String mbrNo = request.getParameter("mbrNo");
        String fileType = request.getParameter("fileType");
       
        log.debug("mbrNo = " + mbrNo);
        log.debug("fileType = " + fileType);
       
        String xml = this.manageService.deleteBpFile(mbrNo, fileType);
        setInputStream(new ByteArrayInputStream(xml.getBytes()));
       
        return SUCCESS;
    }

// 설정파일
<!-- 파일 삭제 -->
        <action name="deleteBpFile" class="com.omp.bp.cms.manage.action.ManageAction" method="deleteBpFile">
            <result type="stream">
                <param name="inputName">inputStream</param>
                <param name="contentType">text/xml</param>
                <param name="bufferSize">4096</param>
            </result>
        </action>

// Service
// BP추가 파일 삭제 후, 결과를 XML형식으로 반환
    @SuppressWarnings("unchecked")
    public String deleteBpFile(String mbrNo, String fileType) throws ServiceException {
        log.debug("<ManageServiceImpl> deleteBpFile...");
       
        StringBuffer xml = null;
        UserMemberBpInfo umbi = null;
       
        try {
            // DB에서 파일 경로를 얻음
            umbi = this.manageDAO.getMemberBpinfo(mbrNo);
            if(umbi == null) {
                throw new ServiceException("BP추가 파일 삭제 중 BP회원 정보 읽기 실패", "getMemberBpinfo FAIL");
            }
           
            // 파일경로 변경 - 앞에 /data 붙이기
            umbi = DataUtil.makeFilePathFromDB(umbi);
           
            // fileType에 따라 파일 삭제
            if(StringUtils.equalsIgnoreCase(fileType, "BP_DESC")) {
                File f = new File(umbi.getBpDescImgPath());
                if(f.exists() && f.isFile()) {
                    if(!f.delete()) {
                        throw new ServiceException("BP추가 파일 삭제 중 설명 파일 삭제 실패", "delete FAIL");
                    }
                    else {
                        log.debug("BP 설명 물리 파일 삭제");
                       
                        // DB 갱신 - 파일 경로 삭제
                        Map map = new HashMap();
                        map.put("mbrNo", mbrNo);
                        map.put("fileType", fileType);
                        if(!this.manageDAO.deleteBpFile(map)) {
                            throw new ServiceException("BP추가 파일 삭제 중 DB 갱신 실패", "update db FAIL");
                        }
                       
                        log.debug("BP 설명 파일 경로 삭제");
                    }
                }
            }
            else if(StringUtils.equalsIgnoreCase(fileType, "BP_BRAND")) {
                File f = new File(umbi.getBpTbnailImgPath());
                if(f.exists() && f.isFile()) {
                    if(!f.delete()) {
                        throw new ServiceException("BP추가 파일 삭제 중 브랜드 파일 삭제 실패", "delete FAIL");
                    }
                    else {
                        log.debug("BP 브랜드 물리 파일 삭제");
                       
                        // DB 갱신 - 파일 경로 삭제
                        Map map = new HashMap();
                        map.put("mbrNo", mbrNo);
                        map.put("fileType", fileType);
                        if(!this.manageDAO.deleteBpFile(map)) {
                            throw new ServiceException("BP추가 파일 삭제 중 DB 갱신 실패", "update db FAIL");
                        }
                       
                        log.debug("BP 브랜드 파일 경로 삭제");
                       
                    }
                }
            }
           
            // 삭제 결과를 XML로 작성
            xml = makeXmlForDeleteBpFileResult(fileType, true);
        }
        catch(Exception e) {
            log.debug("BP추가 파일 삭제 실패", e);
            xml = makeXmlForDeleteBpFileResult(fileType, false);
        }
       
        return xml.toString();
    }
   
    private StringBuffer makeXmlForDeleteBpFileResult(String fileType, boolean isSucceeded) {
        StringBuffer xml = new StringBuffer();
       
        xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
        xml.append("<body>");
            xml.append("<type>");
            xml.append(fileType);
            xml.append("</type>");
            xml.append("<result>");
            xml.append(isSucceeded ? "Y" : "N");
            xml.append("</result>");
        xml.append("</body>");
       
        log.debug("DELETE BP FILE - XML");
        log.debug(xml.toString());
       
        return xml;
    }

의외로 간단하기도 하지만 스크립트쪽 처리가 복잡할 듯.
gmail, google docs 같은 건 정말 어떻게 만든 건지 신기할 뿐..