본문 바로가기

JAVA

JAVA에서 Database(MySQL) 연결하기 : JDBC 사용법

1. JDBC란?

Java DataBase Connectivity : 자바 언어로 다양한 종류의 관계형 데이터베이스에 접속하고 SQL문을 수행하여 처리하고자 할 때 사용되는 표준 인터페이스 SQL 인터페이스 API이다.

 

DBMS마다 DB 사용법이 다 다를 수 있기 때문에 JDBC에서 제공하는 API로 공통 조작이 가능하고

각 DB벤더들( Oracle, Mysql 등.. )은 각자의 DBMS에 맞게 구현을 해놓은 상태입니다.

사용자는 특정 DBMS를 사용하기 위해, 각 벤더에서 개발해놓은 드라이버를 설치하면 됩니다.

 

2. 이클립스에서 MySQL JDBC 연결

MySQL 설치하면서 자연스럽게 드라이버가 설치되었기 때문에 연결순서만 정리하겠습니다.

 

1. 프로젝트 생성

2-1. 프로젝트 폴더 우클릭 -> Properties -> Java Build Path

2-2. 프로젝트 폴더 우클릭 -> Build Path -> Configure Build Path

(2-1, 2-2 둘 중에 어떤 걸로 하셔도 상관 없습니다.)

3. Libraries -> Classpath-> Add Library ... -> User Library -> User Libraries

4. New 클릭하여 아무렇게나 이름을 작성합니다. (저는 Web App Libraries로 만들었습니다.)

5. 생성된 Library를 클릭하고 Add External JARs 클릭

6. 설치된 jar 파일 mysql-connector-java-버전-bin.jar 파일을 찾아서 클릭

(저는 이 경로에 있었습니다. C:\Program Files (x86)\MySQL\Connector J 8.0)

 

완료된 상태

3. JDBC 사용 방법

1. import java.sql.*;

2. 드라이버를 load
3. mysql 연결을 위한 Connection 객체 생성
4. PreparedStatement 객체를 생성하여 질의 수행
5. 질의 결과가 있다면, ResultSet 객체를 생성하여 결과 저장
6. 추가 로직 실행 후, JDBC 연결 과정에서 필요했던 객체들을 close

 

Selcet 문

package jdbcTest;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBConnect01 {
	
	public static void main(String[] args) {
		try {
			// 1. 드라이버 로딩
			// 드라이버 인터페이스를 구현한 클래스를 로딩
			// mysql, oracle 등 각 벤더사 마다 클래스 이름이 다르다.
			// mysql은 "com.mysql.jdbc.Driver"이며, 이는 외우는 것이 아니라 구글링하면 된다.
			// 참고로 이전에 연동했던 jar 파일을 보면 com.mysql.jdbc 패키지에 Driver 라는 클래스가 있다.
			Class.forName("com.mysql.cj.jdbc.Driver");
			
			// 2. 연결하기
			// 드라이버 매니저에게 Connection 객체를 달라고 요청한다.
			// Connection을 얻기 위해 필요한 url 역시, 벤더사마다 다르다.
			// mysql은 "jdbc:mysql://localhost/사용할db이름" 이다.
			String url = "jdbc:mysql://localhost/?characterEncoding=UTF-8&serverTimezone=UTC";
			String user = "root";
			String passwd = "1234";
			
			// 4. SQL 쿼리 작성
			String sql = "select * from oneline";
			
			// 3. 쿼리 수행을 위한 Statement 객체 생성
			PreparedStatement pstmt = null;
			PreparedStatement pstmt2 = null;
			
			Connection con = DriverManager.getConnection(url, user, passwd);
			
			// 2-1. 여기서는 사용할 DB를 따로 지정해봤다.
			pstmt2 = con.prepareStatement("use testsql");
			pstmt2.executeLargeUpdate();
			
			// 5. 쿼리 수행
			pstmt = con.prepareStatement(sql);
			ResultSet result = pstmt.executeQuery(); // select문은 executeQuery()를 사용한다.
			
			// result 안에 내용이 있으면
			while(result.next()) {
				int no = result.getInt("no");
				String memo = result.getString("memo");
				String wdate = result.getString("wdate");
				
				System.out.println(no + " : "  + memo + " : (" + wdate + ")" );
			}
			
			// 작업이 끝나면 생성한 순서의 역순으로 메모리를 해제
			result.close();
			pstmt.close();
			pstmt2.close();
			con.close();
			System.out.println("DB조회 성공");
		}
		catch (SQLException e) {
			System.out.println("DB연결 실패");
			System.out.print("사유 : " + e.getMessage());
			}
		catch (ClassNotFoundException e) {
			System.out.println("Driver 클래스 없음");
			System.out.print("사유 : " + e.getMessage());
			e.printStackTrace();
		}
	}
	
}

 

Insert, Delete 문

package jdbcTest;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBConnect02 {
	public static void main(String[] args) {
		try {
			// 1. 드라이버 로딩
			Class.forName("com.mysql.cj.jdbc.Driver");
			
			String url = "jdbc:mysql://localhost/testsql?characterEncoding=UTF-8&serverTimezone=UTC";
			String user = "root";
			String passwd = "1234";
			String sql = "insert into oneline(memo) values(?)";
			PreparedStatement pstmt = null;
			
			Connection con = DriverManager.getConnection(url, user, passwd);
			//sql = "delete form oneline where no = 4";
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, "안녕하세요");
			pstmt.executeUpdate();
			
			pstmt.close();
			con.close();
			System.out.println("DB조회 성공");
		}
		catch (SQLException e) {
			System.out.println("DB연결 실패");
			System.out.print("사유 : " + e.getMessage());
			}
		catch (ClassNotFoundException e) {
			System.out.println("Driver 클래스 없음");
			System.out.print("사유 : " + e.getMessage());
			e.printStackTrace();
		}
	}
}

 

참조 : victorydntmd.tistory.com/145

'JAVA' 카테고리의 다른 글

Abstract (추상 클래스) 와 Interface (인터페이스)의 차이  (0) 2021.04.30