반응형

한국오라클, 무료 DB 개발 툴 Oracle SQL Developer 출시


오라클, 개발자 지원 전략의 일환으로 DB 개발자용 개발 툴 출시
Oracle SQL Developer 통해 비용 절감 및 생산성 증대 실현

한국오라클은 Oracle SQL Developer(오라클 SQL 디벨로퍼, 기존 코드명 'Project Raptor')라는 새로운 무료 데이터베이스 개발 툴을 25일 출시한다고 밝혔다. Oracle SQL Developer를 사용하면 개발 사이클이 단순해지고 SQL 및 PL/SQL 코드 개발과 디버깅을 위해 다른 툴을 구입해야 할 필요가 없어져 비용 절감과 생산성이 증대된다.
Oracle SQL Developer는 객체 브라우징 및 생성, SQL 스테이트먼트 및 SQL 스크립트 실행, PL/SQL 코드 편집 및 디버깅, 데이터 보기 및 업데이트 등의 작업 실행 시 데이터베이스 개발자에게 효과적인 강력한 기능을 제공한다. 또한 다양한 사전제작 보고서 양식을 제공하여 개발자가 자신의 개발 프로젝트에 맞는 보고서를 작성할 수 있다. 아울러, 이 툴에는 데이터베이스 개발자가 코드작성에 쏟는 시간과 노력을 줄여주는 코드 포맷터 및 스니펫 등의 기능도 포함되어 있다.
오라클 데이터베이스 서버 테크놀로지 부문의 앤드류 맨델슨(Andrew Mendelsohn) 수석 부사장은 "10g 릴리스에서는 오라클 데이터베이스의 설치와 활용 및 관리가 더 쉬울 뿐만 아니라 관리자가 사용하기에 간편하도록 하는데 초점을 두었다."라며, "Oracle SQL Developer는 데이터베이스 개발자가 생산적으로 코드 및 디버깅 작업을 보다 효과적으로 수행할 수 있도록 하는 데 필요한 모든 것을 지원한다. 오라클 데이터베이스 고객들은 비용절감과 개발자 생산성 증대 측면에서 이익을 얻게 될 것"이라고 덧붙였다.

Oracle SQL Developer는 오라클 데이터베이스 10g 에디션 전 제품군과 Oracle9i 데이터베이스 릴리스 2에서 사용이 가능하다. 또한 리눅스, 맥킨토시, 윈도우 플랫폼 등에 사용할 수 있는 무료 개발툴로, 오라클 데이터베이스 라이센스를 소지한 모든 고객에게 지원된다. 오라클은 또 등록된 사용자에 한하여 Oracle SQL Developer 관련 주제를 다루는 무료 온라인 포럼도 제공하고 있다. 이 포럼은 오라클 데이터베이스 툴 전문가들이 진행과 모니터링을 담당한다. Oracle SQL Developer는 오라클의 개발자 커뮤니티인 오라클 테크놀로지 네트워크 (http://www.oracle.com/technology/global/kr/software/products/sql/index.html)에서 지금 다운 받아 사용할 수 있다.

oracle을 처음 사용하면서 여러가지 토드,오렌지등의 툴을 사용해 보았다.
물론 아직 제대로 사용해 보지 못하였기 때문에 각 툴들의 장단점이 있겠지만


Oracle SQL Developer는 무료로 배포되고 사용하기도 편한것 같습니다. 위에 파일은
사용법에 대한 자료입니다.
반응형
최적화 툴입니다.
반응형
출처 탁월함을 찾아서 | 핑크펜더
원문 http://blog.naver.com/cccnam5158/80045146598

oracle 10g 를 삭제하는 방법에 대해 알아보겠습니다

일반적으로 오라클을 삭제하고 나서도 레지스트리에 정보가 남아있다거나

깨끗하게 삭제하는 것은 어렵다고 생각하여

OS 를 재설치하는 등의 여러가지 수고가 들게 됩니다


최대한 깨끗하게 삭제하는 절차를 정리해보겠습니다


1. 먼저 OUI(Oracle Universal Installer) 를 이용하여 설치된 오라클 관련 제품을 삭제합니다

2. services.msc 를 실행하신후 오라클 관련 서비스 모두를 멈춥니다

3. 다음의 경로에 포함되어 있는 레지스트리 정보를 삭제합니다

    - 사용자에 따라 경로가 다를수 있습니다

    HKEY_CURRENT_USER\SOFTWARE\ORACLE
    HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application

    \Oracle.oracle
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\OracleDBConsole
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Oracle10g_home
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\OraclService

4. 파일 시스템에서 오라클 관련 폴더를 삭제합니다 - 사용자의 환경에 따라 다릅니다

    Oracle Home Folder

    Oracle 이 설치된 Program Files 하단의 Oracle 관련 폴더 삭제

    Oracle Start Group 삭제 -

     예) C:\Documents and Settings\All Users\Start Menu\Programs\Oracle*

    - 위의 폴더를 지웠다고 해서 서비스 목록에서 오라클 관련 서비스 목록이 삭제되지는 않습니다

      재부팅이 필요합니다
5. 시스템 환경 변수에서 오라클 관련 설정 내용들을 모두 삭제합니다

    - System Path 와 user defined Path 모두 해당됩니다

