063_JDBC 실습(Write 자료)

Jan 19, 2024
063_JDBC 실습(Write 자료)
 
JDBC를 실습 하기 위해서는 일단 연동될 DBMS가 필요하고 DB 또한 필요하다. 이는 먼저 MariaDB에서 간단히 DB와 Table을 구현하고 나서 진행한 것이니 이 점도 충분히 참고 후에 실습 글을 읽어야 할 듯하다.
 

JDBC 전 간단 TABLE 생성 Query

CREATE TABLE account_tb( number INT PRIMARY KEY AUTO_INCREMENT, password VARCHAR(100) NOT NULL, balance INT NOT NULL, created_at TIMESTAMP NOT NULL ) ENGINE=INNODB DEFAULT CHARSET=UTF8MB4;
CHARSET은 생략이 가능한 상황이 있는데 설정한 언어 체계가 같으면 생략 가능
👉
TIP
DB 마다 라이브러리가 따로 있다.
DBMS의 utf8mb4는 DBMS에서만 가지는 UTF8이라 보면 된다. ”TIMESTAMP” 이 무엇인가? UTC(세계 협정시)를 기준으로 '1970-01-01 00:00:01' UTC부터 '2038-01-19 03:14:07' UTC 까지 데이터 타입 32비트 정수의 시간으로 나타낸다.
👉
UTC가 만들어진 이유는?!
과거에는 각 나라마다 별도의 지역 시간을 사용하여 시간을 관리했지만, 국제적인 통신과 교역, 항공 이동 등이 활발해지면서 표준 시간 체계의 필요성이 생겼고,
따라서, UTC는 과학, 기술, 항공, 통신, 금융 등 전 세계의 다양한 분야에서 시간의 표준으로 사용되며, 컴퓨터 시스템과 네트워크에서도 널리 사용됩니다.

JDBC 실습

  • MVN에서 “MariaDB Java Client”를 가져와 “build.gradle”에 “dependencies”의 중괄호 안에 넣으면 생성 되는데 이는 “main”에서 실사용 코드를 만들고 “test”에서는 그 실사용 코드를 test하는 용도로 이용한다.
MariaDB Java Client
MariaDB Java Client
 
test에는 src는 Test를 뒤에 코드에는 _test를 붙힌다.
test에는 src는 Test를 뒤에 코드에는 _test를 붙힌다.

JDBC 실습 코드

  • test 코드 → 주석으로 설명이 적혀 있으니 꼭! 참고해야한다!
package db; import org.junit.jupiter.api.Test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBConnectionTest { // 리턴타입을 적을 수 없다. (void 타입만 사용 가능) // 매개변수를 적을 수 없다. // @Test 붙이면 메서드 별로 실행 가능 @Test // 제이유닛 → 자바로 테스트 할 수 있는 도구 public void getInstance_test(){ String username = "root"; String password = "1234"; // url이란 건 앞에 프로토콜을 적어줘야한다. -> 웹은 http, 파일 서버는 ftp, db는 db마다 다른데 MariaDB는 jdbc:mariadb:// 나머지는 상황에 따라 검색! String url = "jdbc:mariadb://localhost:3306/cosdb"; // 프로토콜이 적용된 소켓 try { Connection conn = DriverManager.getConnection(url, username, password); } catch (Exception e) { throw new RuntimeException(e); } } }
👉
test에서는 void를 사용하는데 @Test 인 제이유닛으로 인해 발생하는 현상이다. 이로 인해 위의 주석 설명과 같은 현상으로 인해 테스트에서 문제 없이 실행이 될 시 main으로 가져가 리턴 타입을 받는 형식으로 진행한다.
  • main 코드 → test 코드에서 성공한 코드를 긁어와서 가져온 후 retrun을 추가한다!
package db; import java.sql.Connection; import java.sql.DriverManager; public class DBConnection { public static Connection getInstance(){ String username = "root"; String password = "1234"; // url이란 건 앞에 프로토콜을 적어줘야한다. -> 웹은 http, 파일 서버는 ftp, db는 db마다 다른데 MariaDB는 jdbc:mariadb:// 나머지는 상황에 따라 검색! String url = "jdbc:mariadb://localhost:3306/cosdb"; // 프로토콜이 적용된 소켓 try { Connection conn = DriverManager.getConnection(url, username, password); System.out.println("DB Connection success"); return conn; } catch (Exception e) { throw new RuntimeException(e); } } }
  • 직접 실행하는 코드
import db.DBConnection; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; public class BankApp { public static void main(String[] args) { Connection conn = DBConnection.getInstance(); try { // 이렇게 만들면 다양하게 활용이 가능해진다. String insert = "INSERT INTO account_tb(password, balance, created_at) values(?, ?, now())"; String delete = "delete from account_tb where number = ?"; String update = "update account_tb set balance = balance + ? where number = ?"; // 버퍼 PreparedStatement pstmt = conn.prepareStatement("INSERT INTO account_tb(password, balance, created_at) values(?, ?, now())"); // 버퍼의 물음표 자리를 채우는 문법 pstmt.setString(1, "1234"); // 앞자리는 몇 번째 물음표를 만들건지 기입, 원하는 것 -> 이 문법은 1부터 시작하고 0이 없다. pstmt.setInt(2, 1000); // 타입이 무엇이냐에 따라 setInt(), setString() 등 으로 한다. int num = pstmt.executeUpdate(); // flush와 같다. 무언가 실행되는데 들어가보니 아무것도 없으면 그냥 동적 바인딩이라 생각하면 된다. System.out.println(num); } catch (Exception e) { throw new RuntimeException(e); } } }
👉
주석에 대부분의 실행 기능이 기입 되어있다. 참고로 위의 코드는 Write의 역할만 처리 가능하다. Query문은 직접 넣어도 되고 String으로 만들어서 넣어도 된다. ? 를 활용하는 방법은 꼭! 한 번 더 보자!

JAVA 에서 UTF-8을 못 읽는 오류가 발생할 경우 1

error: unmappable character (0xED) for encoding x-windows-949
notion image

JAVA 에서 UTF-8을 못 읽는 오류가 발생할 경우 2

notion image
👉
D:\workspace\java_lec\dbapp\src\test\java\db\DBConnectionTest.java:11: error: unmappable character (0xED) for encoding x-windows-949 -> Java 컴파일러가 소스 코드의 문자를 현재 설정된 문자 인코딩(x-windows-949)으로 해석할 수 없을 때 발생합니다. IntelliJ IDEA에서는 상단 메뉴의 File > Settings > Editor > File Encodings에서 'Global Encoding'과 'Project Encoding'을 'UTF-8'로 변경하면 됩니다.

알아두면 좋을 사항 모음

🌟
브라우저가 DB에게 절대 엑세스하지 못한다. 브라우저 → java(프로그래밍 언어) → dbms 순으로 넘겨준다 이때 java만이 5가지의 민감한 정보(ip, port, id, pw, protocol)를 알고 있다. 나머지 알면 개인정보의 문제가 생길 수 있다. 중간의 언어를 → 미들 웨어 라고 한다. 위의 사항에 맞는 개발자의 종류 브라우저(프론트엔드) → 언어(미들웨어) → DBMS(DB개발자) 보이지 않는 브라우저 (백엔드)
 
 
 
 
 
Share article
RSSPowered by inblog