[Backend] JDBC

20210311


  • DML(insert, update, delete)
  • selector
  • jdbc

Table


SQL(structed Query Language)

  • Database 에 있는 정보를 사용할 수 있도록 지원하는 언어
  • 모든 DBMS에서 사용 가능
  • 대소문자는 구분하지 않음

20210311_112533


table 생성

  • 회원의 정보를 저장할 수 있는 member라는 이름의 테이블을 생성해보자.

  • 스키마 : 데이터베이스의 테이블에 저장될 데이터의 구조와 형식을 정의

20210311_112828

table 생성2

  • ER Diagram(ERD)
  • 개체타입과 관계타입을 기본 개념으로 현실세계를 개념적으로 표현는 법.

20210311_113115

table 생성3

  • 회원 정보를 저장할 수 있는 member라는 이름의 테이블을 생성

스키마 참조해 테이블 생성하는 sql 작성

20210311_113148


DML(insert, update, delete)

  • Data manupulation

  • insert 20210311_113242

20210311_113323

20210311_113757

  • update

20210311_113418

20210311_113834

  • delete

20210311_113452 20210311_113853

  • Select

  • 기본 select

20210311_113604

20210311_113917 20210311_114540 20210311_114654

20210311_114719


JDBC

JDBC (JAVA DataBase Connectivity)란?

  • 자바 프로그래밍 언어로 만들어진 클래스와 인터페이스로 이뤄진 API로서 ANSI slq(1999)를 지원

  • sql 문을 실행할 수 있는 함수 호출 인터페이스이다

JDBC 특징

  • DBMS 종류에 독립적인 자바 프로그래밍 가능
  • 데이터베이스가 달라져도 동일한 API 를 사용하게 해준다.(드라이버 및 URL만 수정하면 가능)
  • 자바가 가지는 플랫폼에 독립적이라는 특성과 DBMS 에 독립적인 특성

JDBC 기능

  • 데이터베이스에 연결설정한다
  • SQL 문장을 dBMS에 전송한다.
  • SQL 문장 전송 후 결과를 처리할 수 있게 해준다.

JDBC 인터페이스

  • Database를 만드는 업체에게 제공되는 인터페이스 -업체에게 제공되는 인터페이스를 각각의 dbms업체들이 구현
  • 프로그래머에게 제공되는 인터페이스

JDBC API: java.sql package

connection(interface)
  • 데이터베이스에 대한 하나의 세션을 표현한다.
  • 세션은 하나의클라이언트가 서버에 요청하기 위해 연결을 맺은 상태를 의미

  • DriverManager 클래스의 getConnection() 메서드를 이용하여 얻어올 수 있다.
  • 디폴트로 setAutoCommit(true)로 설정된다.
  • 개발자가 원하는 경우에 commit을 해주고싶거나 트랜잭션이 아주 중요한 부분에 있어서 Rollback처리를 하고자 하는 경우에는 setAutoCommit(false)로 연결설정한다 -단 이경우엔 sql 수행할 때 마다 명시적으로 commit을 호출해야 한다.

Statement(interface)
  • SQL 문장을 실행하고 그것에 대한 결과값을 가져오기 위해 사용

  • public boolean execute(string sql) throws SQLException
  • 특별히 sql 문을 구분하지 않고 dml, query,ddl등을 수행할 수 있다. 결과가 resultSet이면 true이고 결과가 DML이거나 특별한 결과가 없으면 false를 리턴한다.

  • public ResultSet executeQuery(String sql) throws SQLException
  • select를 처리할 때 사용한다

  • public int executeUpdate(String sql) throws SQLException
  • 주로 DML 등의 SQL을 수행시 사용한다.

PreparedStatement(interface)
  • 동일한 SQL 문장이 여러번 반복 수행시 사용하는 객체
  • 대용량의 문자나 바이너리 타입의 데이트를 저장하기 위해서도 사용
  • SQL 문장이 미리 컴파일 되어 PreparedStatement객체에 저장
  • 여러번 반복수행시 clearParameters()메서드를 이용해 statement에 남겨진 값을 초기화 한다.

