VC 세팅 -> C++ 탭 ->
WIN32,_DEBUG,_WINDOWS,_AFXDLL,_MBCS
이거의 마지막 _MBCS 를 지우고 UNICODE, _UNICODE 바꿔 준다 .
Posted by 쵸매력적인 흐l쟈님☆

이씨

cherish diary 2008/05/15 12:17
티스토리 어떻게 쓰는거야
Posted by 쵸매력적인 흐l쟈님☆
이 방식은 기존의 ODBC를 연결하는 방법이다. ODBC란 원도우 플랫폼에서 지원되는 여러개의 DBMS가 ODBC를 재공하면 윈도우용 응용 프로그램에서는 데이터베이스의 종류에 상관없이 ODBC API만을 사용하여 프로그램을 작성할 수 있는 구조를 말한다.

자바에서의 JDBC가 ODBC를 이용하여 연결하려면 JDBC-ODBC 브릿지를 사용하여 ODBC 드라이버와 연결하면 된다.

jdbc1.gif

[참고] 윈도우 플랫폼에서 기본적으로 재공하는 ODBC를 확인하려면 [제어판]-[관리도구]-[데이터원본(ODBC)]에서 확인하면 된다.

여기에서는 기본적으로 재공하는 Access ODBC를 사용하여 데이터 베이스를 연결해 보도록 하자.

1. Access 데이터베이스를 ODBC관리자에 등록하기(W2k기준)

[제어판]-[관리도구]-[데이터원본(ODBC)]-[시스템 DNS]-[추가]
-[드라이버선택(Microsoft Access Driver(*.mdb))]-데이터베이스 선택 및 데이터 원본 이름 지정

2. 드라이버 로드

DriverManaber 방식과 Class에서 직접 로드하는 방식이 있지만 여기서는 Class에서 직접 로드하는 방법을 택하자.

Class.forName("sun.jdbc.odbc.jdbcOdbcDriver");

3. Connection 생성하기

드라이버를 로드했다고 데이터베이스를 접근할 수 있는 것은 아니다. 데이터베이스와의 실제 연결을 객체 모델링한 클래스가 Connection 클래스이다. 이 Connection클래스의 getConnection메소드를 사용하여 데이터 베이스와 실제 연결해 보자.

Connection conn=DriverManager.getConnection(jdbc_url, user_name, pass_word)

와 같이 객체를 생성한다. 만약 user_name과 pass_word가 없다면 jdbc_url만 기술한다.

만약 위의 1번 단계에서 odbc 관리자에게 등록한 데이터 베이스명이 test 라면,

Connection conn=DriverManager.getConnection("jdbc:odbc:shop")

하면 된다.

여기에서 한가지 주의할 점은 자바와 Access 사이의 한글 인코딩 방식에서 약간의 차이를 보인다. 따라서

Properties props=new Properties();
props.put("charSet","8859_1");

Connection conn=DriverManager.getConnection("jdbc:odbc:shop", props) 

와 같이 처리해야 한글을 정상적으로 처리할 수 있을 것이다. 오라클인 경우는 Properties를 사용하여 인코딩 하지 않아도 된다.

마찬가지로 데이터 베이스에 데이터를 전송할 경우도 인코딩을해 주어야 하는데 이러한 부분을 좀더 편하게 처리하기 위해 아래의 두 개 메소드를 사용하여 처리한다.

  1. // 데이터베이스에 문자열을 넣을 때
  2. static String toDB(String str) throws Exception
  3. {
  4.     return new String(str.getBytes("ksc5601"), "8859_1");
  5. }
  6. // 데이터 베이스로부터 문자열을 넘겨받을 때
  7. static String fromDB(String str) throws Exception
  8. {
  9.     return new String(str.getBytes("8859_1"), "ksc5601");
  10. }

4. Statement 클래스와 ResultSet 클래스를 사용하여 SQL문 실행하기

1) 입력/수정/삭제는 Statement로 처리

Statement stmt = conn.createStatement();
stmt.executeUpdate(sqlStr)

2) 조회는 ResultSet으로 처리

ResultSet rs=stmt.executeQuery(sqlStr);
while(rs.next())
{
      System.out.println(rs.getString("name")); // name필드의 값을 표시함.
}


ResultSet에 관한 세부 메소드는 레퍼런스를 참조하세요.

5. Open한 데이터 베이스를 닫는다.

stmt.close():
conn.close():

Posted by 쵸매력적인 흐l쟈님☆
TAG jdbc, ODBC

#include "odbcinst.h"

#define DNSTYPE              "Microsoft Access Driver (*.mdb)"

CString Attribute;
CString m_dir = "c:\test
CString m_Path = "c:\test\test.mdb"

Attribute.Format("DSN=TESTDB;DESCRIPTION=THISISTESTDB;FileType=Access;DataDirectory=%s;DBQ=%s;",m_dir,m_Path);

if(!SQLConfigDataSource(NULL, ODBC_ADD_SYS_DSN, DNSTYPE, Attribute))
{
    return FALSE;
}



------------------------------------------------------------------------------------------
작년 3학년 2학기때 1학기에 마무리한 산학협동프로젝트 ProPPT에서
ODBC를 수동으로 등록해 주어야했다.
이번에 교수님께서 할께 많이 없으니 그냥 install 되게끔만 만들라하셔서
다른 프로젝트가 많아 이번에 건들게 되었는데,

Microsoft Access 를 사용해야만 mdb파일을 등록시킬 수 있다는 것.

※수동으로 Access 데이터베이스를 ODBC관리자에 등록하기(W2k기준)
[ODBC와 JDBC] 글 참조.

[제어판]-[관리도구]-[데이터원본(ODBC)]-[시스템 DNS]-[추가]
-[드라이버선택(Microsoft Access Driver(*.mdb))]-데이터베이스 선택 및 데이터 원본 이름 지정


 

Posted by 쵸매력적인 흐l쟈님☆