JDBC란
자바 언어로 다양한 종류의 관계형 데이터베이스에 접속하고
SQL문을 수행하여 처리하고자 할 때 사용되는 표준 SQL 인터페이스 API이다.
접속하려는 DBMS 서버에 따라서 알맞는 JDBC 드라이버가 필요하다.
SQL문을 수행하여 처리하고자 할 때 사용되는 표준 SQL 인터페이스 API이다.
접속하려는 DBMS 서버에 따라서 알맞는 JDBC 드라이버가 필요하다.
소개를 시작하기에 앞서,
1) MySQL 사용에 필수적인 mysql-connector-java-버전-bin.jar 파일을 (인텔리제이 기준)
프로젝트 구조 - 라이브러리 - +자바 를 통해 코딩할 모듈에 추가시켜준다.
2) MySQL에, 테이블을 삽입할 데이터베이스와 계정(id, password)을 등록해준다. :
본 포스팅에서는 DB 이름 : dev, id : dev, pw : dev로 사용할 예정
JDBC 기본적인 연결 후 사용하기
JDBC를 본격적으로 사용하기 위해 반드시 거쳐야 하는 단계들을 먼저 언급하겠다.
1) import java.sql.*;
2) JDBC 드라이버 로딩
가장 먼저 해야할 일은 데이터베이스 작업을 위해
준비된 JDBC드라이버 파일을 사용할 수 있도록 메모리에 로드시키는 일이다.
준비된 JDBC드라이버 파일을 사용할 수 있도록 메모리에 로드시키는 일이다.
Class.forName("com.mysql.jdbc.Driver");
코드로 구현하며,
Class.forName()의 인자값만 바꿔주면 되는 아주 간단한 사안이다.
Class.forName()의 인자값만 바꿔주면 되는 아주 간단한 사안이다.
Class.forName()으로 인해
JDBC 드라이버 파일 내의 com.mysql.jdbc.Driver 클래스가 동적으로 로딩될 때
자동으로 JDBC 드라이버 객체가 생성되어
DriverManager에 등록되어 준비가 완료된다.
JDBC 드라이버 파일 내의 com.mysql.jdbc.Driver 클래스가 동적으로 로딩될 때
자동으로 JDBC 드라이버 객체가 생성되어
DriverManager에 등록되어 준비가 완료된다.
com.mysql.jdbc.Driver 클래스는 드라이버 인터페이스를 구현한 클래스이다.
이 코드는 프로그램 구현 시 한 번만 필요하다.
이 코드는 프로그램 구현 시 한 번만 필요하다.
3) DBMS 서버(MySQL)와의 연결 작업을 위한 Connection 객체 생성
JDBC 드라이버가 사용할 준비가 되었다면
첫번째 DB작업으로 DB서버와의 연결을 시켜준다.
첫번째 DB작업으로 DB서버와의 연결을 시켜준다.
Connection conn = DriverManager.getConnection(url, id, password);
이 코드로 하여금 mysql과의 연결 작업을 완료할 수 있다.
getConnection 메소드의 파라미터 값은 다음과 같다.
- String url : 접속할 서버의 URL이며 맨 마지막에 DB이름을 넣어준다.
- String id : DB서버에 로그인할 계정
- String password : DB 서버에 로그인할 비밀번호
DriverManager.getConnection(url, id, password); 은
실제 자바 프로그램과 데이터베이스를 네트워크상에서 연결시켜주는 역할을 하며,
연결에 성공했을 시 DB와 연결된 상태를 Connection 객체 conn으로 표현하여 반환한다.
바로 밑에서 이 객체를 통해 쿼리를 날리는 statement를 작성할 수 있다.
실제 자바 프로그램과 데이터베이스를 네트워크상에서 연결시켜주는 역할을 하며,
연결에 성공했을 시 DB와 연결된 상태를 Connection 객체 conn으로 표현하여 반환한다.
바로 밑에서 이 객체를 통해 쿼리를 날리는 statement를 작성할 수 있다.
4) Statement 객체를 생성하여 질의 수행
Statement 객체는
자바프로그램이 DB쪽으로 SQL query문을 전송하고,
DB가 처리된 결과를 다시 자바프로그램쪽으로 전달할 수 있도록 돕는 객체이다.
자바프로그램이 DB쪽으로 SQL query문을 전송하고,
DB가 처리된 결과를 다시 자바프로그램쪽으로 전달할 수 있도록 돕는 객체이다.
Statement stmt = conn.createStatement();
코드를 통해 생성한다.
5) SQL문 실행 및 결과 반환
SQL 쿼리 실행은 코드를 통해 보이겠으며,
결과 반환은 ResultSet 객체를 통한다.
결과 반환은 ResultSet 객체를 통한다.
이 객체는 주로 조회 기능에 사용되며,
SQL 쿼리의 실행 결과를 ResultSet으로 받아서
정보를 저장할 오브젝트(JavaBean, DTO)에 옮겨준다.
SQL 쿼리의 실행 결과를 ResultSet으로 받아서
정보를 저장할 오브젝트(JavaBean, DTO)에 옮겨준다.
6) 자원해제
DB 관련 처리 작업을 하며 사용한 리소스들을 메모리에서 해제시켜주기.
-> 최근 사용했던 객체부터
이제 아래 코드로 하여금 JDBC 연결을 테스트해보겠다.
필자는 WARN: Establishing SSL connection without server's identity verification is not recommended. 라는 경고문이 나왔기 때문에 String url = "jdbc:mysql://localhost/dev?useSSL=false"; 코드를 덧붙여 해결하였다.
혹시,
conn = DriverManager.getConnection(url, "dev", "dev"); 코드로 인해
SQLException이 발생하였다면, MySQL에서 서버가 제대로 작동하고 있는지,
올바른 DB이름과 id, password를 기입하였는지를 체크해보자.
SQLException이 발생하였다면, MySQL에서 서버가 제대로 작동하고 있는지,
올바른 DB이름과 id, password를 기입하였는지를 체크해보자.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConnection {
public static void main(String args[]){
Connection conn = null;
try{
//1. 드라이버 로딩 : mysql 드라이버 로딩
Class.forName("com.mysql.jdbc.Driver");
//드라이버들이 읽히기만 하면 자동 객체가 생성되고 DriverManager에 등록된다.
//2. mysql과 연결시키기
String url = "jdbc:mysql://localhost/dev?useSSL=false";
conn = DriverManager.getConnection(url, "dev", "dev");
System.out.println("Successfully Connection!");
}
catch(ClassNotFoundException e){
System.out.println("Failed because of not loading driver");
}
catch(SQLException e){
System.out.println("error : " + e);
}
finally{
try{
if(conn != null && !conn.isClosed()){
conn.close();
}
}
catch(SQLException e){
e.printStackTrace();
}
}
}
}
테이블을 생성하는 Query 보내기
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
//**student 테이블 생성하기**
//create table student(
// id int,
// name varchar(20),
// grade int
//);
public class TableCreating {
public static void main(String[] args){
Connection conn = null;
Statement stmt = null;
String url = "jdbc:mysql://localhost/dev?useSSL=false";
String id = "dev";
String pw = "dev";
try{
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, id, pw);
System.out.println("Successfully Connected!");
//DB와 연결된 conn 객체로부터 Statement 객체 획득.
stmt = conn.createStatement();
//query 만들기
StringBuilder sb = new StringBuilder();
String sql = sb.append("create table if not exists student(")
.append("id int,")
.append("name varchar(20),")
.append("grade int")
.append(");").toString();
//query문 날리기
stmt.execute(sql);
}
catch(ClassNotFoundException e){
e.printStackTrace();
}
catch(SQLException e){
e.printStackTrace();
}
finally{
try{
//자원 해제
if(conn != null && !conn.isClosed())
conn.close();
} catch(SQLException e){
e.printStackTrace();
}
}
}
}
위에서는 JDBC API가 만들어내는 예외에 대해 일일이 예외처리를 해주었지만,
코드가 길어지고 요구되는 기능이 많아질수록 불필요한 코드를 잡아내는 것이 중요하기 때문에,
예외를 던져주는 방법을 사용하는 것도 나쁘지 않다.
코드가 길어지고 요구되는 기능이 많아질수록 불필요한 코드를 잡아내는 것이 중요하기 때문에,
예외를 던져주는 방법을 사용하는 것도 나쁘지 않다.
위 코드에서는 Statement 객체를 던지는 방법으로 stmt.execute(sql); 을 사용하였다.
Statement 객체를 던지는 방법에는 3가지가 있다.
- stmt.execute() : 테이블 생성, 수정, 삭제 등 DB 관리 명령어에 주로 사용.
- stmt.executeUpdate() : 레코드 삽입, 수정, 삭제 등 데이터 관리 명령어에 주로 사용하며,
SQL문이 실행된 후 그에 영향을 받은 레코드의 갯수를 int형으로 반환하는 메소드. - stmt.executeQuery() : Select한 결과 값들을 ResultSet 객체에 담아 반환하며,
레코드나 테이블 조회 류의 명령에 사용.
위 코드를 실행한 뒤 MySQL을 확인해 보면 다음과 같이 테이블이 생성되어있다.

'JAVA' 카테고리의 다른 글
Tomcat에서 MSSQL JNDI 설정 (0) | 2022.06.27 |
---|---|
jsp에서 자기가 만든 class import 하기 (0) | 2022.06.26 |
[Java] String, StringBuffer, StringBuilder 차이 및 장단점 (0) | 2022.06.26 |