6. 그리고 다음의 정보를 삭제합니다

        C:\Windows\assembly\ 의 Oracle.DataAccess 와 xxx Polic.Oracle 을 삭제합니다


이상으로 삭제가 완료되었습니다

새로운 오라클을 시작하기전에 반드시 위의 과정을 거치시는 것을 추천합니다

반응형
반응형
Generic (제너릭)
 
 
What ?
 
제너릭은 컬렉션(자료구조),
 
즉 쉽게 말해서 객체들을 저장(수집)하는
 
구조적인 성격을 보강하기 위해 제공되는 것.
 
 

0. GENERIC

다들 아시겠지만, Generic의 사전적인 의미는 다음과 같습니다.


 1.     (생물) 속의 , (성질) 속에 특이한

 2.     일반적인, 포괄적인

 3.     (수,인칭,시제) 총칭적인



1. generic 필요성

Java 에서는 객체들을 담아 편하게 관리하기 위해  Collection 을 제공한다. 이 Collection 의 대부분이

어떤 객체를 담을지 모르기 때문에 모든 자바 객체들의 base 객체 (최상위 객체)인 Object로

저장되어 설계하도록 설계되어 있습니다.

문제는 이 Collection 에 Element로 어떤 Type을 받아 들임이 좋을수도 있지만

서로 다른 Type이 하나의 Collection 에 섞여 들어 가는것이 문제 JDK 5.0 에 와서 제너릭이 포함되면서

이제는 실행하기 전에 컴파일 단계에서 특정 Collection 에 객체 타입을 명시하여

지정된 객체가 아니면 절대 저장이 불가능하게 할수 있습니다.

2. 제너릭의 타입

제너릭 타입은 < > 사이에 컴파일할 당시 사용될 객체자료형만 선언 해주면 객체를 저장할 때

선언된 제너릭 타입으로만 저장된다.

API 에서는 전달되는 객체가 현 객체 내에서 하나의 자료형(Type)으로 쓰일 때 <T> 로 유도하고 있으며

전달되는 객체가 현 객체 내에서 하나의 요소(Element)로 자리를 잡을때는 <E> 로 , 그리고 전달되는 객체가

현 객체 내에서 Key 값으로 사용될 때는 <K>로,

만약 전달되는 객체가 현 객체 내에서 Value 값으로 사용될 때는 <V> 로 표현된다.

3. 사용자 정의 제네릭 클래스  


앞에서 언급한 자료형을 제너릭으로 set 하고 print 해주는 간단한 사용자 정의 클래스를 만들어 보겠습니다.

/*
* FILE NAME  : Generic.java
* DATE   : 2007. 8. 5
* Written By  : yangck20@naver.com
*
*/
package ckbin.array;
public class Generic<T> {
 T[] v;
 
// Generic 타입으로 Set
 public void set(T[] n) {
  v = n;
 }
 
// T[] 원소 출력
 public void print() {
  for(T s : v)
   System.out.println(s);
 }

}




 

 
사용자_Class명 <적용할_제너릭 타입> 변수명;   // 선언
 
 
변수명 = new 사용자_Class명<적용할_제너릭 타입>( ) ; // 생성
 



4. 제너릭 타입 사용하기


사용자 정의형으로 만든 제너릭 클래스의 사용

 




위에서 생성한 사용자_Class를 사용하여 생성할때는 다음과 같이 생성자를 만들수 있습니다.

Generic<String> Gen = new Generic<String> ();

 위에서 생성한 사용자_Class 를 사용하는 Main Class 를 만들어 보겠습니다.

 /*
* FILE NAME  : GenericMain.java
* DATE   : 2007. 8. 5
* Written By  : yangck20@naver.com
*
*/
package ckbin.array;
import ckbin.array.Generic;
public class GenericMain {
 
 public static void main(String ar[]) {
 
  Generic<String> Gen = new Generic<String> ();
 
  String[] StrArr = {"디워","정말","보고파"};
 
  Gen.set(StrArr);
  Gen.print();

 
  Generic<Integer> Gen2 = new Generic<Integer> ();
 
  Integer[] IntArr = {2,0,0};
 
  Gen2.set(IntArr);
  Gen2.print();

 
 }
}
 
== 출력 결과 =============================================================================
디워
정말
보고파
2
0
0
 

 



















위 GenericMain 소스를 보면 Generic 클래스는 String 배열과

Integer 배열을 받아 출력해주는 아주 간단한 소스지만 타입을

달리주어 객체에 담은 배열들을 출력해주는것이 이상적입니다.

HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("1", new Integer(1));
map.put("2", 2);            // auto boxing
 
Integer i = map.get("1");   // 따로 캐스팅이 필요 없다.
int j = map.get("2");       // auto unboxing


이렇게 별도의 캐스팅 없이 처리할 수 있다는 점에서 좋아졌네요..

반응형

J2SE 5.0에는 새로운 언어 기능이 다수 도입되었는데, 여기에는 제네릭(Generics)과 향상된 루프문(Enhanced for Loop)이 포함된다. 제네릭(GENERIC)향상된 루프문에 대해서는 이미 이전 테크 팁에서 살펴본 바 있다. J2SE 5.0에 추가된 또 다른 중요한 기능으로 주석을 들 수 있으며, 본 팁에서는 J2SE 5.0에 내장된 주석을 살펴보기로 한다.

