JDBC 기초

Mia Lee·2021년 12월 21일
0

JSP

목록 보기
15/22

ERROR 1046 (3D000): No database selected
=> 데이터베이스 선택 안됐을 때
=> use study_jsp2

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IN)' at line 1
=> SQL 구문 오류
=> right syntax to use near 'IN)' at line 1 이 부분에 표시된 '' 사이의
문법에 오류가 발생했다는 의미

JDBC(Java DataBase Connectivity)

  • 데이터베이스에 접근하여 작업을 수행하기 위해
    필요한 클래스 및 인터페이스들의 모음집
    => 자바 진영에서 필요한 클래스들을 API 형태로 미리 제공하고 있음(내장되어 있음)
  • 데이터베이스 제조사와 관계없이 개발자가 공통적인 방법으로 각 데이터베이스를
    다룰 수 있도록 해 줌
  • 또한, 각 데이터베이스 제조사에서 해당 데이터베이스에 접근하기 위한
    드라이버 등을 jar 파일로 별도로 제공
    => ex) MySQL 드라이버 : mysql-connector-java-x.x.xx.jar 파일 필요(mysql.com)
    Oracle 드라이버 : ojdbcX.jar 파일 필요(java.oracle.com)

API(Application Programming Interface)

  • 어떤 기능을 사용하는데 필요한 클래스 및 인터페이스의 모음집
  • 라이브러리(Library) 라고도 함

    < MySQL 연동을 위한 준비 작업 과정 >
  1. MySQL-connector-java-x.x.xx.jar 파일 다운로드 후 프로젝트 내에 복사
    => 단, jsp(웹프로젝트)의 경우 WEB-INF 폴더의 lib 폴더에 복사
  2. 복사된 jar 파일 우클릭 - Build Path - Add to Build Path
    => 빌드 패스 등록 시 Referenced Libraries 항목에
    mysql-connector-java-x.x.xx.jar 파일 등록됨

< MySQL 연동 작업 과정 - JDBC 연결 4단계 >
1. JDBC 드라이버 클래스 로드

  • java.lang 패키지의 Class 클래스의 static 메서드인 forName() 메서드를 호출하여
    메서드 파라미터로 드라이버 클래스가 위치한 패키지명과 클래스명을 문자열로 전달
  • MySQL 의 경우 com.mysql.jdbc 패키지 내의 Driver.class 파일을 지정(클래스명만 사용)
    < 기본 문법 >
    Class.forName("드라이버클래스");
    ex) Class.forName("com.mysql.jdbc.Driver");
  1. DB 연결(= 접속)
    • java.sql 패키지의 DriverManager 클래스의 static 메서드인 getConnection() 메서드를 호출하여
      메서드 파라미터로 DB 접속 URL, 접속 계정, 패스워드를 문자열로 차례대로 전달
      < 기본 문법 >
      DriverManager.getConnection("URL", "계정명", "패스워드);
    • 첫번째 파라미터의 URL 부분은 DB 접속에 필요한 URL 관련 정보를 입력
      => MySQL 형식은 "jdbc:mysql://DB접속주소:포트번호/DB명" 으로 구성되는데
      이 때, DB 접속 주소는 서버의 주소를 입력하며, 자신의 컴퓨터를 지정할 경우 localhost 사용함
      또한, 포트번호는 MySQL 의 경우 기본 포트번호 3306번, 오라클은 1521번 사용
      < 오류 발생하는 예시 >
      1) java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
      => 주로, 아이디 또는 패스워드가 틀렸을 때 발생하는 오류이며
      가끔 MySQL 서비스가 중복으로 실행되어 있어서 다른 서비스에 접근하는 경우에 발생하기도 함
      (포털사이트에서 "MySQL 강제종료 명령어" 검색하여 MySQL 서비스 중지 후 다시 실행)
      2) javax.servlet.ServletException: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database 'study_jsp'
      => 데이터베이스명이 틀렸을 때(또는 존재하지 않을 때) 발생하는 오류
      3) javax.servlet.ServletException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
      => 접속 주소 또는 포트번호가 틀렸을 때 발생하는 오류
  1. SQL 구문 작성 및 전달
    • 1단계와 2단계 과정을 통해 DB 에 접속된 상태에서
      접속 정보를 관리하는 Connection 타입 객체를 통해 데이터베이스에 접근하여 작업 수행 가능
      (=> 반드시 2단계 과정에서 Connection 타입 변수에 객체를 리턴받아 저장되어 있는 상태여야함)
    • Connection 객체의 prepareStatement() 메서드를 호출하여 SQL 구문 전달 작업 수행
      => 파라미터 : 실행할 SQL 구문 문자열
      => 리턴타입 : java.sql.PreparedStatement
  1. SQL 구문 실행 및 결과 처리
    1) 3단계에서 리턴받은 PreparedStatement 객체의 executeXXX() 메서드를 호출하여 SQL 구문 실행
    => 수행하려는 SQL 구문의 종류에 따라 다른 메서드를 호출하며, 리턴타입도 달라짐
    1-1) executeUpdate() : DB 에 조작을 가하는(= 변경이 발생) 쿼리를 실행하는 용도의 메서드
    주로 DML 중 INSERT, UPDATE, DELETE 나 DDL(CREATE, ALTER, DROP) 을 실행
    리턴값으로 int형 값이 리턴되며, 조작 후 영향을 받은 레코드 수 리턴됨
    1-2) executeQuery() : SELECT 구문을 실행하는 용도의 메서드
    2) 실행 후 리턴받은 결과값을 사용하여 결과 처리

0개의 댓글