sql기초지식-8 & JDBC

아기코딩단2·2022년 3월 19일
0

DBMS 에 접근하려면 항상 DBMS client 필요함
DBMS 의 protocol 을 공개하지 않음(보안상의 이유) => 그 대신에 DBMS API 제공함 근데 이 시스템이 c/ c++ 로 이루어져있음 그대신에 JNI에 있는데 이건 OS에서 종속적임 리눅스 다르고 윈도우 다르고

ODBC API로 만들어 진 게 ODBC Driver임(DBMS 마다 메소드 호출 규칙을 통일함)
DBMS API 는 Vender API(Native API) 임

JDBC API 구현한 게 JDBC Driver임

type1을 제외하고는 JDBC driver를 설치해야함
type3는 중계서버가 존재함

드라이버매니저에게 연걸할 DBMS 의 정보를 주면 해당 DBMS 의 정보를 주면 해당 DBMS 의 Driver 객체를 찾아 connect()를 호출한다.

=> DriverManager는 등록된 java.sql.Driver 구현체 중에서
// jdbc url에 지정된 Driver 객체를 찾는다.
// 예) MariaDB: org.mariadb.jdbc.Driver 클래스의 객체
// => DB 연결을 Driver 구현체에게 위임한다.
// 즉, Driver 객체의 connect()를 호출한다.
// => Driver 구현체(org.mariadb.jdbc.Driver 객체)는 DBMS와 연결한 후
// 소켓 정보를 갖고 있는 java.sql.Connection 구현체를 리턴한다.

자원해제
=> 파일과 마찬가지로 DBMS에 연결한 후 더이상 사용하지 않으면 연결을 해제해야 한다.
=> close() 하지 않으면 일정시간을 유지함(timeout에 설정된 시간) garbage가 되어 thread 가 메모리를 차지하고 있음 grabage 상태에서 자원의 한계를 뛰어넘는 요청이 들어오게 되면 거부됨 큰 프로그램을 개발할 경우에는 자원을 항상 해줘야함\

try(여기에 넣어두면 자동 자원해제)

int count = stmt.executeUpdate( => 이걸로 JDBC 로 insert 가능
"insert into x_board(title,contents) values('제목10','내용')" 여기에 세미콜론 안붙여도 됨(안붙이는 거 추천));
System.out.printf("%d 개 입력 성공!", count);

ResultSet?
=> 결과가 아니다! 서버에서 결과를 가져오는 일을 할 객체이다.
=> 즉 서버의 select 실행 결과를 가져올 때 사용하는 도구이다.

System.out.printf("%d, %s, %s, %s, %d\n",
rs.getInt("board_id"),
rs.getString("title"),
rs.getString("contents"),
rs.getDate("created_date"),
rs.getInt("view_count"));
=> 이런식으로 가져올 때 컬럼명을 주면 됨 번호대신 사용 이게 좋음!!

executeUpdate 를 통해서 insert, delete, update 다 하는 거임

변경된 record의 개수를 리턴함
FK랑 걸려있으면 삭제 불가

profile
레거시 학살자

0개의 댓글