Web_Back-end/JDBC(10)
-
[JDBC] 2021.01.05 day_49 transaction처리
◎ transaction 테이블 생성 create table transaction1(name varchar2(30), addr varchar2(30)); create table transaction2(name varchar2(30), addr varchar2(20)); DB작업은 transaction1 테이블과 transaction2 테이블에 모두 추가 성공했을 때에만 commit을 수행하고 그렇지 않다면 작업을 취소한다 insert into transaction1(name, addr) values ('김포비', '서울시동작구'); insert into transaction2(name, addr) values ('김포비', '서울시동작구'); select * from transaction1; select..
2021.01.05 -
[JDBC] 2021.01.05 day_49 CLOB 생성, java에서 사용
◎ CLOB : Charactor LargeObject 4GByte 의 문자열을 저장할 때 조회할 때 별도의 Stream을 연결하여 조회한다 ○ 사용법 1. local 사용 local에서는 가능하나, server에 올라가면 불가능하다 while(rs.next()){ String str = rs.getStrin("clob 컬럼"); 2. server 사용 1. clob를 얻는다 Clob clob = rs.getClob("clob컬럼명"); 2. Clob에서 문자열 읽기스트림을 얻고, 줄단위로 읽어들이는 기능을 가진 스트림(BufferedReader)과 연결한다 (기능 확장) BufferedReader br = new BufferedReader( clob.getCharactorStream() ); 3. Bu..
2021.01.05 -
[JDBC] 2021.01.05. day_49 Procedure사용 _ update, delete, insert, select
○ 주의할 점 * update, delete, select 사용하는 컬럼명과 in parameter명을 다르게 설정 ※ insert test_proc 테이블에 사원번호, 사원명, 연봉 정보를 입력 1. 프로시저 코딩 create or replace procedure insert_proc(empno in number, ename in varchar2, sal in number, CNT OUT NUMBER, MSG OUT VARCHAR2) IS I_EMPNO NUMBER; BEGIN I_EMPNO := EMPNO; IF EMPNO > 9999 THEN I_EMPNO := 0; END IF; INSERT INTO TEST_PROC (EMPNO, ENAME, SAL, HIREDATE) VALUES (I_EMPN..
2021.01.05 -
[JDBC] 2021.01.04. day_48 CallableStatement, Procedure
◎ CallableStatement DBMS에서 제작된 Procedure를 호출하기 위해 만들어진 객체 PreparedStatement의 하위 interface(bind변수를 사용) 사용법 // 1. 드라이버 로딩 2. 커넥션 얻기 // 3. 쿼리문 생성객체 얻기 String callProcedure = "{ call 프로시저명(바인드변수,,,) }"; CallableStatement cstmt = con.prepareCall( 쿼리문 ); // 4. 바인드 변수에 값 설정 - in parameter : procedure안에 값을 넣는 것 cstmt.setXxxx(바인드변수의인덱스, 값-argument); - out parameter : procedure가 처리한 결과를 받는 것 cstmt.registe..
2021.01.04 -
[JDBC] 2021.01.04. day_48 ResultSetMetaData, java swing으로 view생성하고, 테이블의 컬럼 정보 조회하기
◎ ResultSetMetaData DataDictionary를 사용하지 않고 조회하는 테이블의 컬럼정보를 얻을 때 사용하는 객체 연결 가능한 모든 DBMS에서 정보를 얻을 수 있다 사용법 1. select 쿼리를 실행한 ResultSet에서 ResultSetMetaData 를 얻는다 ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2"); //1. select 쿼리를 실행한 ResultSet에서 ResultSetMetaData 를 얻는다 ResultSetMetaData rsmd = rs.getMetaData(); ※ ResultSetMetaData method 사용하기 컬럼의 갯수 int count = rsmd.getColumnCount(); 컬..
2021.01.04 -
[JDBC] 2020.12.30. day_47 OWASP , SQL Injection, SQL Injection 방어하기
◎ OWASP OWASP Open Web Application Security Project 기간 내 발생한 보안사고를 정리한 프로젝트 owasp.org 으로 접속가능 ○ SQL Injection _ Statement를 사용하면 발생할 수 있다 SQL Injection zipcode 파일 : 상단글 참조 zipcode 파일을 통해 역으로 테이블, 컬럼들, 정보를 찾아보기 테이블 명 얻기 '1-- 'union select tname from tab-- 'union select tname, '0' , '0', '0', '0' from tab-- 컬럼명 얻기 select * from user_tab_cols; ' union select column_name, '0', '0', '0', '0' from user..
2020.12.30 -
[JDBC] 2020.12.29. day_46 PreparedStatement, Singleton pattern
◎ PreparedStatement PreparedStatement 쿼리문이 반복 실행 되더라도 쿼리문을 한번만 생성하고 값만 변경하여 실행 바인드 변수에 쿼리문 작성시에 문자열을 감싸는 ' (작은따옴표) 를 사용하지 않는다 쿼리문에 값을 넣어주는 bind variable( ? ) 을 사용한다 동일 쿼리문이 여러번 실행될 때 Statement보다 효율이 좋다 SQLInjection 공격이 발생하지 않는다 bind variable( ? ) 쿼리문에 값을 넣어주는 역할 컬럼명, 테이블명에 대해서는 바인드변수를 사용할 수 없다 _ 값부분만 사용가능하다 method setInt(바인드변수인덱스, 정수 값) setString(바인드변수인덱스, 문자열 값) setDate(바인드변수인덱스, 날짜 값) ○ Prepar..
2020.12.29 -
[JDBC] 2020.12.29. day_46 ResultSet 을 사용하여 select 해보기(모든컬럼, where 사용 부분컬럼)
DB 연동 ◎ ResultSet ※ _ select 조회 : ResultSet의 사용 1. select 모든 컬럼을 조회할 때 1 2 3 4 5 6 7 8 9 10 11 12 13 String sql = "select deptno, dname, loc from dept"; ResultSet rs = stmt.executeQuery(sql); //rs가 cursor의 제어권을 담는다 int deptno = 0; String dname = ""; String loc =""; while( rs.next() ){ //next() : pointer(cursor) 의 다음(아래)에 레코드가 존재하는지 반환 deptno = rs.getInt("deptno"); //getInt() :..
2020.12.29 -
[JDBC] 2020.12.28. day_45 VO, JDBC 연동 클래스 작성해보기
※ JDBC연동을 위해 클래스를 작성해보자 : 예시 - cp_dept table ◎ VO 란 ? VO Value Object 값을 저장하고, 사용할 목적으로 제작하는 클래스 ( 변경 X ) 값을 변경하지 않고 그대로 사용한다 여러개의 분할된 값을 묶어서 관리하기 위해 작성 분할된 값이 묶여서 어떤 값으로 사용되는지 가독성 향상 DTO(Data Transfer Object) : 값변경이 가능, 객체간의 값을 전달하기 위한 객체 ○ VO 작성규칙 Framework 사용 X 매개변수 있는 생성자를 만든다 (개발자가 VO를 생성하여 값을 넣어준다) Framework 사용 O 매개변수 있는 생성자를 만들지 않는다 (Framework에서 VO를 생성하여 setter method를 호출하고 값을 넣어준다) 1. 클래..
2020.12.28 -
[JDBC] 2020.12.24. day_44 JDBC 정의와 이해 , 연동순서, 연동연습하기 / Driver 정의 / build path, class path
◎ JDBC (Java DataBase Connectivity) JDBC ( Java DataBase Connectivity ) Java에서 DBMS를 사용하기 위한 (==연동) 방법을 제공하는 저수준의 API Driver loading 방식을 사용하여 Driver 만 제공된다면 모든 DBMS와 연결가능 java.sql package에서 관련 클래스를 제공 ○ Driver Driver Driver는 DB 제조사에서 Driver를 제작, 배포 (Java에서 제작, 배포하는 것이 아니다) JDBC-ODBC Driver만 Java에서 제공 Driver는 4가지 형으로 제공 1. JDBC-ODBC Bridge Driver Type 1 windows 운영체제에서만 사용되는 드라이버 Java에서 제공 DB연동 관리..
2020.12.24