29
Database Database Programming Programming

Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

Embed Size (px)

Citation preview

Page 1: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

Database Database ProgrammingProgramming

Page 2: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

2

ContentsContents

Overview (Architecture)Overview (Architecture) ProblemsProblems DBDB 와의 연결 방식와의 연결 방식 Middleware ArchitectureMiddleware Architecture

– ODBC, JDBC, Perl DBODBC, JDBC, Perl DB Programming ExamplesProgramming Examples Web & DatabaseWeb & Database

– 연동 방식연동 방식

Page 3: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

3

Database ConnectivityDatabase Connectivity

일반 프로그램에서 일반 프로그램에서 DatabaseDatabase 에 접근에 접근 질의 결과를 프로그램내부에서 처리질의 결과를 프로그램내부에서 처리 하나의 응용프로그램으로 다양한 하나의 응용프로그램으로 다양한

데이타베이스 접근데이타베이스 접근– Cf) device driver Cf) device driver database driver database driver

Page 4: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

4

ProblemsProblems

HeterogeneityHeterogeneity– Access to Diverse DBMSAccess to Diverse DBMS

Impendence MismatchImpendence Mismatch– Query results (RDB) Query results (RDB) Set Set– Program variableProgram variable

Directly cannot deal with “Set”Directly cannot deal with “Set” DBMS

Database?

Page 5: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

5

Impedance MismatchImpedance Mismatch

M_field_AM_field_B

Program variable

-------- -------------- --------------- -------------- --------------- -------------- --------------- -------------- --------------- -------------- --------------- -------------- --------------- -------------- -------

-------- -------------- --------------- -------------- --------------- -------------- --------------- -------------- --------------- -------------- --------------- -------------- --------------- -------------- -------

RowField A Field B ….

DBMSDBMS

Database

Page 6: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

6

DBDB 와의 연결 구조 와의 연결 구조 (1)(1)

DB ServerApplication DBMS

Database

Client ProgramDBMS dependent

API

Server SideClient Side

Page 7: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

7

DBDB 와의 연결 구조 와의 연결 구조 (2)(2)

DB ClientApplication

DBMS

Database

Client Program

Server SideClient Side

NetworkingModule

Page 8: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

8

DBDB 와의 연결 구조 와의 연결 구조 (3)(3)

MiddleWareFor DB DBMSDBMS

Database

Client Program

Page 9: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

9

Uniform Interface to DBUniform Interface to DB

JDBCODBCPerl DBIOLE DBDAOADO…

Page 10: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

10

ODBC ArchitectureODBC Architecture

Application

Driver ManagerODBCDriver

ODBCDriver

ODBCDriver

ODBCDriver

OracleDatabase

InformixDatabase

SybaseDatabase

MySQLDatabase

“what”

“how”

Page 11: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

11

JDBC ArchitectureJDBC Architecture

Java Application

JDBC ManagerJDBC

DriverJDBC-ODBC

BridgeJDBC

DriverJDBC

Driver

ODBCDriver

NativeDriver

SybaseDatabase

MySQLDatabase

InformixDriver

OracleDatabase

Page 12: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

12

Perl DB ArchitecturePerl DB Architecture

Perl Script

DBIOracleDBD

ODBC DBCSQLServer

DBCSybase

DBD

ODBCDriver

OracleDatabase

MySQLDatabase

SQLServerDatabase

SybaseDatabase

Page 13: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

13

Actions on Client & ServerActions on Client & Server

1. Open a connection

2. Sends a query statement

3. Retrieve results

4. Closes a connection

1. Open a connection

2. Sends a query statement

3. Retrieve results

4. Closes a connection

1. Creates a Connection session

2. Executes statement

3. Sends results

4. Close the session

1. Creates a Connection session

2. Executes statement

3. Sends results

4. Close the session

Client Side Server Side

Page 14: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

14

ODBCODBC

