1 / 43

데이터베이스 프로그래밍 인터페이스

데이터베이스 프로그래밍 인터페이스. 전용 (Proprietary) 프로그래밍 인터페이스 각 DBMS 회사마다 제공하는 프로그래밍 인터페이스 속도나 효율면에서 우수하지만 DBMS 에 종속적이기 때문에 , 하나의 프로그램으로 다양한 종류의 DBMS 로 접근하기 어려움 공용 (Universal) 프로그래밍 인터페이스 다양한 DBMS 를 하나의 일관된 인터페이스로 다룰 수 있도록 만든 프로그래밍 인터페이스

adin
Download Presentation

데이터베이스 프로그래밍 인터페이스

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 데이터베이스 프로그래밍 인터페이스 • 전용(Proprietary) 프로그래밍 인터페이스 • 각 DBMS 회사마다 제공하는 프로그래밍 인터페이스 • 속도나 효율면에서 우수하지만 DBMS에 종속적이기 때문에, 하나의 프로그램으로 다양한 종류의 DBMS로 접근하기 어려움 • 공용(Universal) 프로그래밍 인터페이스 • 다양한 DBMS를 하나의 일관된 인터페이스로 다룰 수 있도록 만든 프로그래밍 인터페이스 • 하나의 프로그램으로 다양한 DBMS에 접근할 수 있으며, 기반 DBMS를 바꾸더라도 최소한의 코드 수정만으로 동일한 동작을 보장함

  2. 윈도우 데이터베이스 프로그래밍 인터페이스 (1/3) • DAO • 마이크로소프트 제트(Jet) 데이터베이스 엔진을 이용하여 데이터베이스에 접근하기 위한 인터페이스 • MFC의 CDaoDatabase 클래스 등을 이용하여 프로그래밍 가능 • ODBC • 하나의 인터페이스로 다양한 종류의 DBMS를 접근할 수 있도록 만든 성공적인 공개 인터페이스 • MFC의 CDatabase 클래스 등을 이용하여 프로그래밍 가능

  3. 윈도우 데이터베이스 프로그래밍 인터페이스 (2/3) • RDO • COM 기술을 이용해서 ODBC를 포장한 것 • OLE DB • ODBC의 성공을 바탕으로 만든 새로운 공개 인터페이스 • COM 기술을 이용한 새로운 데이터베이스 프로그래밍 방법 • OLE DB 공급자를 통해 다양한 종류의 DBMS에 접근할 수 있으며, ODBC용 OLE DB 공급자를 사용하여 기존의 ODBC도 지원

  4. 윈도우 데이터베이스 프로그래밍 인터페이스 (3/3) • ADO • OLE DB가 제공하는 기능을 좀더 쉽게 사용할 수 있도록 만든 COM 기술 기반의 프로그래밍 인터페이스 • OLE DB에 기반하기 때문에 다양한 종류의 데이터베이스를 다룰 수 있고, 고성능을 냄. 언어 독립적이어서 베이직, C/C++, 자바 등 다양한 언어로 프로그래밍 가능

  5. ODBC 구조 (1/5) • ODBC 구조 응용 프로그램 ODBC API 드라이버 관리자(ODBC32.DLL) ODBC API 드라이버 드라이버 드라이버 데이터 원본 데이터 원본 데이터 원본

  6. ODBC 구조 (2/5) • 응용 프로그램 • ODBC API를 통해 드라이버 관리자와 통신 • 데이터베이스에 연결할 때는 ODBC API를 사용하지만, 실제 데이터를 다룰 때는 관계형 데이터베이스 조작 언어인 SQL을 사용 • 드라이버 관리자 • 응용 프로그램과 특정 DBMS 드라이버를 매개 • 응용 프로그램이 요구한 데이터베이스를 접근할 수 있도록 ODBC 드라이버를 로드하고, 응용 프로그램과 동일한 API를 이용하여 드라이버의 함수를 호출

  7. ODBC 구조 (3/5) • 드라이버 • ODBC API의 구현을 제공하며 특정 DBMS에 종속적임 • DBMS가 자체 엔진을 제공하는 경우, 드라이버는 SQL문을 DBMS에게 전달. 엑셀 파일과 같이 자체 엔진을 제공하지 않는 경우에는 드라이버가 직접 SQL문을 처리 • 데이터 원본 • ODBC에서 데이터베이스에 접근하기 위해 필요한 정보와 데이터베이스 자체를 총칭하는 용어 • 데이터 원본이 있어야만 ODBC를 이용한 데이터베이스 접근 가능

  8. ODBC 구조 (4/5) • ODBC 데이터 원본 관리자

  9. ODBC 구조 (5/5) • 데이터 원본 종류

  10. MFC ODBC 클래스 (1/4) • MFC 클래스 계층도

  11. MFC ODBC 클래스 (2/4) • 데이터베이스 클래스 • CDatabase 클래스는 데이터베이스와의 연결을 나타내며, 이 객체를 통해 해당 데이터베이스를 조작함 • 데이터베이스에 접근하려면 가장 먼저 CDatabase 객체를 만들어야 함 CDatabase db; db.OpenEx(...); ... db.Close();

  12. MFC ODBC 클래스 (3/4) • 레코드셋 클래스 • CRecordSet 클래스는 레코드셋을 나타내며, 데이터를 추가, 삭제, 갱신 등의 작업을 할 때 핵심적인 역할을 함 // 데이터베이스 객체 생성 CDatabase db; db.OpenEx(...); // 레코드셋 객체 생성 CRecordset rs(&db); rs.Open(...); // 데이터 추가, 삭제, 갱신, 검색, ... // 종료 rs.Close(); db.Close();

  13. MFC ODBC 클래스 (4/4) • 예외 처리 클래스 • CDBException 클래스는 데이터베이스를 조작할 때 발생하는 오류를 나타냄 try { // 데이터베이스 조작 } catch(CDBException *e) { e->ReportError(); e->Delete(); }

  14. MFC ODBC 프로그램 - 콘솔 (1/2) • 예제 코드 // ① 데이터베이스 객체 생성 CDatabase db; db.OpenEx("DSN=student", 0); // ② 레코드셋 객체 생성 CRecordset rs(&db); rs.Open(CRecordset::dynaset, "SELECT * FROM Table1"); // ③ 레코드 출력 CString str; while(!rs.IsEOF()){ rs.GetFieldValue(short(0), str); cout << (LPCTSTR)str << " ";

  15. MFC ODBC 프로그램 - 콘솔 (2/2) • 예제 코드 (cont'd) rs.GetFieldValue(short(1), str); cout << (LPCTSTR)str << " "; rs.GetFieldValue(short(2), str); cout << (LPCTSTR)str << " "; rs.GetFieldValue(short(3), str); cout << (LPCTSTR)str << endl; rs.MoveNext(); } // ④ 종료 rs.Close(); db.Close();

  16. 주요 함수 (1/7) • 데이터베이스 객체 생성 • lpszConnectString • 사용할 데이터 원본 이름과 ID, 암호 등을 문자열로 넘겨줌. ID와 암호가 없을 경우 생략 가능(예) "DSN=Friends;UID=SA;PWD=abc123" • dwOptions • 비트 매스크로 옵션 지정, 기본값인 0을 사용하면읽기와 쓰기 모드로 데이터베이스를 접근함. BOOL CDatabase::OpenEx ( LPCTSTR lpszConnectString, DWORD dwOptions = 0 );

  17. 주요 함수 (2/7) • 레코드셋 객체 생성 • pDatabase • 데이터베이스 객체의 주소 CRecordset::CRecordset (CDatabase* pDatabase = NULL); BOOL CRecordset::Open ( UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE, LPCTSTR lpszSQL = NULL, DWORD dwOptions = none );

  18. 주요 함수 (3/7) • 레코드셋 객체 생성 (cont'd) • nOpenType • CRecordset::dynaset, CRecordset::snapshot, CRecordset::dynamic, CRecordset::forwardOnly • lpszSQL • SQL SELECT 문을 사용하면 조건에 맞는 레코드셋을 얻을 수 있음 • dwOptions • 읽기 전용(CRecordset::readOnly), 추가 전용(CRecordset::appendOnly) 등 다양한 옵션

  19. 주요 함수 (4/7) • 레코드 출력 • 현재 레코드 변경 함수

  20. 주요 함수 (5/7) • 레코드 출력 (cont'd) • 현재 레코드 위치 판단 함수

  21. 주요 함수 (6/7) • 레코드 출력 (cont'd) • nIndex • 필드를 나타내는 인덱스(0부터 시작) • strValue • 해당 필드의 데이터가 저장됨 void CRecordset::GetFieldValue ( short nIndex, CString& strValue );

  22. 주요 함수 (7/7) • 종료 rs.Open(...); ... rs.Close(); rs.Open(...); // 새로운 레코드셋을 얻는다. ... rs.Close();

  23. MFC ODBC 프로그래밍 - GUI • MFC 클래스 계층도

  24. AppWizard 생성 코드 분석 (1/9) • 클래스 구성

  25. AppWizard 생성 코드 분석 (2/9) • 레코드셋 클래스 class CExODBC2Set : public CRecordset { public: CExODBC2Set(CDatabase* pDatabase = NULL); DECLARE_DYNAMIC(CExODBC2Set) // Field/Param Data //{{AFX_FIELD(CExODBC2Set, CRecordset) long m_Number; CString m_Name; BOOL m_Man; CString m_Phone; //}}AFX_FIELD ...

  26. AppWizard 생성 코드 분석 (3/9) • 레코드셋 클래스 (cont'd) CExODBC2Set::CExODBC2Set(CDatabase* pdb) : CRecordset(pdb) { //{{AFX_FIELD_INIT(CExODBC2Set) m_Number = 0; m_Name = _T(""); m_Man = FALSE; m_Phone = _T(""); m_nFields = 4; //}}AFX_FIELD_INIT m_nDefaultType = snapshot; }

  27. AppWizard 생성 코드 분석 (4/9) • 레코드셋 클래스 (cont'd) CString CExODBC2Set::GetDefaultConnect() { return _T("ODBC;DSN=student"); } CString CExODBC2Set::GetDefaultSQL() { return _T("[Table1]"); }

  28. AppWizard 생성 코드 분석 (5/9) • 레코드셋 클래스 (cont'd) void CExODBC2Set::DoFieldExchange(CFieldExchange* pFX) { //{{AFX_FIELD_MAP(CExODBC2Set) pFX->SetFieldType(CFieldExchange::outputColumn); RFX_Long(pFX, _T("[Number]"), m_Number); RFX_Text(pFX, _T("[Name]"), m_Name); RFX_Bool(pFX, _T("[Man]"), m_Man); RFX_Text(pFX, _T("[Phone]"), m_Phone); //}}AFX_FIELD_MAP }

  29. 데이터베이스 테이블 현재 레코드 Number Name Man Phone 레코드셋 CExODBC2Set { long m_Number; CString m_Name; BOOL m_Man; CString m_Phone; ... } AppWizard 생성 코드 분석 (6/9) • 레코드셋 클래스 (cont'd) • RFX(Record Field eXchange)

  30. AppWizard 생성 코드 분석 (7/9) • 도큐먼트 클래스 class CExODBC2Doc : public CDocument { protected: // create from serialization only CExODBC2Doc(); DECLARE_DYNCREATE(CExODBC2Doc) // Attributes public: CExODBC2Set m_exODBC2Set; ...

  31. AppWizard 생성 코드 분석 (8/9) • 뷰 클래스 class CExODBC2View : public CRecordView { protected: // create from serialization only CExODBC2View(); DECLARE_DYNCREATE(CExODBC2View) public: //{{AFX_DATA(CExODBC2View) enum{ IDD = IDD_EXODBC2_FORM }; CExODBC2Set* m_pSet; // NOTE: the ClassWizard will add data members here //}}AFX_DATA ...

  32. AppWizard 생성 코드 분석 (9/9) • 뷰 클래스 (cont'd) void CExODBC2View::OnInitialUpdate() { m_pSet = &GetDocument()->m_exODBC2Set; CRecordView::OnInitialUpdate(); GetParentFrame()->RecalcLayout(); ResizeParentToFit(); } CRecordset* CExODBC2View::OnGetRecordset() { return m_pSet; }

  33. 데이터베이스 테이블 현재 레코드 Number Name Man Phone 레코드셋 레코드 뷰 CExODBC2Set { long m_Number; CString m_Name; BOOL m_Man; CString m_Phone; ... } IDC_EDIT1 IDC_EDIT2 IDC_EDIT3 IDC_EDIT4 RFX DDX 레코드 다루기 (1/4) • 레코드 표시 • DDX와 RFX

  34. 레코드 다루기 (2/4) • 레코드 추가 • 레코드 변경 m_pSet->AddNew(); m_pSet->m_Number = 21195; m_pSet->m_Name = 김성희; m_pSet->m_Man = 0; m_pSet->m_Phone = 789-0987; m_pSet->Update(); m_pSet->Edit(); m_pSet->m_Phone = 789-1256; // 전화번호만 갱신 m_pSet->Update();

  35. 레코드 다루기 (3/4) • 레코드 삭제 • CRecordset::Delete()를 호출  삭제가 성공하면 반드시 다른 레코드로 스크롤 • 레코드셋 갱신 • 레코드 추가, 변경, 삭제 후 변경된 레코드 내용이 현재 레코드셋에 반영되게 하려면 CRecordset::Requery()를 호출하여 레코드셋을 새로 만듦

  36. 레코드 다루기 (4/4) • 레코드 필터링(검색) • 레코드 정렬 m_pSet->m_strFilter = "NAME = '김성희'"; m_pSet->Requery(); m_pSet->m_strSort = "NAME"; m_pSet->Requery();

  37. ADO 프로그래밍 (1/4) • ADO의 장점 • 언어 독립적. 비주얼 베이직, 비주얼 C++, VB스크립트, 비주얼 J++, J스크립트 등 마이크로소프트가 제공하는 거의 모든 언어로 프로그래밍 가능 • 다양한 데이터에 대한 일관된 인터페이스를 제공. 관계형 데이터베이스는 물론이고 비관계형 데이터베이스나 일반 파일도 일관된 방법으로 다룰 수 있음 • 고성능이며 메모리, 네트워크 트래픽과 같은 자원을 적게 소모하도록 효율적으로 설계됨

  38. ADO 프로그래밍 (2/4) • ADO와 OLE DB 응용 프로그램 ADO OLE DB 데이터

  39. ADO 프로그래밍 (3/4) • 비주얼 C++를 이용한 ADO 프로그래밍 • ADO API를 직접 사용 • ActiveX 컨트롤을 이용 • ADO 관련 컨트롤 • ADO 데이터 컨트롤 • 데이터베이스에 대한 연결과 더불어 질의(Query)를 통해 레코드를 가져오는 역할을 하며, 레코드를 이동할 수 있는 버튼을 유저 인터페이스로 제공 • ADO 데이터 바운드 컨트롤 • 데이터 컨트롤과 연결해야만 사용할 수 있으며, 레코드를 다양한 형태로 화면에 표시

  40. 데이터 바운드 컨트롤 데이터 컨트롤 ADO OLE DB 데이터 베이스 ADO 프로그래밍 (4/4) • 데이터 컨트롤과 데이터 바운드 컨트롤

More Related