먼저, 주석이란 무엇인가? JSR 175: A Metadata Facility for the Java Programming Language의 일부로 정의된 주석은 메타데이터를 프로그램 엘리먼트(클래스, 인터페이스, 메소드 등)에 연결하는 방법을 제시해준다. 주석은 해당 엘리먼트에 대해 생성된 바이트코드를 변경하지 않는 추가 수식자(modifier)라고 할 수 있다.

메타데이터를 소스 코드에 도입한다는 개념은 J2SE 5.0에서 처음 등장한 것은 아니다. 사용자가 @deprecated 태그를 메소드의 javadoc 코멘트에 추가하면 컴파일러는 이를 메소드에 관한 메타데이터로 취급하는데, 이런 기능은 J2SE의 1.0 버전부터 포함되었다. 초기 버전의 플랫폼의 경우 이미 Systemgetenv() 메소드(1.1 addendum까지는 Java Language Specification에 포함되어 있지 않았음)와 더불어 구(deprecated) 메소드가 포함되어 있었지만, 현재로서는--적어도 구문의 @ 부분에 관한 한--개념은 거의 동일하다고 볼 수 있다. 단, 위치에는 변동 사항이 생겼다는 점을 알아두기 바란다--주석 태그가 코멘트가 아니라 소스에 포함된다. 여기서 주안점은 주석이 선언적 프로그래밍 모델을 체계적으로 지원하기 위한 방법이라는 사실이다.

이제 J2SE 5.0에 포함된 최초의 주석, @Deprecated부터 살펴보도록 하자. 우선 여기서는 대문자 D에 유의할 필요가 있다. 기능적으로 볼 때, 소스 내의 @Deprecated는 클래스 또는 메소드와 연결된 javadoc 내의 @deprecated와 동일하게 작동한다. 메소드에 @Deprecated 태그를 플래그하면 해당 메소드나 클래스 사용 시 사용자에게 경고 메시지를 보내도록 컴파일러를 환기시키는 효과가 있다.

아래의 Main 클래스는 @Deprecated 주석과 @deprecated 코멘트가 플래그된 deprecatedMethod()라는 이름의 메소드를 가진다.

  public class Main {

/**
* @deprecated Out of date. Use System.foobar() instead.
*/

@Deprecated
public static void deprecatedMethod() {
System.out.println("Don't call me");
}
}

주석이 붙은 클래스도 주석이 붙지 않은 경우와 동일한 방식으로 컴파일한다.

> javac Main.java

예상대로 Main.class가 생성된다.

deprecated 메소드를 사용하면 javadoc 내의 @deprecated 태그를 사용할 때와 마찬가지로 컴파일 시간 경고가 생성된다. 관련 예는 다음과 같다.

  public class User {
public static void main(String args[]) {
Main.deprecatedMethod();
}
}

아래의 클래스를 컴파일하면,

> javac User.java

deprecated 메소드를 사용하는 데 대한 경고 메시지가 다음과 같이 표시된다.

  Note: User.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

컴파일 라인에 -Xlint를 추가하면 무엇이 잘못되었는지 구체적으로 표시할 수 있다.

> javac -Xlint:deprecation User.java

User.java:3: warning: [deprecation] deprecatedMethod() in
Main has been deprecated
Main.deprecatedMethod();
^

1 warning

@deprecated 코멘트에서 @Deprecated 주석으로 변경되더라도 시스템에는 아무런 변화가 생기지 않으며, 단지 작업 수행 방식에 약간의 변화가 발생하는 것 뿐이다. 하지만 J2SE 5.0 플랫폼에 새로 추가된 다른 두 개의 주석, @Override@SuppressWarnings의 경우에는 플랫폼에 새로운 기능을 부여할 수 있다.

@Override 주석은 메소드 선언과 함께 사용할 수 있는데, 이름에서 알 수 있듯이 @Override 주석을 사용하여 수퍼클래스의 메소드를 오버라이드하도록 되어 있는 메소드를 플래그한다. 이 주석은 왜 사용하는 것일까? 오류를 더 신속하게 잡아내기 위해서이다. 아마도 여러분은 메소드를 오버라이드하려다가 메소드 이름의 철자를 틀리거나, 잘못된 인자를 지정하거나, 다른 리턴 타입을 설정했던 적이 무수히 많았을 것이다. 즉, 원래의 의도는 기존의 메소드를 오버라이드하는 것이었는데 그만 새로운 메소드를 정의해 버리는 결과가 종종 발생하게 되는 것이다. @Override를 이용하면 그나마 클래스에서 문제점을 빨리 발견할 수가 있다.

  public class Overrode {
@Override
public int hashcode() {
return 0;
}

@Override
public boolean equals(Object o) {
return true;
}
}

여기서 문제는 메소드 이름이 hashcode가 아니라 hashCode여야 한다는 점이다. 메소드 선언이 훨씬 더 큰 클래스 정의를 위해 소스에 묻혀 버린다고 가정해보자. 최초의 @Override 주석이 없다면, hashCode() 메소드(모두 소문자가 아니라, 대문자로 시작되는 두개의 영단어를 붙여 써서)가 호출되는 대신 상위 Object 클래스의 기본값 동작을 얻고 있다는 사실을 알아차리는 데 얼마나 많은 시간이 걸리겠는가? 하지만 이제는 @Override 주석 덕분에, 클래스 컴파일 시 컴파일 시간 오류가 생성되어 문제점을 경고할 수 있다.