ApplicationApplication– DB DB 접속접속 , , 세션 요청세션 요청– SQL SQL 결과를 위한 저장 영역 및 데이터 포맷 정의결과를 위한 저장 영역 및 데이터 포맷 정의– 결과 요청결과 요청– 에러 처리에러 처리– Query/Commit/Rollback Query/Commit/Rollback 요청요청– DB DB 접속 종료접속 종료

Page 15: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

15

ODBCODBC

Driver Manager (ODBC.DLL)Driver Manager (ODBC.DLL)– DB (data) source nameDB (data) source name 을 특정 을 특정 driverdriver 의 의 DLLDLL 로 로

mappingmapping– ODBC ODBC 호출 검증호출 검증

DB DriverDB Driver– Data sourceData source 에 연결 설정에 연결 설정– Data sourceData source 에 질의 요청 전송에 질의 요청 전송– Data format Data format 변환변환– Query resultsQuery results 를 를 applicationapplication 쪽으로 반환쪽으로 반환– Error code Error code 리턴리턴– Cursor Cursor 선언 및 조작선언 및 조작– Transaction Transaction 처리 처리

Page 16: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

16

ODBC driversODBC drivers

Page 17: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

17

ExampleExample

NameCardDB

Programcode

Page 18: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

18

Database ProgrammingDatabase Programming

Make a connection

Build SQL statement

Send SQL statement

Fetch Row

More rows ?

Close result set

Close SQL statement

Close connection

Page 19: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

19

Example Example (ODBC API Code)(ODBC API Code)

Int example (UCHAR *server, UCHAR *uid, UCHAR *pwd)Int example (UCHAR *server, UCHAR *uid, UCHAR *pwd){{

HENV henv;HENV henv;HDBC hdbc;HDBC hdbc;HSTMT hstmt;HSTMT hstmt;UCHAR id[10], name[100], select[200];UCHAR id[10], name[100], select[200];SDWORD namelen, idlen;SDWORD namelen, idlen;RETCODE rc;RETCODE rc;SQLAllocEnv(&henv);SQLAllocEnv(&henv);SQLAllocConnect(henv, &hdbc);SQLAllocConnect(henv, &hdbc);rc=SQLConnect(hdbc, server, SQL_NTS, uid, SQL_NTS, pwd, SQL_NTS);rc=SQLConnect(hdbc, server, SQL_NTS, uid, SQL_NTS, pwd, SQL_NTS);if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO)if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO)

return printf(“can’t connect”);return printf(“can’t connect”);SQLAllocStmt(hdbc, &hstmt);SQLAllocStmt(hdbc, &hstmt);lstrcpy((LPTSTR) select, “SELECT InstructId, Name FROM Instructor”);lstrcpy((LPTSTR) select, “SELECT InstructId, Name FROM Instructor”);if (SQLExecDirect(hstmt, select, SQL_NTS) != SQL_SUCCESS)if (SQLExecDirect(hstmt, select, SQL_NTS) != SQL_SUCCESS)

return printf(“can’t exec direct”);return printf(“can’t exec direct”);printf(“InstructorID Name\n”);printf(“InstructorID Name\n”);

SQLBindCol(hstmt, 1, SQL_C_CHAR, id, (SDWORD)sizeof(id), &idlen);SQLBindCol(hstmt, 1, SQL_C_CHAR, id, (SDWORD)sizeof(id), &idlen);SQLBindCol(hstmt, 2, SQL_C_CHAR, name, (SDWORD)sizeof(name), &namelen);SQLBindCol(hstmt, 2, SQL_C_CHAR, name, (SDWORD)sizeof(name), &namelen);

while(TRUE){while(TRUE){rc = SQLFetch(hstmt);rc = SQLFetch(hstmt);if (rc != SQL_NO_DATA_FOUND) printf(“%-12s %-9s\n”, id, name);if (rc != SQL_NO_DATA_FOUND) printf(“%-12s %-9s\n”, id, name);else break;else break;

}}SQLTransact(henv, hdbc, SQL_COMMIT);SQLTransact(henv, hdbc, SQL_COMMIT);SQLDisconnect(hdbc); SQLFreeConnect(hdbc); SQLFreeEnv(henv);SQLDisconnect(hdbc); SQLFreeConnect(hdbc); SQLFreeEnv(henv);return TRUE;return TRUE;

}}

