'JDBC'에 해당되는 글 3건

  1. 2009.03.18 [DataBase] 문제풀이 8장
  2. 2009.01.16 [DataBase] Connection Pool
  3. 2009.01.15 [DataBase] JDBC 작성 순서

[DataBase] 문제풀이 8장

DB 2009. 3. 18. 23:53

8.1 ODBC란 무엇인가? SQL/CLI와는 어떤 관련이 있나?
ODBC(Open Data Base Connectivity)
데이터베이스에 접근하기 위한 소프트웨어의 표준 규격으로, 각 데이터베이스의 차이는 ODBC 드라이버에 의해서 흡수되기 때문에 유저는 ODBC에 정해진 순서에 따라서 프로그램을 쓰면 접속처의 데이터베이스가 어떠한 데이터베이스 관리 시스템에 관리되고 있는지 의식할 필요 없이 접근할 수 있다.
SQL/CLI(Call Level Interface)
SQL/CLI는 응용 프로그램에서 SQL을 실행하기 위한 메커니즘을 기술하고 있는데, 사용자가 이를 사용하면 응용 프로그램의 pre-compiling이 필요치 않게 된다. SQL/CLI는 응용 수준에서의 데이터베이스 연동을 위한 기본 표준으로 이용된다. 이것은 SAG (SQL Access Group)와 X/Open의 CLI 및 Microsoft사의 ODBC에 근거하고 있다.

8.2 JDBC란 무엇인가? 내포된 SQL이나 함수 호출 방법 중의 하나에 속하는가?
객체지향 프로그래밍 언어인 JAVA에서 SQL을 호출할 때 사용하는 함수 라이브러리를 말한다. JAVA 프로그래밍 언어는 플랫폼에 독립적으로 설계되었으며 JVM이 설치된 어떤 종류의 컴퓨터에서도 프로그램이 실행될 수 있다. 이러한 호환성으로 인해 많은 RDBMS 회사들이 JAVA 프로그램에서 그들의 시스템을 접근할 수 있도록 JDBC드라이버를 제공한다. JDBC 드라이버란 특정 회사의 RDBMS에 대해 JDBC API에 명시된 함수 호출들을 구현한 것이다. 따라서 JDBC 함수 호출을 포함하고 있는 JAVA 프로그램은 JDBC 드라이버를 가진 어떤 종류의 DBMS도 접근할 수 있다.

8.3 데이터베이스 프로그래밍에 사용할 수 있는 세 가지 대표적인 접근 방식을 밝히고, 각 방식의 장단점에 대해 논하라.
1. 범용 프로그래밍 언어 내에 내포된 데이터베이스 명령문
임피던스 불일치 발생
2. 데이터베이스 함수 라이브러리 사용
임피던스 불일치 발생
3. 새로운 언어의 개발
데이터베이스와의 연동을 많이 요구하는 응용들에 더 적합

8.4 임피던스 불일치 문제란 무엇인가? 위의 세 가지 프로그래밍 접근 방식 중 어느 것이 이 문제를 최소화하는가?
임피던스 불일치 -  데이터베이스 모델과 프로그래밍 언어 모델 사이의 차이점때문에 발생하는 문제.
데이터베이스 프로그래밍 언어를 개발하면 임피던스 불일치는 줄일 수 있다.

8.5 커서의 개념을 설명하고 내포된 SQL에서 이를 어떻게 사용하는지 설명하라.
커서 - 여러 투플들을 검색하는 질의의 결과로부터 한 투플(행)을 가리키는 포인터와 같은 역할을 한다.
커서는 해당 SQL명령이 프로그램 내에 이용될 때 선언되며 그 후에 프로그램에서 OPEN CURSOR 명령을 사용하여 데이터베이스로부터 질의 결과를 추출하고 그 질의 결과 내의 첫 번째 행 이전 위리에 커서를 위치시킨다. 이것이 그 커서의 현재 행이 된다. 그런 다음 프로그램 내에서 FETCH 문을 사용한다. 각 FETCH 문은 질의 결과 내의 다음 행으로 커서를 옮겨 이를 현재 행으로 하며 그 애트리뷰트 값들을 FETCH 문의 INTO 절에서 명시한 호스트 언어 프로그램 변수에 복사한다. 커서 변수는 기본적으로 질의 결과 내의 투플들에 대해 한 번에 한 투플씩 반복하게 하는 반복자이다.
갱신될 행들에 대해 커서가 정의될 경우, 커서 선언문에 FOR UPDATE OF 라는 절을 추가하고 프로그램에 의해 수정될 애트리뷰트 이름들을 표시해야 한다. 만약 행을 삭제할 경우에는 특정 애트리뷰트 이름을 명시하지 않은 FOR UPDATE 절을 추가해야 한다. 내포된 UPDATE(또는 DELETE) 명령에서 커서에 의해 참조되는 현재 투플이 수정(또는 삭제)될 투플임을 표시하기 위해 WHERE CURRENT OF<커서이름>을 조건으로 사용한다.
일반적으로 여러 커서들을 동시에 개방할 수 있다. CLOSE CURSOR 명령을 사용하여 그 커서와 관련된 질의 결과에 대한 처리를 종료했음을 나타낸다.