> javac Overrode.java

Overrode.java:2: method does not override a method from its
superclass
@Override
^
1 error

이런 특성의 오류를 좀더 빨리 발견할 수만 있다면 수정에 드는 수고와 비용을 획기적으로 절감할 수 있을 것이다. hashCode() 메소드의 경우 절대로 상수를 리턴해서는 안된다는 점에 유의할 것. hashCode()equals()의 올바른 사용법에 관한 자세한 설명을 보려면 Joshua Bloch가 저술한 Effective Java Programming Language Guide(영문)의 8항을 참조할 것.

J2SE 5.0에 새로 추가된 주석의 마지막 @SuppressWarnings는 그 중에서도 가장 흥미롭다고 할 수 있다. 이 주석은 일반적으로 경고하는 내용을 경고하지 말도록 컴파일러에게 지시하는데, 경고는 일종의 범주에 속하므로 주석에 대해 어떤 종류의 경고를 금지할 것인지 지시해야 한다. javac 컴파일러는 all, deprecation, unchecked, fallthrough, path, serial, finally 등 7개의 금지 옵션을 정의한다. (언어 스펙은 이 중에서 두 가지-- deprecation과 unchecked--만을 정의함.)

예시를 위해 fallthrough 옵션 금지사항에 대해 살펴보기로 한다. 먼저 아래의 클래스를 사용해보자. 클래스에는 switch 문의 각 케이스에 대한 break 문이 빠져 있다는 점에 유의할 것.

  public class Fall {
public static void main(String args[]) {
int i = args.length;
switch (i) {
case 0: System.out.println("0");
case 1: System.out.println("1");
case 2: System.out.println("2");
case 3: System.out.println("3");
default: System.out.println("Default");
}
}
}

javac으로 클래스를 컴파일하면 단순히 .class 파일만 생성되고 경고는 표시되지 않는다는 것을 알 수 있다.

javac Fall.java

컴파일러가 fall through하는(즉, 하나 이상의 break 문이 빠져 있는) switch 문에 관해 경고하기를 원할 경우에는 -Xlint:fallthrough 옵션으로 컴파일한다.

javac -Xlint:fallthrough Fall.java

그러면 아래의 경고문이 생성된다.

Fall.java:6: warning: [fallthrough] possible fall-through into case
case 1: System.out.println("1");
^
Fall.java:7: warning: [fallthrough] possible fall-through into case
case 2: System.out.println("2");
^
Fall.java:8: warning: [fallthrough] possible fall-through into case
case 3: System.out.println("3");
^
Fall.java:9: warning: [fallthrough] possible fall-through into case
default : System.out.println("Default");
^
4 warnings

그러나 switch 문에 각 케이스에 대한 break 문이 빠져 있다는 사실을 무시하고 싶은 경우에는 어떻게 해야 할까? 바로 이 때 @SuppressWarnings 주석이 필요하다. main() 메소드 선언 앞에 다음 행을 추가하면,

@SuppressWarnings("fallthrough")

-Xlint:fallthrough 옵션으로 클래스를 컴파일할 경우,

   javac -Xlint:fallthrough Fall.java

.class 파일만 생성되고 경고문은 표시되지 않는다.

@SuppressWarnings 주석은 또한 컬렉션 엘리먼트의 데이터 유형을 지정하지 않고 컬렉션을 사용할 경우에 표시되는 것과 같은 그 밖의 경고를 금지하는 데도 사용될 수 있다. 그러나 단순히 컴파일 시간 경고를 피하기 위해서 @SuppressWarnings 주석을 사용해서는 안 된다. 제네릭을 염두에 두지 않고 구축된 라이브러리를 사용할 때처럼, 금지되지 않은 경고가 불가피한 경우에 이 주석을 사용하도록 한다.

이것으로 내장 주석 기능에 관한 설명은 마무리하고, 마지막으로 (인자를 포함한) 주석은 통상적으로 하나의 행에서 독자적으로 지정된다는 점에 유의하기 바란다.

J2SE 5.0에 이미 정의되어 있는 주석을 사용하는 것 보다 사용자가 직접 주석을 정의하는 경우에는 더 많은 기능들을 활용할 수 있다. 주석 정의에 관한 자세한 내용은 Annotations(영문)를 참조하기 바란다.

<출처 - http://kr.sun.com/developers/techtips/2006/c0713.html >

반응형
J2SE 6.0 1.5(한) 1.5(영)
J2EE 5.0 1.4
SERVLET 2.5 2.4
JSP 2.0
WEB DTD 2.3 2.4
HTML 4.1
CSS2

출처 : http://www.jakartaproject.com
반응형
* 강좌를 시작하기전에.....

JDBC를 이용하여 DB를 엑세스해서 프로그래밍을 하는 방법의 기초에 대해서 강의합니다.
따라서 이번 강좌는 JDBC를 처음 사용하고 하는 분들에게 적합한 강좌입니다.


