- JDBC란 무엇인가?
JDBC(Java Database Connectivity)는 자바에서 DB에 접속할 수 있도록 하는 자바의 API이다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다.
자바와 DBMS 사이에서 통역을 해주는 통역사의 역할을 수행한다.
JDBC를 사용하면 개발자는 DBMS를 신경쓰지 않고 JDBC만을 사용해서 개발을 할 수 있게 된다.
JDBC를 사용하기 위해서는 해당 DBMS의 JDBC 드라이버를 사용해야 한다.
- JDBC Driver
mac을 사용하고 있기 때문에
https://dev.mysql.com/downloads/connector/j/
MySQL :: Download Connector/J
MySQL Connector/J 8.0 is highly recommended for use with MySQL Server 8.0, 5.7 and 5.6. Please upgrade to MySQL Connector/J 8.0.
dev.mysql.com
해당 사이트에서
Platform Independent를 선택해서 다운 받아준다.
다운로드 받은 후 압축을 풀어둔다.
이제 실습을 하기 위한 Intellij를 열어주자.
새로운 프로젝트를 생성하고 Project Structure에서 다운로드 받고 압축을 해제했던 connector를 추가해준다.
OK를 누르면 이제 JDBC를 사용할 준비가 된 것이다.
- JDBC 기본코드
우선은 MySQL에서 받은 드라이버를 로드해야 한다.
그렇기에 드라이버를 로드하는 것이 가장 첫번째 코드이다.
Class.forName("com.mysql.cj.jdbc.driver");
이 코드로 MySQL 드라이버를 로드하자.
이렇게 드라이버를 로드하면 메모리에 잡히게 된다.
이 드라이버를 연결해 연결 객체를 얻어야 한다.
Connection connection = DriverManager.getConnection(...);
현재 로컬에 있는 데이터베이스에 연결할 것이기 때문에
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/DB명", "user", "password");
이렇게 연결하도록 하자.
실행도구를 생성한다.
Statement statement = connection.createStatement();
쿼리를 실행하고 결과를 받아온다.
ResultSet resultSet = statement.executeQuery(sql);
현재 ResultSet은 파일의 시작(Before of File)을 가르키고 있으며, 이 ResultSet은 ResultSet.next를 이용하여 다음 정보들을 넘겨 받게 된다.
그러다가 파일의 마지막(End of File)을 가르키면 더 이상 데이터를 반환하지 않게 된다.
ResultSet.getXXX("열이름") 메서드를 사용하면 현재 ResultSet이 가르키고 있는 행의 열 이름에 해당하는 정보를 가져오게 된다.
바로 실습을 해보도록 하자.
참고로 이 부분에 대한 코드는 거의 고정이니 외워서 사용하도록 하자.
Class.forName("com.mysql.cj.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "12345678");
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("");
//
//
resultSet.close();
statement.close();
connection.close();
우선 DB에서 데이터를 가져오기 위해 데이터를 추가한다.
INSERT INTO NOTICE VALUES
(
1,
"hello",
"sk",
"aaa",
SYSDATE(),
0,
""
);
이렇게 NOTICE 테이블에 데이터를 대충 추가한 후
import java.sql.*;
public class Main {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "12345678");
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM NOTICE");
if(resultSet.next()){
String title = resultSet.getString("TITLE");
System.out.println(title);
}
resultSet.close();
statement.close();
connection.close();
}
}
ResultSet에서 다음 데이터를 가져온 후 title 열의 데이터를 출력해보면
이렇게 잘 출력이 되는 것을 볼 수 있다.
데이터를 하나 더 추가하여 while 문으로 모든 데이터를 출력한 모습이다.
당연히 MySQL과 마찬가지로 쿼리에 WHERE 문도 사용 할 수가 있다.
import java.sql.*;
public class Main {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "12345678");
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM NOTICE WHERE ID > 1");
while(resultSet.next()){
int id = resultSet.getInt("ID");
String title = resultSet.getString("TITLE");
String writer_id = resultSet.getString("WRITER_ID");
Date regDate = resultSet.getDate("REGDATE");
String content = resultSet.getString("CONTENT");
int hit = resultSet.getInt("HIT");
System.out.printf("id: %d, title: %s, write_id: %s, regDate: %s, content: %s, hit: %d\n", id, title, writer_id, regDate, content, hit);
}
resultSet.close();
statement.close();
connection.close();
}
}