Database Programming
- ๋ชฉํ : ๋ํํ ์ธํฐํ์ด์ค๊ฐ ์๋ ์์ฉํ๋ก๊ทธ๋จ์์ DB์ ์ ๊ทผ
- ์? : ํธ๋ฆฌํ์ง๋ง ๋ถ์ถฉ๋ถํ๊ณ , ๋๋ถ๋ถ์ด ์์ฉ ํ๋ก๊ทธ๋จ์์ ๋ง๋ค์ด์ง
DB programming Approaches (์ ๊ทผ๋ฐฉ๋ฒ)
- ์๋ฒ ๋๋
- ํจ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (API)
- ์ ์ธ์ด : DBPL (Database Programming Language) → ๋ถ์ผ์น๋ฅผ ์ต์ํํ ์ ์์
Impedance Mismatch : ์ํผ๋์ค ๋ถ์ผ์น
- ํธ์คํธ ์ธ์ด์ DB๋ชจ๋ธ ์ฌ์ด์ ๋นํธํ์ฑ
Typical sequence of interaction in DB Programming
- ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋จ์ด DB์๋ฒ์์ ์ฐ๊ฒฐ์ open
- ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋จ์ด ์ง์์ด๋ฅผ ๋ณด๋
- DB์ ๊ทผ์ด ํ์์์ด์ง๋ฉด ์ ์ ์ข ๋ฃ
Embedded SQL
- COBOL, C, JAVA
- ํธ์คํธ ์ธ์ด์ ์ฐจ์ด๋ฅผ ๋๊ธฐ ์ํด EXEC SQL … END_EXEC ๋ฅผ ์ฌ์ฉํจ
- ๊ณต์ ๋ณ์ : SQL๋ฌธ์์ ๋ณ์ ์์ : (์ฝ๋ก )์ ๋ถ์ฌ์ผํจ → ex) into :fname
SQLCODE : ์๋ฌ ๋ณ์, SQLSTATE : ์์ธ ๋ณ์ (ํต์ ์ ์ฌ์ฉ๋๋ ์ง์ ๋ ๋ณ์์)
Connecting to the DB
- connection : CONNECT TO
- change : SET CONNECTION -
- disconnection : DISCONNECT -
communicating between program and dbms
- SQLCODE = 0 : ์ฑ๊ณต์
- SQLCODE > 0 or =100 : ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์์
- SQLCODE < 0 : ์๋ฌ
- ORACLE : SQLCA ์ฌ์ฉ : record structure
- EXEC SQL include SQLCA;
- SQLSTATE = ‘00000’ : no error or exception
๊ฒ์๊ฒฐ๊ณผ๊ฐ ์ฌ๋ฌ ํํ์ผ๋ Multiple Tuples with Embedded SQL Using Cursors
- cursor (iterator)
- EXEC SQL DECLARE EMP CURSOR FOR : EMP๋ผ๋ ์ปค์ ์ ์ธ
- CURSOR OPEN : ์ปค์ ์คํ (EXEC SQL OPEN EMP;)
- FETCH : ๋ค์ ํํ๋ก ์ด๋์ํด (EXEC SQL FETCH from EMP into ~)
- CLOSE EMP : EMP์ปค์๋ฅผ ์ ๊ฑฐ (EXEC SQL CLOSE EMP;)
Dynamic SQL : ๋ฐํ์ ์ค์ SQL, ๋ณต์กํ ์ ์์
EXEC SQL PREPARE - FROM - ; → ์ปดํ์ผ ๋ช ๋ น
EXEC SQL EXECUTE - ; → ์คํ ๋ช ๋ น
์ปดํ์ผ+์คํ ํ๋ฒ์ ๋ช ๋ นํ๊ธฐ : EXEC SQL EXECUTE IMMEDIATE - ;
SQLJ : sql in java, import java.sql ํ์
Embedded SQL in java
- try { #sql { }; }
- catch (SQLException e) { } : ์์ธ/์๋ฌ ๊ฒ์ถ
Multiple Tuples in SQLJ
- 2 types of iterators
- named iterator : ๋ณ์ ์ด๋ฆ์ผ๋ก
- positional iterator : ํ์ ๋ง ๋์ดํ๊ณ ์์๋๋ก → next() ๋์ !endFetch() ์ฌ์ฉ : ์์๊ฐ ๋จ์์์๋ false, ์ข ๋ฃ์ true์ด๋ฏ๋ก
- next() ์ฌ์ฉ
- ์ปค์ ์ ์ธ ํ ์ด๊ธฐํํ๊ณ (Emp e = null), ์ปค์์ sql๊ฒฐ๊ณผ๋ฅผ ๋์ ํ์ฌ next()๋ก ๋ฐ๋ณต๋ฌธ ๋๋ฆฌ๊ธฐ
DB programming with functional calls : SQL/CLI and JDBC
- embedded sql prpovides static DB programming
- API : dynamic DB programming with a library of functions
- ์ฅ์ : no preprocessor need(๋ ์ ์ฐํจ)
- ๋จ์ : SQL syntax checks to be done at runtime
“select - from - where Ssn = ?”, SQL_NTS
SQL Call level interface
- a part of the SQL standard
- ODBC (Open database connectivitiy)
- easy access to several db
- certain libraries
- SQL statements are dynamically created and passed as string parameters in the calls
- the information is kept in 4 types of records (struct in C)
Components of SQL/CLI
- Environment record : ์ฐ๊ฒฐ+ํ๊ฒฝ์ ๋ณด ๊ด๋ฆฌ
- Connection record : ํน์ ์ฐ๊ฒฐ์ ์ํ ์ ๋ณด ๊ด๋ฆฌ
- Statement record : SQL ๋ฌธ์ฅ ์ ๋ณด ๊ด๋ฆฌ
- Description record : ํํ, ๋ณ์ ์ ๋ณด ๊ด๋ฆฌ
Steps in C
- load SQL/CLI libraries
- handle ๋ณ์ ์ ์ธ(c pointers) : SQLHSTMT(statement), SQLHDBC(db connection), SQLHENV(environment), SQLHDESC(description)
- set up records using SQLAllocHandle( handle_type , handle_1(์ปจํ ์ด๋) , handle_2(์ type์ ํฌ์ธํฐ) )
- statement ์ค๋น์ํค๊ธฐ : SQLPrepare
- ํ๋ก๊ทธ๋จ ๋ณ์์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ์ธ๋ฉ
- SQLExecute๋ก ์คํ
- ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ C๋ณ์์ ๋ฐ์ธ๋ฉ : SQLBindCol
- SQLFetch ๋ก ๊ฐ์ C๋ณ์๋ก ๊ฒ์
// program CLI
๋ฉํฐํํ ๋ฐํ ์ while(!ret2) { - } ๋ฐ๋ณต๋ฌธ ์ฌ์ฉํ๊ธฐ
'๐ ์ ๊ณต ๊ณต๋ถ > DB๊ธฐ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DB] Indexing structures for files / ๋ฌผ๋ฆฌ์ DB์ค๊ณ (0) | 2022.12.30 |
---|---|
[DB] Disk, ํ์ผ๊ตฌ์กฐ, Hashing, ์ ์ฅ์ ์ค๊ณ (1) | 2022.12.30 |
[DB] SQL programmingโจ๏ธ (2) (0) | 2022.12.30 |
[DB] SQL ๋ฌด๊ฒฐ์ฑ ์ ์ฝ์กฐ๊ฑด ์๋ฐฐ ์์ (0) | 2022.10.20 |
[DB] Schema, DDL, DML ์ ๋ฆฌ (0) | 2022.10.20 |