* JDBC 프로그래밍의 5 단계

  1. DriverManager에 해당 DBMS Driver를 등록
  2. 해당 Driver로 부터 Connection 객체 획득
  3. Connection 객체로부터 Statement 객체 획득
  4. Statement의 method를 이용하여 SQL실행
  5. ResultSet 으로 받아서 처리(executeUpdate 의 경우엔 제외)
  6. 객체 close() (ResultSet, Statement, Connection)
그럼 각 단계에 대해서 자세히 알아 보도록 하겠습니다.


* 1. DriverManager에 해당 DBMS Driver를 등록

Driver를 DriverManager에 등록하는 방법은 3가지가 있습니다.
Class.forName() 메소드를 이용하는 방법, Driver객체를 생성하는 방법, registerDriver() 메소드를 이용하는 방법 이렇게 3가지의 방법이 있지만 가장 일반적으로 사용하고 쉬운 방법인 Class.forName() 메소드를 이용하는 방법에 대해서만 설명하도록 하겠습니다.

해당 JDBC 드라이버를 등록하려면 당연히 JDBC 드라이버가 필요합니다. 해당 데이터베이스의 드라이버 파일을 먼저 클래스 패스에 잡으시기 바랍니다. 오라클의 경우는 www.oracle.com 에서 다운로드 받을수도 있고 오라클 설치시 같이 설치 되므로 오라클 디렉토리를 잘 살펴 보기 바랍니다.

다음으로 mySQL의 경우는 http://sourceforge.net/project/showfiles.php?group_id=15923으로 가셔서 다운받으시기 바랍니다.

이제 JDBC 드라이버를 DriverManager에 등록하는 방법에 대해서 알아 보겠습니다.

Class.forName("org.gjt.mm.mysql.Driver"); -> mySQL 의 경우
Class.forName("oracle.jdbc.driver.OracleDriver"); -> Oracle thin 드라이버의 경우

Class 는 java.lang 패키지에 있는 클래스 입니다. 자세한 내용이 궁금하신 분은 api문서를 참고 하시구요... forName 메소드에 parameter로 쓰인 String은 당연히 DBMS의 종류에 따라 틀려지겠지요? 어째든 위의 메소를 실행시키고나면 자동으로 드라이버 객체가 생성이되고, 자신을 DriverManager에 등록하는 처리가 이루어지게 됩니다.


* 2. 해당 Driver로 부터 Connection 객체 획득

Connection이라는 것은 DBMS에 연결된 session을 의미 합니다. Connection 객체를 획득하는 방법은 DriverManager의 getConnection() 메소드를 이용하면 되는데 그 형식은 다음과 같습니다.

Connection con=DriverManager.getConnection(String jdbcURL,String id,String password);
			
getConnection 메소드는 몇가지로 오버로딩되어 있으니 궁금하신분은 API문서를 참고 하십시요..

다음과 같은 형식으로 사용합니다.


String url="jdbc:mysql://localhost/dbname";  // dbname에는 사용하는 database 이름 

Connection con=DriverManager(url,"root","1234");  // root 계정, 패스워드는 1234 


* 3. Connection 객체로 부터 Statement 객체 획득

하나의 Connection으로 부터 여러개의 Statement의 생성이 가능합니다. 이후에 Statement로 부터 SQL을 실행하게 됩니다. 아래의 그림을 보시면 이해가 되리라 생각됩니다.



Connection con=DriverManager.getConnection("jdbc:mysql://localhost/dbname","root","password");
  
Statement st1=con.createStatement();

ResultSet rs1=st1.executeQuery("select * form names");

Statement st2=con.createStatement();

ResultSet rs2=st2.executeQuery("select * form users");

Statement st3=con.createStatement(); 

ResultSet rs3=st3.executeQuery("select * form emails");
따라서 위와 같이 사용이 가능하죠. Statement에는 3가지 종류가 있는데 그중 첫번째가 지금 사용한 Statement 입니다. 두번째로 PreparedStatement 가 있고 마지막으로 CallableStatement가 있다. 그중 CallableStatement는 저장 프로시져 (stored procedure)를 호출하는데 사용되는 것인데, 여기에서는 초급강좌인 만큼 다루지 않습니다.
PreparedStatement는 다음과 같이 사용합니다.

Connection con=DriverManager.getConnection("jdbc:mysql://localhost/dbname","root","password");
  