DB 접속

질의준비/ 요청

변수매핑

질의결과출력

DB 종료

Page 20: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

20

Example Example (Perl Code)(Perl Code)# # 데이타베이스 접속데이타베이스 접속 ------------------------------------------------------------------------------------------------------$dsn = "dbi:Oracle:host=swan;sid=ora8";$dsn = "dbi:Oracle:host=swan;sid=ora8";$ENV{ORACLE_HOME} = "/usr4/ora8/app/oracle/product/8.0.4";$ENV{ORACLE_HOME} = "/usr4/ora8/app/oracle/product/8.0.4";$ENV{ORA_NLS32} = "$ORACLE_HOME/ocommon/nls/admin/data";$ENV{ORA_NLS32} = "$ORACLE_HOME/ocommon/nls/admin/data";$user = "catalog";$user = "catalog";$password = "stop";$password = "stop";$dbh = DBI->connect($dsn, $user, $password) || die "$DBI::errstr";$dbh = DBI->connect($dsn, $user, $password) || die "$DBI::errstr";

$sql_doc = "SELECT did, file_path, input_date FROM docs"; # $sql_doc = "SELECT did, file_path, input_date FROM docs"; # 모든 문서에 대해서모든 문서에 대해서

#print "<font color=black size=2>$sql_doc</font>\n";#print "<font color=black size=2>$sql_doc</font>\n";

$sth = $dbh->prepare($sql_doc) || die "DBI::errstr";$sth = $dbh->prepare($sql_doc) || die "DBI::errstr";$sth->execute() || die "DBI::errstr";$sth->execute() || die "DBI::errstr";