CallableStatement(interface)
  • 데이터 베이스에 대해 실제 SQL문을 실행하는게 아니라 Stored Procedure를 호출한다.

  • Store Procedure란 연속되는 SQL 문으로 디비에 저장해두고 함수의 호출 처럼 사용한다.

  • 데이터 베이스에 Stored Procedures를 만들어두고 자바에서 호출해 사용할 수 있다.

  • Stored Procedures 사용시 속도의 향상을 기대할 수 있고, 자바 코드에 SQL이 들어가지 않으므로 자바 코드가 SQL에 독립적이 된다.


ResultSet(interface)
  • 쿼리에 대한 결과값 처리
  • ResultSet객체의 커서는 처음 레코드 보다 바로 이전을 가리킨다.
  • next()
    ResultSet객체의 커서를 이동
  • getXXX(index or name) 메서드를 이용해 데이터를 얻을 수 있다.(getString, get int,…)

#### JDBC 프로그래밍 개발순서

  1. JDBC 드라이버 로딩
  2. DBMS 와 연결(Connection 생성)
  3. SQL 실행 준비(statement, preparedStatement생성)
  4. SQL 실행
    • DML(insert, update, delete)
    • Query(select)
  5. DBMS 연결 끊기

  1. JDBC 드라이버 로딩
    • 데이터 베이스와의 접속을 오픈하기 위해 애플리케이션의 JVM 안으로 특정 드라이버 클래스를 적재
    • class.forName(Driver ClassName);

20210311_122224


  1. DBMS 와 연결(Connection 생성)
  • DriverManager 클래스를 이용해 URL 형태로 주어진 디비에 대한 접속을 요청
  • Conncection con = DriverManager.getConnection(URL<dbid,dbpassword);
  • JDBC url은 드라이버 고유 방식으로 개별 데이터베이스를 식별.

20210311_122401


  1. SQL 실행 준비(statement, preparedStatement생성)
  • String sql = “insert, update, delete,select…”;
  • Statement생성 -statement stmt = conn.createStatement();
  • preparedStatement 생성 -preparedStatement pstmt = connprepareStatement(sql);

  1. SQL 실행
    • DML -int cnt = stmt.executeUpdate(sql);
    • select -ResultSet rs = stmt.executeQuery(sql);
  • PreparedStatement

  • sql문의 치환변수 값 설정: pstmt.setXXX(index,val):
  • DML -int cnt = pstmt.executeUpdate() ; -select -resultSet rs = pstmt.executeQuery();

20210311_122729


  1. DBMS 연결 끊기
  • 모든 작업 끝난 후엔 ResultSet, Statement(PreparedStatement), Conncection객체의 close() 메서 이용해 작업을 종료한다(연결한 역순으로 종료)

  • Connection은 상당한 Overhead를 가져온다. 따라서 최적화 된 상태를 유지 하기 위해서는 반드시 Connection을 닫아줘야 한다.

20210311_123438


관계형 데이터 베이스

  • 2차원의 배열형태 표에 저장하는 거

STOP propergation 이란?

20210311_184413

ajax 보충

ajax는 최근 웹페이지 50프로 훨씬 넘어감. 옛날에는 웹 쓰면 폼 전송했는데 요새 웹 쓰면 자세히 보면 하나의 페이지에서 머물면서 동작하는걸 알게 됨(대표적인게 결제) 한 화면에서 동작하고 넘어가고 이게 대부분 다 ajax에서 어떻게 파싱해서 사용할 수 있는가!? 를 알아보자.

DOM으로 읽어들여서 탐색한다. DOM 객체 같은거 이런걸 편하게 쓰려면 제이쿼리에 넣어서 썻었다는 거. 이녀석 탐색하려고 찍어보니 쟤는

앞에 $ 해서 뭐 되어있는건 제이쿼리. 20210311_190213 꺽쇠로 뭐라 되어있으면 DOM객체. 20210311_190223

그리고 유효성 검사 each 이런거 벗어나는 거도 중요

function(idx,item){
						//console.log(item);
						if(item.id ===id && item.pass===pass){}
						//login성공
						console.log("로그인 성공"+item.name);	//첫번째에서 성공하면 끝나야(두번째 else 까지 갈 필요가 업다.)
						return;  //
					}else{}
				}
			/* type:"",
			data:"",

여기서 리턴하면 콜백을리턴함. 우리가 벗어나야 할 건 반복문을 리턴해야 함.

promise 패턴은 나중에 배우게 됨 콜백헬이라던가 이런거.





© 2021.03. by yacho

Powered by github