implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.27'
위의 코드를 mysql jdbc드라이버라고 한다.
그레이들이 없었다면 아래와 같은 jar파일들을 직접 다운받아 저장해야 한다.
그레이들을 이용해서 코드 한줄이면 편리하게 mysql jdbc드라이버를 사용할 수 있게 된다.
JDBC란
Java DataBase Connectivity의 약자로 JDBC는 자바 언어로 데이터베이스 프로그래밍을 하기 위한 라이브러리이다.
JDBC는 DBMS에 종속되지 않는 관련 API를 제공한다.
JDBC API 클래스
JDBC는 다양한 클래스와 인터페이스로 구성된 패키지 java.sql와 javax.sql로 구성되어 있다.
데이터베이스를 연결하여 테이블 형태의 자료를 참조
SQL 문을 질의
SQL 문의 결과를 처리
Java는 인터페이스만 제공한다.
interface를 실제로 구현하는 것은 보통 Database를 만든 회사
JDBC를 이용한 데이터베이스 연동 과정은 아래와 같다.
package com.example.jdbcexam01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class Connectiontest {
public static void main(String[] args) {
try(
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/classicmodels?useSSL=false&serverTimezone=Asia/Seoul&useUnicode=true&character_set_server=utf8mb4", "root","gkseogh1!23")){
String sql = "select firstname, lastname, email from employees";
try(PreparedStatement ps = conn.prepareStatement(sql)){
ResultSet rs = ps.executeQuery();
while(rs.next()){
String firstName = rs.getString("firstname");
String lastName = rs.getString("lastname");
String email = rs.getString("email");
System.out.println(firstName + "," + lastName +"," + email);
}
rs.close();
}catch(Exception ex){
System.out.println("SQL error " + ex);
}
}
catch(Exception ex){
ex.printStackTrace();
}
}
}
한글 깨짐 현상을 방지하기 위해 아래와 같은 코드를 getConnection의 첫번째 인자,database앞에 넣어 주도록 한다.
?useSSL=false&serverTimezone=Asia/Seoul&useUnicode=true&character_set_server=utf8mb4
DriverManager.getConnection
자바와 sql을 연동해주는 역할package com.example.jdbcexam01;
import java.sql.*;
public class Connectiontest {
public static void main(String[] args) {
Connection c = null;
try{
Class.forName("com.mysql.cj.jdbc.Driver");
}catch(ClassNotFoundException ex){
System.out.println("JDBC error" + ex.getMessage());
ex.printStackTrace();
}
try{
c = DriverManager.getConnection("jdbc:mysql://localhost:3306/classicmodels","root","gkseogh1!23");
String sql = "select employeeNumber, lastName, firstName, extension, email, officeCode, reportsTo, jobTitle from employees";
try(PreparedStatement ps = c.prepareStatement(sql)){
ResultSet rs = ps.executeQuery();
while(rs.next()) {
int employeeNumber = rs.getInt("employeeNumber");
String lastName = rs.getString("lastName");
String firstName = rs.getString("firstName");
String extension = rs.getString("extension");
String email = rs.getString("email");
String officeCode = rs.getString("officeCode");
int reportsTo = rs.getInt("reportsTo");
String jobTitle = rs.getString("jobTitle");
System.out.println(employeeNumber + "," + lastName + ","+ firstName + ","+ extension + ","+ email +"," + officeCode +","+reportsTo+","+jobTitle);
}
rs.close();
}
}catch(SQLException ex){
ex.printStackTrace();
}
try{
if(c != null){
c.close();
}
}catch(SQLException e){}
}
}
위와 같이 정보가 잘 읽혀지지만 반복되는 코드가 많다고 느껴진다.
해결 안되는 오류
다음과 같이 실행시킬때 인코딩문제가 발생했다. 설정에 들어가서 utf-8변경해 주어도 해결되지 않는다.