while (($did, $file_path, $input_date) = $sth->fetchrow_array()){while (($did, $file_path, $input_date) = $sth->fetchrow_array()){## print "[print "[ 문서번호문서번호 ] $did [] $did [ 화일명화일명 ] $file_path [] $file_path [ 입력날짜입력날짜 ] $input_date\n","<br>\n";;] $input_date\n","<br>\n";;}}$dbh->do (“insert into $$dbh->do (“insert into $ 유유 _name values (“perl”, “database”, ‘2000/10/17’, …);_name values (“perl”, “database”, ‘2000/10/17’, …);$dbh->do (“drop table students”);$dbh->do (“drop table students”);$sth->finish;$sth->finish;$dbh->disconnect;$dbh->disconnect;

Page 21: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

21

Example Example (PHP Code)(PHP Code)

$host = "localhost";$host = "localhost";$user = "php";$user = "php";$password = "12345";$password = "12345";

$connect = mysql_connect($host, $user, $password);$connect = mysql_connect($host, $user, $password);mysql_select_db('php_db',$connect);mysql_select_db('php_db',$connect); $bookname = $_POST["bookname"]; $bookauthor = $_POST["bookauthor"]; $pubyear = $_POST["pubyear"];$bookname = $_POST["bookname"]; $bookauthor = $_POST["bookauthor"]; $pubyear = $_POST["pubyear"];$position1 = $_POST["position1"]; $position2 = $_POST["position2"];$position1 = $_POST["position1"]; $position2 = $_POST["position2"]; $sql = "insert into bookmanage values('$bookname', '$bookauthor' ,'$pubyear‘ ,'$position1','$position2')";$sql = "insert into bookmanage values('$bookname', '$bookauthor' ,'$pubyear‘ ,'$position1','$position2')";

mysql_query($sql,$connect); mysql_query($sql,$connect);

$connect = mysql_connect($host,$user,$password);$connect = mysql_connect($host,$user,$password);mysql_select_db('php_db', $connect);mysql_select_db('php_db', $connect); $sql = "select * from bookmanage";$sql = "select * from bookmanage";$result = mysql_query($sql,$connect);$result = mysql_query($sql,$connect);$rows = mysql_num_rows($result);$rows = mysql_num_rows($result); echo"<table border=1>";echo"<table border=1>";echo"<tr><th>echo"<tr><th> 책이름책이름 <th><th> 책저자책저자 <th><th> 출판년도출판년도 <th><th> 위치위치 1<th>1<th> 위치위치 2";2";for($i=0; $i<$rows; $i++) {for($i=0; $i<$rows; $i++) { $record = mysql_fetch_array($result);$record = mysql_fetch_array($result); echo "<tr>";echo "<tr>"; echo "<td>$record[bookname]";echo "<td>$record[bookname]"; echo "<td>$record[bookauthor]";echo "<td>$record[bookauthor]"; echo "<td>$record[pubyear]";echo "<td>$record[pubyear]"; echo "<td>$record[position1]";echo "<td>$record[position1]"; echo "<td>$record[position2]";echo "<td>$record[position2]"; }}echo"</table>";echo"</table>";mysql_close($connect);mysql_close($connect); ?>?>

Page 22: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

22

Example Example (Visual C++)(Visual C++)

ODBCODBC 설정설정 데이타베이스 접속데이타베이스 접속

– 데이타베이스와 테이블 지정데이타베이스와 테이블 지정– DBDB 접속을 위한 접속을 위한 object object 생성생성

Result setResult set 과 매핑되는 변수 마련과 매핑되는 변수 마련– Result set Result set RECORDSETRECORDSET object object DOCUMENTDOCUMENT o o

bjectbject Result set Result set 출력출력

– DOCUMENTDOCUMENT class class 변수 변수 VIEWVIEW object object

Page 23: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

23

CPubsSet m_pubsSet

Class CPubsDoc : public CDocument

CPubsSet(CDatabase* pDatabase = NULL);

Class CPubsSet : public CRecordSet

CPubsSet* m_pSet;

Class CPubsView : public CRecordView

m_pSet->Open();m_pSet->MoveNext();m_pSet->Update();. . . m_pSet->Close();

Database

• 질의 요청• Result set 제어

Page 24: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

24

DB Field DB Field Prog. Variable Prog. Variable(Visual C++)(Visual C++)

Page 25: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

25

Web & DatabaseWeb & Database

CGI CGI 방식방식 Demon Demon 방식방식 확장 확장 API API 방식방식 Sublet Sublet 방식방식

Page 26: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

26

CGI CGI 방식방식

InternetCGI DB

Application

HTML Data

HTTP Request

HTML Results

Calls

HTML

• CGI 가 직접 DBMS 에 접근해 데이터를 추출• 구현 용이 기존의 웹서버 브라우저 그대로 사용• One Request One Process• Context switching overhead

WebServer

Page 27: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

27

확장 확장 API API 방식방식

InternetDB

ApplicationProgram

HTML Data

HTTP Request

HTML Results

• DB application program 을 Web Server 안에서 직접 구동• DB Request Web Server 에서 처리• Context switching overhead 없음• 특정 web browser 에 종속

WebServer

Ex) Apache + PHP

Page 28: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

28

Demon Demon 방식방식

InternetRemoteMethod

Invocation

HTML Data

HTTP Request

HTML Results

• Client 에 있는 Java Applet 이 직접 질의요청

WebServer

Demon

Query Results

DB requestsJava

Applet

Page 29: Database Programming. 2 Contents n Overview (Architecture) n Problems n DB 와의 연결 방식 n Middleware Architecture –ODBC, JDBC, Perl DB n Programming Examples

29

Servelet Servelet 방식방식

InternetServeletProcess

HTML Data

HTTP Request

HTML Results

WebServer

data

Calls

HTML

• DB application program 을 Web Server 가 대신 호출• DB Request Web Server 에서 처리• Context switching overhead 없음•특정 web browser 에 독립