PreparedStatement ps=con.prepareStatement("update juso set si=? where zip=?); // 밑줄친 부분 주의

ps.setString(1,"Seoul");  // 첫번재 ? 이 1번이 됩니다.

ps.setString(2,request.getParameter("zip")); // 두번째 " ? "

// setString 말고도, setDate, setArray, setCharacterStream등 여러가지가 있습니다.

ps.executeUpdate();
위와같은 쿼리문(값이 변하는)을 Statement로 처리한다면 PreparedStatement 문에 비해서 String 객체를 더 많이 생성해야 해야 하고, PreparedStatement사용시에는 DB에서의 처리시에도(특히 오라클에서) 쿼리문이 캐싱되어 보다 높은 퍼포먼스를 제공하게 됩니다.


* 4. Statement의 메소드를 이용해서 SQL문의 실행

Statement 클래스에서는 쿼리문의 실행을 위해서 몇가지 메소드를 제공하는데, executeQuery()와 executeUpdate() 두개의 메소드만 알면 충분히 활용이 가능합니다.

ResultSet rs=stmt.executeQuery("select * from users");
			
위와 같은 방식으로 사용되며 executeQuery()는 "select"문을 사용할때에만 사용되는 것이죠. 실행 결과는 ResultSet에 저장되며 저장된 정보의 처리 방법은 아래 에서 다루도록 하겠습니다.
또다른 메소드인 executeUpdate()는 select 외에 update,delete,insert 등의 쿼리문을 사용할때 이용되어 집니다. 다음과 같이 사용하시면 됩니다.
stmt.executeUpdate("insert into users(id,password) values('ab','bc')");
			


* 5. ResultSet으로 받아 서 처리하기

위에서 설명했다 시피 executeQuery()를 실행하면 ResultSet 타입의 객체를 반환합니다. 이 객체는 실행된 쿼리문의 결과 같을 가지고 있는데 ResultSet의 몇가지 메소드를 이용하면 ResultSet에 저장된 정보를 사용할수 있습니다. select쿼리를 실행 했으므로 하나이상의 row를 지니고 있는데.. 현재 row에서 다음 row로 넘기려면 rs.next() 와 같이 사용하면 됩니다.(첫번째 row도 next()를 사용해야 합니다.)

각 row가 선택이 되었으면 각컬럼의 데이터를 불러 오면 되는데, 두가지의 방법이 있습니다.
첫번째방법은

String name=rs.getString(1); (name에 해당하는 항목의 첫번재 컬럼에 있을경우)

이와같이 데이터의 컬럼 위치로 검색합니다. getString의 String 에는 Int,Double, 등과 같은 자료형을 사용하면 해당 자료형에 맞는 데이터를 리턴하여 줍니다. (getString(), getInt(), getDouble() 등등....)
또다른 방법은 컬럼의 이름을 직접 서술하는 방법인데, 다음과 같이 사용됩니다.

String name=rs.getString("name");

이러게 하면 rs ResultSet에 저장되 었던 name컬럼의 데이터가 name에 저장됩니다.


* 6. 객체 close() 하기 (ResultSet, Statement, Connection)

Java는 메모리 관리를 따로 하지 않아도 자체적으로 garbage collection 기능이 있어 사용되지 않는 객체는 자동적으로 처리된다. 그러나, Sun은 JDBC 드라이버와 같이 외부 지원되는 드라이버에 대해서는 생성된 객체를 코드 내에서 소멸시키도록 권장하고 있다. JDBC API는 이를 위해 close() 메쏘드를 제공하는데, close() 메쏘드를 사용해야 할 클래스는 Connection, Statement, PreparedStatement, ResultSet 등이다. 따라서, 데이터베이스에 접속하여 SQL 구문을 모두 수행했다면 다음처럼 close() 메쏘드를 사용하여 객체를 모두 소멸시키도록 한다. - webdox

rs.close();
st.close();
con.close();

위와 같이 사용하며, con (Connection) 과 st (Statement or PreparedStatement)는 반드시 close 되어야 합니다. 위에서 설명한 바와 같이 Statement 와 ResultSet 은 1:1 대응 이기 때문에 ResultSet 은 Statement 가 소멸되면 자동으로 소멸됩니다. (아예 처리를 하지 말라는 얘기는 아닙니다. -안전을 위해서)


* 그리고....

대부분의 Servlet/JSP 웹 애플리케이션 에서는 Connection 을 Pool 로서 관리를 하는데, 이는 매 요청시 마다 데이터베이스에 접속하고 해제하는 일을 수행하는데 있어 발생하는 부하를 줄여 주고, 일정 갯수 이상의 커넥션수를 넘지 않도록 유지시켜 주기 위해서 입니다.
이러한 Connection Pool 은 몇가지 공개된것도 있고 직접 제작할수도 있으나, 여기 에서는 생략하도록 하겠습니다.

<출처- http://www.aboutjsp.com/lec/jdbc.jsp >

반응형
Easy Eclipse WebDav라는 플러그인이 있는데,
FTP에 자신의 프로젝트를 디플로이 할 수 있게끔 해주는 이클립스 플러그인이다.
http://www.easyeclipse.org/site/plugins/eclipse-webdav-ftp.html
여기 들어가면 간단한 소개글과 다운로드 링크를 볼 수 있다. 실제 다운로드는 여기에서.

플러그인을 다운로드 하고 설치 파일을 실행시켜 다음으로 넘어가면 EasyEclipse가 먼저 설치되어야 세이프하다는 경고가 나오는데, 일단 귀찮으니 무시하기로 하고.. 깔아본다. 폴더 설정은 이클립스가 설치되어 있는(eclipse.exe 파일이 위치하고 있는) 곳으로 지정한다.


EasyEclipse 설치하려면 다운 받아야 하는데, 최소한 170MB란 말야.. -_-;; 시간 없어!! ㅋㅋ; 암튼 일단 설치를 마무리하고 이클립스를 실행하고 Show Views 메뉴를 실행하면 아래와 같이 Webdav 뷰가 추가된 것을 볼 수 있다.


뷰를 띄우면 하단에 뷰가 나타나는데, 아무튼 그쪽에 가서 오른쪽 버튼을 누르면 아래 그림과 같이 대상 사이트를 추가할 수 있는 메뉴가 생긴다. 일단 누르고 보자.

그러면 대상 사이트를 지정하는게 나오는데, 나 같은 경우는 FTP에 디플로이 할 것이므로 FTP를 선택하고 아래 그림과 비슷하게 설정해 준다. 아이피 주소와 포트, 그리고 이미 FTP 계정이 있으므로 자신의 계정을 입력한다.

이제 아래와 같이 자신의 FTP 계정의 내용이 나타난다.

일단 이렇게 추가해 놓으면 이제 거의 끝.
프로젝트로 돌아가서 File -> Export 메뉴를 실행하면, 가장 하단 Other에 아래 그림과 같이 FTP가 추가된 것을 볼 수 있다.

그리고 나서 다음으로 넘어가면 어떤 프로젝트나 폴더를 Export 할지 선택하는 창이 나오고.. 원하는 내용을 선택하면 된다. Select Site 창에서는 아까 추가해 놓은 FTP 사이트를 이용할 수도 있고, 여기서 바로 사이트를 또 추가할 수도 있다. Select Remote Folder에서는 말 그대로 FTP 계정의 어느 폴더에 디플로이할지를 선택하는 창이다.
Select Resource 창에서는 어떤 파일들을 올릴 것인가를 선택하는 것인데, 그곳에서 바로 파일의 내용을 확인할 수도 있다. 아래 그림과 같이.

그 다음 Finish 버튼을 누르게 되면 FTP 서버의 자신의 계정으로 파일들의 디플로이가 진행된다.
마지막으로 Site Explorer를 보면 파일들이 디플로이 된 것을 확인할 수 있다.

Synchronize 기능도 이용할 수 있는데, 먼저 그 기능을 이용하려면 Synchronize 뷰를 연다. 아래 그림과 같이 Synchronize 뷰가 나타나면 그림과 같이 메뉴를 눌러 Synchronize 메뉴를 선택한다.

그러면 아래 그림과 같이 Synchronize 대상에 FTP가 새로이 추가된 것을 볼 수 있다.

다음을 눌러 아까 추가해 둔 FTP 계정을 선택하고 Finish를 하면 FTP 계정에 대한 Synchronize가 수행된다. 이렇게만 해놓으면 FTP 계정에 대한 디플로이와 Synchronize가 상당히 편해질 것이다... :)
반응형

