*PreparedStatement ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ CRUD
*์กฐํ ๊ฒฐ๊ณผ๊ฐ n๊ฐ์ ํ์ผ ๋ (๋ช ๊ฐ์ ํ์ด ๋ฐํ๋ ์ง ๋ชจ๋ฅผ ๋)
๊ฐ์ด ๋ช๊ฐ์ธ์ง ๋ชจ๋ฅด๊ฒ ๋๋ฐ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ ์ ์ฅํ๋ ค๋ฉด ์ ์ ํ ์๋ฃ๊ตฌ์กฐ๋?
- ๊ฐ ์ค๋ณต ๊ฐ๋ฅ > List
- ๊ฐ ์ ์ผํด์ผํจ > Set
ํ ์ด๋ธ์ ๋ ์ฝ๋ ๊ตฌ์ฑ ์
๋ช ๊ฐ์ธ์ง ๋ชจ๋ฅด๊ฒ ๋๋ฐ ์ค๋ณต๋ ๊ฑฐ ๊ฐ์ผ๋ฉด > list (๋ช๊ฐ์ธ์ง ๋ชจ๋ฅด๋๋ฐ ์ค๋ณต ๊ฐ๋ฅ)
๋ช ๊ฐ์ธ์ง ๋ชจ๋ฅด๊ฒ ๋๋ฐ ์ ์ผํ ๊ฑฐ ๊ฐ์ผ๋ฉด > Set (๋ช๊ฐ์ธ์ง ๋ชจ๋ฅด๋๋ฐ ์ค๋ณต ๋ถ๊ฐ)
*๋ถ์๋ฒํธ๋ฅผ ์ ๋ ฅ๋ฐ์ ์ฌ์๋ช ์ ์กฐํํ๋ ๋ฉ์๋ ์์ฑ
๋ถ์๋ฒํธ ํ๋์ ์ฌ์๋ช ์ด n๋ช > 0~n๊ฐ ๋์ด
public List<String> selectJob( int deptno )
๋จ์ผํ, ๋ช๊ฐ์ผ์ง ๋ชจ๋ฅด๋ ๊ฐ์ ๊ฐ์ ๋ฌถ์ด์ list๋ก ๋ฐํ
๋จ์ผํ: ํ๊ฐ์ ์ปฌ๋ผ๊ฐ์ด ๋ฐํ๋ ๊ฒ
*๋งค๋์ ๋ฒํธ๋ฅผ ๋ฐ์ ์ฌ์๋ฒํธ ์กฐํํ๋ ์ผ method์์ฑ
public Set<Integer> selectJob(int mgr)
๋จ์ผํ, ๋ช ๊ฐ์ธ์ง ๋ชจ๋ฅด๋ ๊ฐ๋ค์ ๋ฌถ์ด์ ๋ฐํ, ๊ฐ๋ค์ด ์ ์ผ > Set
*๋ถ์๋ฒํธ๋ฅผ ๋ฐ์ ์ฌ์๋ฒํธ,์ฌ์๋ช ์กฐํํ๋ ์ผ method์์ฑ
public List<VO> selectJob(int deptno)
์ฌ๋ฌ ์ปฌ๋ผ๋ค์ ๊ฐ์ธ ๋ณตํฉ๊ฐ, ๋ช๊ฐ์ธ์ง ๋ชจ๋ฅด๋ ๊ฐ๋ค์ ๋ฌถ์ด์ ๋ฐํ
VO: ์ฌ๋ฌ ๊ฐ์ ์ปฌ๋ผ๊ฐ / List: ์ฌ๋ฌ ๊ฐ์ ๋ ์ฝ๋ ์กฐํ
์ฌ๋ฌ ์ปฌ๋ผ์ ๊ฐ๋ค(์กฐํ๋ ๋ ์ฝ๋ ํ๋)์ VO์ ์ ์ฅ
๊ฐ์ ์ด๋ฆ์ VO๊ฐ์ฒด๋ฅผ ์ค๋ณต๋์ง์๊ฒ ๊ด๋ฆฌํ๊ธฐ ์ํด List์ ์ถ๊ฐ
*์กฐํ ๊ฒฐ๊ณผ๊ฐ ํ๋์ ํ์ผ ๋
*์ฌ์๋ฒํธ๋ฅผ ๋ฐ์ ์ฌ์๋ช ,๋ถ์๋ฒํธ,๋งค๋์ ๋ฒํธ,์ ์ฌ์ผ ์กฐํํ๋ ์ผ method์์ฑ
pk: ์ปฌ๋ผ์ ๊ฐ์ด ์ ์ผํ๊ณ , null ํ์ฉ ์ํจ
pk๋ก ๊ฒ์ํ๋ฉด ์กฐํ๋๋ ๋ ์ฝ๋๊ฐ ํ๋์ผ ๊ฒ > List ์์
public VO selectJob( int empno) {
*์ฌ์๋ฒํธ๋ฅผ ๋ฐ์ ์ฌ์๋ช ์กฐํํ๋ ์ผ method์์ฑ
Public String selectJob(int empno)
*์ฌ์๋ฒํธ๋ฅผ ๋ฐ์ ๋ถ์๋ฒํธ ์กฐํํ๋ ์ผ method์์ฑ
public int selectJob(int empno)
*PreparedStatement
- ์ฟผ๋ฆฌ๋ฌธ์ ์๊ณ ์๋ ๊ฐ์ฒด
- ์ฟผ๋ฆฌ๋ฌธ์ ๋ฏธ๋ฆฌ ์์ฑํ๊ณ , ๊ฐ์ด ๋ค์ด๊ฐ๋ ๋ถ๋ถ์ bind๋ณ์(?)๋ก ์ฒ๋ฆฌํ์ฌ ์ฟผ๋ฆฌ๋ฌธ์ ๋ณต์ก๋๋ฅผ ๋ฎ์ถ๋ ์ฟผ๋ฆฌ๋ฌธ ์์ฑ๊ฐ์ฒด
- ์ฟผ๋ฆฌ๋ฌธ์ด ๋ฐ๋ณต ์คํ๋๋๋ผ๋(๋๊ท๋ชจ ์๋น์ค ํ๊ฒฝ, ์ ์์ ์์ฒญ์ด ๋ง์ ๋) ํ๋ฒ๋ง ์์ฑํ์ฌ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ณต ์คํ๋๋ ํ๊ฒฝ์์ ํจ์จ ์ข์
- SQLInjection ๊ณต๊ฒฉ์ ์์
์์
์์)
1. ๋๋ผ์ด๋ฒ๋ก๋ฉ
2. ์ปค๋ฅ์
์ป๊ธฐ
3. ์ฟผ๋ฆฌ๋ฌธ์์ฑ๊ฐ์ฒด ์ป๊ธฐ
4. ๋ฐ์ธ๋๋ณ์์ ๊ฐ ์ค์
5. ์ฟผ๋ฆฌ๋ฌธ ์ํ ํ ๊ฒฐ๊ณผ ์ป๊ธฐ
6. ์ฐ๊ฒฐ ๋๊ธฐ
*bind๋ณ์ ( ? )
- ์ฟผ๋ฆฌ๋ฌธ๊ณผ ๊ฐ์ ๋ฌถ์ ๋(binding) ์ฌ์ฉํ๋ ๋ณ์
- ์ฟผ๋ฆฌ๋ฌธ์ ?๋ก ์ฌ์ฉ
- ๋ฐ์ธ๋ ๋ณ์๋ L -> R ์งํํ๋ฉฐ ์์๋๋ก 1๋ฒ์ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง
- ์ปฌ๋ผ๋ช
,ํ
์ด๋ธ๋ช
์ ์ ๋๋ก ๋ฐ์ธ๋ ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์์ > SQL๊ณต๊ฒฉ์ ์์
- ๋ฐ์ธ๋๋ณ์์๋ ๋ฌธ์์ด ์ผ์ง๋ผ๋ ‘๋ฅผ ๋ถ์ด์ง ์์
*์ฝ๋ ์
3. ์ฟผ๋ฆฌ๋ฌธ ์์ฑ๊ฐ์ฒด ์ป๊ธฐ
- ์ฟผ๋ฆฌ๋ฌธ ์์ฑ (Bind๋ณ์ : ๋ฌธ์์ด์ผ์ง๋ผ๋ ‘๋ฅผ ์ฌ์ฉํ์ง ์์)
String insert=“insert into ํ
์ด๋ธ๋ช
(์ปฌ๋ผ๋ช
,,) values(?,?,?,?)”;
PreparedStatement pstmt=con.prepareStatement( insert );
์ฟผ๋ฆฌ๋ ์์ง๋ง ์ด๋ค ๊ฐ์ด ๋ค์ด๊ฐ์ง ๋ชจ๋ฆ(์กฐ๋ฆฝ๋ ๋น ์ด ์ํ)
4. bind๋ณ์์ ๊ฐ ์ค์ ( ์ฟผ๋ฆฌ๋ฌธ์ ๋ฐ์ธ๋๋ณ์๊ฐ ์๋ค๋ฉด ์๋ต)
-์ ์
pstmt.setInt( ์ธ๋ฑ์ค, ์ ์๊ฐ); // setLong()
-์ค์
pstmt.setDouble(์ธ๋ฑ์ค, ์ค์๊ฐ); //setFloat()
-๋ฌธ์์ด
pstmt.setString( ์ธ๋ฑ์ค, ๋ฌธ์์ด ๊ฐ);
-๋ ์ง
pstmt.setDate( ์ธ๋ฑ์ค, java.sqlDate๊ฐ์ฒด);
5. ์ฟผ๋ฆฌ๋ฌธ ์ํ ํ ๊ฒฐ๊ณผ ์ป๊ธฐ
( ์ฃผ์ : ์ฟผ๋ฆฌ๋ฌธ ์คํ ์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฃ์ง ์๋๋ก => error )
๋ถ๋ชจ์ธ Statement์์ ์ ๊ณตํ๋ method(์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ)๋ฅผ ์ฌ์ฉํ์ง ์๋๋ก ์ฃผ์
pstmt.executeUpdate();// insert, update, delete
pstmt.executeQuery(); // select
6. ์ฐ๊ฒฐ๋๊ธฐ
๋์ ๋๋ ๋ค์์๋ถํฐ~
pstmt.close(); , con.close();
*Singleton Pattern
- ์คํ์ค์ธ JVM์์ ํ๋์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด๋๊ณ , ํ๋์ ๊ฐ์ฒด๋ฅผ ์ ์งํ๋ฉฐ, ํ๋์ ๊ฐ์ฒด๋ง ์ฌ์ฉํ๋๋ก ๋ง๋๋ Design Pattern (๊ฐ์ฒด๋ฅผ ํ๋๋ก ์ ์งํ๋ ๊ฐ๋ฐ ํจํด)
- ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ๋ ์ด๋ฏธ ์์ฑ๋์ด์๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ์๊ฐ์ด ์งง์(๋น ๋ฆ)
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ ์ ์์
- JVM์์ ๊ฐ์ฒด๊ฐ ์๋ฉธ๋ ์ดํ์๋(null) ์ฐธ์กฐํ ์ ์์(ํด๊ฒฐํ๋ ์ฝ๋ ์์ฑ)
์์ฑ๋ฒ)
1. ํด๋์ค ์ธ๋ถ์์ ์ง์ ๊ฐ์ฒดํํ ์ ์๋๋ก ๋ง์
(์์ฑ์์ ์ ๊ทผ ์ง์ ์๋ฅผ private์ผ๋ก ๋ง์, ๋ฐ์์ ์ ๊ทผ ๋ถ๊ฐ, ๋ด ํด๋์ค ์์์๋ง ์ ๊ทผ ๊ฐ๋ฅ)
public class Test {
private static Test t; //static์ผ๋ก ์ค์ผ ์ฐธ์กฐ ๊ฐ๋ฅ
private Test(){
}//Test
}//class
2. ๊ฐ์ฒด๋ฅผ ํ๋๋ก ์ ์งํ๊ณ , ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ์ผ์ ํ๋ ๋ฉ์๋ ๋ง๋ค๊ธฐ
public static Test getInstance() { // ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ ๋ฉ์๋, ๊ฐ์ฒดํ ์์ด ํด๋์ค๋ช
์ผ๋ก ๋ฐ๋ก ๋ถ๋ฅผ ์ ์์(static)
//์กฐ๊ฑด-๊ฐ์ฒด๊ฐ ์์ฑ๋์ด์์ง ์์๋๋ง ๋ง๋ค๊ธฐ, ๊ฐ์ฒด๊ฐ ์ฃฝ์์ ๋ ๋ค์ ์ด๋ ค์ ๋ด๋ณด๋ผ ์ ์์
if(t==null) { // ๊ฐ์ฒด๊ฐ ์์ฑ๋์ด์์ง ์๋ค๋ฉด
t = new Test();
}//end if
return t;
}//getInstance