*์ฟผ๋ฆฌ๋ฌธ ์์ฑ๊ฐ์ฒด
- ์์ฑ๋ ์ฟผ๋ฆฌ๋ฌธ์ ์คํํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ป๋ ์ผ์ ์ ์ํ interface๋ค
*Statement
- ๊ฐ์ฒด๊ฐ ์คํํ ์ฟผ๋ฆฌ๋ฌธ์ ์์ง ๋ชปํ๋ ์ํ๋ก ์ป์ด์ง (์ป์ด์ง๋ ๋น์์ ์ฟผ๋ฆฌ๋ฌธ์ ๋ชจ๋ฆ)
Statement stmt=con.createStatement();
์ป์ด์ง๋ ๋น์์ ์ฟผ๋ฆฌ๋ฌธ์ ๋ํ ์ ๋ณด x
- ์ฟผ๋ฆฌ๋ฌธ์ ์คํ(executeXxx(“์ฟผ๋ฆฌ๋ฌธ”))ํ ๋ ์์ฑํ์ฌ ์คํ
- ๊ฐ์ ์ฟผ๋ฆฌ๋ฌธ์ด๋๋ผ๋ ๋งค๋ฒ ์๋ก ์์ฑํ์ฌ ์คํ๋จ
(์ฟผ๋ฆฌ๋ฌธ์ด ๋ฐ๋ณต์ ์ผ๋ก ์คํ๋ ๋ ํจ์จ์ด ๋จ์ด์ง)
- SQLInjection๊ณต๊ฒฉ์ ์ทจ์ฝ,๋ณด์ ์ฝ์ (์ธ๋ถ์์ ์ฟผ๋ฆฌ๋ฌธ์ ์์ํ์ฌ ์กฐ์ํ ์ฟผ๋ฆฌ๋ฌธ์ ๋ฃ๋ ๊ณต๊ฒฉ)
*PreparedStatement
-๊ฐ์ฒด๊ฐ ์ฟผ๋ฆฌ๋ฌธ์ด ๋ค์ด๊ฐ ์ํ๋ก ์ป์ด์ง (์คํํ ์ฟผ๋ฆฌ๋ฌธ์ ์๊ณ ์์)
PreparedStatement pstmt=con.prepareStatement(“์ฟผ๋ฆฌ๋ฌธ”);
-์
๋ ฅ ๊ฐ์ bind๋ณ์(?)๋ฅผ ์ฌ์ฉํ์ฌ ๋์ค์ ๋ฃ์
-๊ฐ์ ์ฟผ๋ฆฌ๋ฌธ์ ํ ๋ฒ๋ง ์์ฑ๋๊ณ , ๊ฐ๋ง ๋ค๋ฅด๊ฒ ๋ค์ด๊ฐ์ ์คํ๋จ
(์ฟผ๋ฆฌ๋ฌธ์ด ๋ฐ๋ณต์ ์ผ๋ก ์คํ๋ ๋ ํจ์จ์ด ์ข์)
-SQLInjection๊ณต๊ฒฉ์ ์์
*CallableStatement
- Procedure๋ฅผ ์คํํ๊ธฐ ์ํด ์ ๊ณต๋๋ ๊ฐ์ฒด
CallableStatement cstmt=con.prepareCall(“ { call ํ๋ก์์ ๋ช
(๋ฐ์ธ๋๋ณ์,, ) }”);
- ๋ฐ์ธ๋ ๋ณ์๋ฅผ ์ฌ์ฉ (PreparedStatement์ ์์)
- Types ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ out parameter๋ฅผ ๋ฑ๋ก ์ฌ์ฉ
*Statement ์ฌ์ฉ
- Statement ๊ฐ์ฒด ์ป๊ธฐ
Statement stmt=con.createStatement();
- ์ฟผ๋ฆฌ๋ฌธ์ ๋ฐ๋ผ execute(), executeUpdate(), executeQuery() method๋ฅผ ํธ์ถํ์ฌ ์ฒ๋ฆฌ
- DBMS๋ฅผ ๋ณ๊ฒฝํ๋ ์ฟผ๋ฆฌ๋ฌธ:
>DDL (create, drop, alter, truncate) : execute()๋ก ์คํ
>DML ์ค (insert, update, delete) : executeUpdate()๋ก ์คํ - DBMS๋ฅผ ๋ณ๊ฒฝํ์ง ์๋ ์ฟผ๋ฆฌ๋ฌธ:
DML ์ค (select) : executeQuery()๋ก ์คํ
*CRUD
- Create : create, insert
- Read : select
- Update : update, alter, commit, rollback, grant,revoke
- Delete : delete, drop, truncate
<create>
String sql=“create table test (num number, name varchar2(10) ) ”;
boolean flag=stmt.execute( sql ); //์ฟผ๋ฆฌ๋ฌธ์ด ์คํ ๋๋ค๋ฉด false, ์ฟผ๋ฆฌ๋ฌธ์ด ์คํ ์คํจ๋๋ค๋ฉด Exception ๋ฐ์
<insert>
String sql=“insert into ,,,”;
int cnt=stmt.executeUpdate( sql ); //์ฑ๊ณต – ์ถ๊ฐ๋ ํ ์, ์คํจ – Exception
<update>
String sql=“update ,,,”;
int cnt=stmt.executeUpdate( sql ); //์ฑ๊ณต – ๋ณ๊ฒฝ๋ ํ ์, ์คํจ – Exception
<select>
String sql=“select ,,,”;
ResultSet rs=stmt.executeQuery( sql ); //์ฑ๊ณต- CURSOR ์ ์ด๊ถ(ResultSet), ์คํจ - Exception
*Statement ์ฌ์ฉ
- DAO(Data Access Object) : DBMS ์์
๋ง์ ์ ์ํ ํด๋์ค (์ฟผ๋ฆฌ๋ฌธ์ ์ ์ฅ, ์ฟผ๋ฆฌ๋ฌธ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ด)
- VO(Value Object) : ๊ฐ์ ์ ์ฅํ ๊ฐ์ฒด (๊ฐ์ ์ ์ฅํ์ฌ ์ ๋ฌํ๋ ์ญํ )
ํน์ DTO(Data Transfer Object) : ๊ฐ์ ์ ๋ฌํ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ ๊ฐ์ฒด - Service : ์ ๋ฌด๋ก์ง(business logic)์ ์ฒ๋ฆฌํ๊ธฐ ์ํด์ ๋ง๋๋ ๊ฐ์ฒด
*Statement ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ CRUD
- VO: ๊ฐ์ ์ ์ฅํ๊ณ ๋ค๋ฅธ ํด๋์ค์ ์ ๋ฌํ ๋ชฉ์ ์ผ๋ก ๋ง๋๋ ๊ฐ์ฒด
- DAO: ์ฟผ๋ฆฌ๋ฌธ์ ์ ์ํ๊ณ ์คํํ๋ ์ฝ๋๋ฅผ ๊ฐ์ง ๊ฐ์ฒด
- Service: ์ ๋ฌด ๋ก์ง์ ์ฒ๋ฆฌํ๋ ๊ฐ์ฒด
JVM | DBMS |
<DB์ฐ๋> 1. ๋๋ผ์ด๋ฒ ๋ก๋ฉ Class.forName("oracle.jdbc.OracleDriver"); 2. ๋ก๋ฉ๋ ๋๋ผ์ด๋ฒ๋ก DBMS์์ ์ฐ๊ฒฐ ์ป๊ธฐ String url="jdbc:oracle:thin@localhost:1521:orcl"; String id="scott"; String pass = "tiger"; Connection con = DriverManager.getConnection(url,id,pass); 3. (Connection์ผ๋ก๋ถํฐ) ์ฟผ๋ฆฌ๋ฌธ ์์ฑ๊ฐ์ฒด ์ป๊ธฐ Statement stmt = con.createStatement(); 4. ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑ, ์คํ String sql = "insert into ํ ์ด๋ธ๋ช (์ปฌ๋ผ๋ช ,,) values(๊ฐ,,)"; Statement: ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑ,์คํํ๋ ๊ฐ์ฒด int rowCnt = stmt.executeUpdate( sql๋ฌธ ) ; //๋ช ๊ฐ์ ํ์ด ์ ๋ฐ์ดํธ(์ถ๊ฐ,๋ณ๊ฒฝ,์ญ์ )๋์๋์ง ์นด์ดํธ 5.์ฐ๊ฒฐ ๋๊ธฐ statement์ connection๋ง, driverManger๋ ์์ stmt.close(); con.close(); |
3. ๋๋ผ์ด๋ฒ๋งค๋์ ๊ฐ url,id,pass๋ก DB์ ๊ฐ์ ์ธ์ฆ๋ฐ์ ์ฑ๊ณตํ๋ฉด Connection์ด ๋์ด 4. ์ฟผ๋ฆฌ๊ฐ statement๋ฅผ ํ๊ณ ๋ค์ด๊ฐ์ ์ฐ๊ฒฐ๋ DBMS์ ํ ์ด๋ธ์ insert,update,delege๋๊ณ , ํ์ ์๊ฐ ๋์ด |
*insert
- ํ ํ ์ถ๊ฐ, subquery๋ฅผ ์ฌ์ฉํ๋ฉด ์กฐํ๋ ์ฌ๋ฌ ํ์ด ์ถ๊ฐ
( ๊ฒฐ๊ณผ : ์ถ๊ฐ ์ฑ๊ณต(0~nํ) ๋๋ ์์ธ)
์ถ๊ฐ์คํจ :
1. ์ ์ฝ์ฌํญ ์๋ฐฐ
2. ๋ค๋ฅธ ๋ฐ์ดํฐํ์ ์ถ๊ฐ : ์ฟผ๋ฆฌ๋ฌธ์ ์๋ชป ๋ง๋ ๊ฒ
empno <- ename ์
๋ ฅ
3. ์
๋ ฅ ๋ฐ์ดํฐํ์ ํฌ๊ธฐ๊ฐ ๋ง์ง ์์
String insertQuery=“insert ,,, “;
//์ฟผ๋ฆฌ ์คํ
try{
Statement stmt=con.createStatement();
int rowCnt=stmt.executeUpdate( ์ฟผ๋ฆฌ๋ฌธ );
ํ ํ insert ๋๋ ์ฟผ๋ฆฌ๋ฌธ : 1์ด ๋ฆฌํด๋๊ฑฐ๋ ์์ธ๋ฐ์
์ฌ๋ฌ ํ insert ๋๋ ์ฟผ๋ฆฌ๋ฌธ : 0~n์ด ๋ฆฌํด๋๊ฑฐ๋ ์์ธ๋ฐ์
}catch( SQLException se ){
int errCode=se.getErrorCode(); // DBMS์์ ์ ๊ณตํ๋ ์๋ฌ์ฝ๋๊ฐ ๋ฆฌํด๋จ
if( errCode == ๋น๊ต) {
์ํฉ์ ๋ง๋ ์์ธ๋ฅผ ๋ฉ์์ง๋ฅผ ์ ๊ณต
}//end if
}//end catch
*update
-0~n๊ฐ์ ํ์ด ๋ณ๊ฒฝ๋จ, ๋ณ๊ฒฝ๋ ํ์๋ฅผ ๋ฐ์์ ์ฒ๋ฆฌํ๋ ์ฝ๋๊ฐ ํ์ํจ
String updateQuery=“update ,,, where ์ปฌ๋ผ๋ช
=๊ธฐ์ค๊ฐ”;
int cnt=stmt.executeUpdate( updateQuery );
where์ ์ ๋ถํฉ๋๋ ๋ณ๊ฒฝ๋ ํ์ ์ : 0~n์ด ๋ฆฌํด๋๊ฑฐ๋((์ดํํจ์ ์ข
์)) ์์ธ๋ฐ์ / ์์ ํจ์ ์ข
์์ด๋ฉด 0~1๊ฐ
0 – ๋ณ๊ฒฝ์กฐ๊ฑด์ ๋ถํฉ๋๋ ํ ์์
n – ๋ณ๊ฒฝ์กฐ๊ฑด์ ๋ถํฉ๋๋ ํ์ด ์ฌ๋ฌ ๊ฐ
Exception – ์ฟผ๋ฆฌ๋ฌธ์ด ์๋ชป ์์ฑ๋์๊ฑฐ๋, DB์์ ๋ฌธ์ ๊ฐ ๋ฐ์
*delete
-0~n๊ฐ์ ํ์ด ์ญ์ ๋จ, ์ญ์ ๋ ํ์๋ฅผ ๋ฐ์์ ์ฒ๋ฆฌํ๋ ์ฝ๋ ํ์
String deleteQuery=“delete from ํ
์ด๋ธ๋ช
where ์ปฌ๋ผ๋ช
=๊ธฐ์ค๊ฐ”;
int cnt=stmt.executeUpdate( deleteQuery );
where์ ์ ๋ถํฉ๋๋ ๋ณ๊ฒฝ๋ ํ์ ์ : 0~n์ด ๋ฆฌํด๋๊ฑฐ๋ ์์ธ๋ฐ์
0 – ๋ณ๊ฒฝ์กฐ๊ฑด์ ๋ถํฉ๋๋ ํ ์์
n – ๋ณ๊ฒฝ์กฐ๊ฑด์ ๋ถํฉ๋๋ ํ์ด ์ฌ๋ฌ ๊ฐ
Exception – ์ฟผ๋ฆฌ๋ฌธ์ด ์๋ชป ์์ฑ๋์๊ฑฐ๋, DB์์ ๋ฌธ์ ๊ฐ ๋ฐ์
*Select
- java.sql.ResultSet์ ์ฌ์ฉ
-์กฐํ๋ ๋ ์ฝ๋๋ฅผ ์์ง์ผ ์ ์๋ (์ปค์์) ์ ์ด๊ถ์ ๋ฐ์ – cursor์ ์ ์ด๊ถ cf.next() ํฌ์ธํฐ๋ฅผ ์์ง์
-DBMS์ ๋ฐ์ดํฐ ํ์ Java์ ๋ฐ์ดํฐ ํ์ผ๋ก ๋ณํํ๋ ์ผ ( varchar2 > String / number >int, double)
1. ๋๋ผ์ด๋ฒ ๋ก๋ฉ 2. ๋๋ผ์ด๋ฒ ๋งค๋์ ๋ก DB ์ฐ๊ฒฐ, ์ปค๋ฅ์ ์ป๊ธฐ 3. ์ฟผ๋ฆฌ๋ฌธ ์์ฑ๊ฐ์ฒด ์ป๊ธฐ 4. ์ฟผ๋ฆฌ๋ฌธ ์ํ ํ ๊ฒฐ๊ณผ ๋ฐ๊ธฐ String select = "select deptno, dname, loc from dept" ; ResultSet rs = stmt.executeQuery( select ) ; 5. ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๊ธฐ // ๋ ์ฝ๋๊ฐ ์กด์ฌํ๋์ง ๋ชจ๋ฅด์ง๋ง, ์๋ค๋ฉด ์๋ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ๊ฐ์ ธ์ค๊ธฐ |
inline view ์์ฑ (์กฐํ๊ฒฐ๊ณผ๋ DB์ ์์ฑ๋จ) ์๋ฐ์์ ํ๋์ฉ ๊บผ๋ด๊ฐ๋ผ๊ณ ์ปค์๊ฐ ์์ฑ๋จ |
rs๋ ์ธ๋ผ์ธ๋ทฐ ์์ ์กด์ฌํ๋ ์ปค์์ ์ ์ด๊ถ์ ๋ฐ์์ด rs: ํฌ์ธํฐ๋ฅผ ์ฎ๊ธฐ๊ณ , ์ค๋ผํด ๋ฐ์ดํฐํ์ ์๋ฐ๋ก ๋ฐ๊ฟ์ค while( rs.next() ) { //ํ์ฌ ์ปค์๊ฐ ์กด์ฌํ๋ ์์น ๋ค์ ์ค์ ๋ ์ฝ๋๊ฐ ์กด์ฌํ๋ฉด true ๋ฐํ ํ ์ปค์ ์์น๋ฅผ ์๋๋ก ์ด๋์ํด rs๋ oracle์ ๋ฐ์ดํฐํ์ Java์์ ์ฌ์ฉํ ์ ์๋๋ก ๋ณ๊ฒฝํ๋ ์ผ์ ํจ int deptno = rs.getInt( " deptno " ) ; // ์ค๋ผํด์ number > ์๋ฐ์ int๋ก ๋ณํํ์ฌ ๊ฐ์ ธ์ด String dname = rs.getString( "dname" ) ; //์ค๋ผํด์ varchar2 >์๋ฐ์ String์ผ๋ก ๋ณํํ์ฌ ๋ฐํ }// |