19.3 기본 Built-in Function


19.3.1 개요

함 수 명            유 형                    리턴값                                                                                    적용버전

---------------------------------------------------------------------------------------------------------
abs                  수학                    표현식의 절대값                           

ascii                문자열                 표현식의 첫 문자에 대한 ASCII 코드

avg                  집계                    모든 고유 값의 산술 평균

ceiling              수학                    지정된 값보다 크거나 같은 최소 정수

char                 문자열                 정수와 대등한 문자
charindex         문자열                 표현식의 시작 위치를 나타내는 정수를 반환합니다.
char_length       문자열                 표현식의 문자 수
col_length         시스템                 정의된 열의 길이
convert             데이터 유형변환    다른 데이터 유형 또는 datetime 표시 형식으로 변환된 지정 값
count                집계                   null이 아닌 고유한 값의 수
current_date      날짜                    현재 날짜를 반환합니다.                                                                12.5.1
current_time       날짜                   현재 시간을 반환합니다.                                                                12.5.1
datalength         시스템                 지정된 열 또는 문자열의 실제 바이트 단위 길이
dateadd            날짜                    주어진 년도, 분기, 시간 또는 기타 날짜 부분을 지정된

                                                 날짜에 더하여 만든 날짜
datediff             날짜                    두 날짜 표현식 간의 차이
datename          날짜                   날짜 표현식에서 지정된 부분의 이름
datepart            날짜                   날짜 표현식에서 지정된 부분의 정수 값
day                  날짜                   지정한 날짜의 datepart에서 날짜를 나타내는 정수를 반환합니다.            12.5.0.3
floor                 수학                   지정된 값보다 작거나 같은 최대 정수
getdate             날짜                   시스템의 현재 날짜 및 시간
hextoint            데이터유형변환     지정된 16진수 문자열에 해당하는 플랫폼 독립 정수
isdate               시스템                Expression이 날짜형식인지 확인합니다.                                              15.0.1
isnull                시스템                expression1이 NULL로 계산되는 경우 expression2 에 지정된 값으로

                                                대체합니다.
isnumeric          시스템                Expression이 숫자형인지 확인합니다.                                                  15.0.1
ltrim                  문자열                선두 공백이 제거된 지정 표현식
left                    문자열               문자열의 왼쪽 끝에서부터 지정한 수만큼의 문자를 반환합니다.                12.5.0.3
len                    문자열               지정한 문자열 표현식의 바이트 수가 아닌 문자 수를 반환합니다.              12.5.0.3

                                                이 때 후미 공백은 제외됩니다.