8.6 SQLJ는 어디서 이용되는가? SQLJ에서 이용하는 두 가지 타입의 반복자에 대해 설명하라.
SQLJ는 JAVA내에 SQL을 내포시키는 방법으로, 여러 업체에서 채택한 표준이다. SQLJ는 JAVA에서 함수 호출을 사용하여 SQL 데이터베이스를 접근하는 데 사용되는 JDBC 이후에 개발되었다. SQLJ 번역기는 일반적으로 SQL 문장을 JAVA로 변환하며 이를 다시 JDBC 인터페이스를 통해 실행될 수 있다. 따라서 SQLJ를 사용하려면 JDBC 드라이버를 설치해야 한다.
SQL에서 반복자는 질의 결과 내의 투플들의 모임과 연관된 객체의 타입이다. 반복자는 질의 결과 내에 나타난 투플과 애트리뷰트들에 연관된다.
1. 명명된 반복자(named iterator)
어떤 질의 결과에 연관될 때 그 질의 결과에 있는 애트리뷰트의 이름과 그 타입들의 목록을 표시한다. 애트리뷰트 이름은 적절하게 선언된 JAVA 프로그램 변수들과 대응되어야 한다.
2. 위치 반복자(positional iterator)
질의 결과에 있는 애트리뷰트 타입들의 목록만 표시한다.

Posted by zeide
,

[DataBase] Connection Pool

DB 2009. 1. 16. 15:19

jdbc 방식의 연결시에는 초기 지연시간 발생하기 때문에 서비스 시간이 지연 → 서비스 시간 개선 → connection을 DB에 미리 연동해두고 필요한 클라이언트에게 연결된 connection을 제공 → 메모리 부하

JNDI(Java Naming & Directory Interface) : JVM → CP
DBCP를 찾아 가기 위한 객체
Context ct = new InitialContext();
DataSource ds = (DataSorce)ct.lookup("java:comp/env/jdbc/등록한 이름");
Connection con = ds.getConnection();

이후는 JDBC와 동일하다.

* DBCP설정
http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html

0. Drivers for older Oracle versions may be distributed as *.zip files rather than *.jar files. Tomcat will only use *.jar files installed in $CATALINA_HOME/common/lib. Therefore classes111.zip or classes12.zip will need to be renamed with a .jar extension. Since jarfiles are zipfiles, there is no need to unzip and jar these files - a simple rename will suffice

1.context configuration
server.xml의 context부분에 추가해준다.

<Resource name="jdbc/myoracle" -- context의 lookup에서 찾아갈 이름, myoracle만 변경가능, 대소문자 주의
              auth="Container"
              type="javax.sql.DataSource"
              driverClassName="oracle.jdbc.OracleDriver"
              url="jdbc:oracle:thin:@127.0.0.1:1521:mysid"
              username="scott" 
              password="tiger"
              maxActive="50" -- 확장 커넥션의 생성 갯수, 기본과 동일하거나 기본+10
              maxIdle="40" -- 기본 커넥션의 생성 갯수
              maxWait="-1" -- 대기시간
/>

2. web.xml configuration
일반 클래스(DAO)에서 connection pool을 쓰려면 servlet이나 JSP에서 클래스를 인스턴스화 해서 쓴다.
안되면 web.xml설정, DTD의 설정에 따라 파일에 넣는다.
webcontent → WEB-INF → lib → web.xml
위에서 설정한 resource name으로 변경해준다

<resource-ref>
<description>Oracle Datasource example</description>
<res-ref-name>jdbc/myoracle</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

Posted by zeide
,

[DataBase] JDBC 작성 순서

DB 2009. 1. 15. 11:59
1. JDBC드라이버 로딩
오라클 - oracle.jdbc.driver.OracleDriver

  try{
  Class.forName("oracle.jdbc.driver.OracleDriver");//대소문자 주의
  }catch(ClassNotFoundException cnfe){
   cnfe.printStackTrace();
  }

2. 데이터베이스 커넥션 구함

 public Connection getConnection(){
  Connection con=null;
  String dburl = "jdbc:oracle:thin:@localhost:1521:orcl";//127.0.0.1루프백, 도메인, 로컬호스트
  String dboid = "scott";
  String dbopass = "tiger";
    
  try{
  con = DriverManager.getConnection(dburl,dboid,dbopass);
  }
  catch(SQLException e){
   e.printStackTrace();
  }//end catch
  
  return con;
 }
//singletonpattern이용

3. 쿼리 실행을 위한 statement 객체 생성

Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;

   con = SingletonConnection.getInstance().getConnection();
   StringBuffer selectQuery = new StringBuffer();
   selectQuery.append("select num, name, address, phone, age from classinfo");
   pstmt = con.prepareStatement(selectQuery.toString());
  
4. 쿼리 실행

 rs = pstmt.executeQuery();

5. 쿼리 실행 결과 사용

 while(rs.next()){
    //조회된 결과를 자바빈즈로 생성
    xmlDateDTO xdd = new xmlDateDTO(
            rs.getInt("num"),
            rs.getInt("age"),
            rs.getString("name"),
            rs.getString("address"),
            rs.getString("phone"));//빈즈를 list로 관리
    classList.add(xdd);
   }

6. statement 종료

if(rs!=null){rs.close();}
if(pstmt!=null){pstmt.close();}

7. 데이터베이스 커넥션 종료

if(con!=null){con.close();}

Posted by zeide
,