max                  집계                   열의 최고 값
min                   집계                   열의 최하 값
month                날짜                  지정한 날짜의 datepart에서 월을 나타내는 정수를 반환합니다.                 12.5.0.3
newid               시스템                Globally Unique ID’s (GUID) 반환                                                        12.5.0.3
patindex            문자열                텍스트 및 이미지 지정된 패턴이 처음 발생한 시작 위치
pi                     수학                   상수 값 3.1415926535897936
power               수학                   지정된 숫자를 주어진 거듭제곱으로 증가시키는 경우 결과 값
radians             수학                   지정된 각도의 라디안 단위 각도 크기
rand                 수학                    지정된 시드 값을 사용하여 생성된 0과 1 사이의 임의 값
replicate            문자열                지정된 횟수만큼 반복되는 표현식으로 구성되는 문자열
reverse             문자열                역순으로 열거된 문자의 지정 문자열
right                  문자열                오른쪽에서 지정된 수의 문자를 시작하는 문자 표현식의 일부
round                수학                   주어진 소수점 자리로 반올림된 지정된 숫자의 값
rtrim                  문자열                후미 공백이 제거된 지정 표현식
space               문자열                지정된 수의 단일 바이트 공간으로 구성되는 문자열
square              수학                   float로 표현한 지정 값의 제곱근을 반환합니다.                                        12.5.0.3
sqrt                   수학                   지정된 숫자의 제곱근
str                    문자열                지정된 숫자와 대등한 문자
str_replace        문자열                첫 번째 문자열 표현식 내에 있는 두 번째 문자열 표현식의 인스턴스를          12.5.0.3

                                                세 번째 표현식으로 대체합니다.
stuff                  문자열               특정 문자열에서 지정된 수의 문자를 삭제하고 다른 문자열로 바꾸어

                                                만들어진 문자열
substring           문자열               다른 문자열에서 지정된 수의 문자를 추출하여 만들어진 문자열
sum                  집계                   값 총계
upper                문자열                지정된 문자열과 대등한 대문자
year                  날짜                   지정한 날짜의 datepart에서 연도를 나타내는 정수를 반환합니다.                   12.5.0.3



19.3.2 사용법

select abs(-1)
select ascii("a")
select avg(advance), sum(total_sales) from titles where type = "business"
select ceiling(123.45)
select char(42)
select charindex("der", "wonderful")
select char_length(notes) from titles where title_id = "PC9999"
select convert(integer, 0x00000100)
select convert(varchar, getdate(), 23)

표 1) 년도를 char 또는 varchar로 변경할 때 사용되는 옵션값
년도 2자리                                년도 4자리                                형식

----------------------------------------------------------------------------------------------------------
- 또는 0                                    100                                        Default
                                                                                            mon dd yyyy, hh:mm AM (or PM)
1                                              101                                        USA mm/dd/yy
2                                              102                                        SQL standard yy.mm.dd
3                                              103                                        English/French dd/mm/yy
4                                              104                                        German dd.mm.yy
5                                              105                                        dd-mm-yy
6                                              106                                        dd mon yy
7                                              107                                        mon dd, yy
8                                              108                                        HH:mm:ss
- 또는 9                                     109                                        Default + milliseconds mon dd yyyy hh:mm:sss AM (or PM)
10                                             110                                        USA mm-dd-yy
11                                             111                                        Japan yy/mm/dd
12                                             112                                        yymmdd
13                                             113                                        yy/dd/mm
14                                             114                                        mm/yy/dd
15                                             115                                        dd/yy/mm
16                                             116                                        mon dd yy HH:mm:ss
17                                             NONE                                    hh:mmAM
18                                             NONE                                    HH:mm
19                                             NONE                                    hh:mm:ss:zzzAM
20                                             NONE                                    hh:mm:ss:zzz
21                                             NONE                                    yy/mm/dd
22                                             NONE                                    yy/mm/dd
23                                             NONE                                    yyyy-mm-ddTHH:mm:ss


select current_date()
select current_time()
select datalength(col1) from table1
select dateadd(hh, 24, "4/1/1979")
select datediff(yy, convert(date, "4/1/1999"), convert(date, "4/1/2000"))
year : yy
quater : qq
week : wk
day : dd
dayofyear : dy
weekday : dw
hour : hh
minute : mi
second : ss
millisecond : ms
select datename(mm, getdate())
select datepart(month, getdate())
select day(getdate())
select floor(123.45)
select getdate()
select hextoint ("0x00000100")
select isdate("20001231")
select isnull(price,0) from titles
select isnumeric("12345")
select ltrim(" aaa")
select left("abc", 1)
select len("abcdefg")
select max(discount) from salesdetail
select min(discount) from salesdetail
select newid(), newid(1), newid(0x0)
select au_id, patindex("%circus%", copy) from blurbs
select pi()
select power(2, 3)
select radians(2578)
select rand()
select replicate("abcd", 3)
select reverse("abcde")
select right("abcde", 3)
select round(123.4545, 2)
select rtrim("aaa ")
select "aaa" + space(5) + "bbb"
select square(5)
select sqrt(25)
select str(12345.1234, 10, 4)
select str_replace("cdefghi","def","yyy")
select stuff("abc", 2, 3, "xyz")
select au_lname, substring(au_fname, 1, 1) from authors
select avg(advance), sum(total_sales) from titles where type = "business"
select upper("abcd")
year("11/02/03")




출처 : www.dbguide.net - ase 프로그래밍 가이드

+ Recent posts