1. JDBC란?
Java DataBase Connector로 자바와 오라클같은 데이터 베이스를 연동하는 것을 의미합니다.
JDBC 말고도 자바에서는 다양한 방법으로 db에 연결을 할 수가 있습니다~ ㅎㅎㅎ
Spring JPA나 MyBatis 등의 프레임워크를 써서 연결하는 방식이 가장 잘 알려져 있죠.

사실 JDBC는 오래된 방식 중에 하나이고, 요즘에 많이 쓰이지는 않지만, 가장 간단하게 이클립스에서 db연동을 실습해 볼 수 있다는 점에서 초보 개발자 분들은 알아두시면 좋다고 생각합니다. 제가 항상 강조하는 것은 '신기술이나 트렌드를 알면 좋지만, 새로나온 기술이 옛날 기술보다 항상 더 좋은 것은 아니다' 라는 것입니다.
새로 나온 것들보다 기존에 있던 방식으로 만들어진 프로그램들이 정말 훨씬 많고, 그것들이 여전히 유지보수가 되고 있습니다. JQuery든 JDBC를 보고 틀딱코딩이다 뭐 이런 말씀 하시는 분들도 계신데, 오래 써온 방식들은 그만큼 오류도 적고 안정성이 보장이 되기 때문에 뭐든지 일단 알아두시면 좋습니다.
제가 아래 실습코드 올려 두었으니 한 줄씩 입력해보시면서 따라 해 보세요~
정말 쉽고 어렵지 않습니다. DB는 Oracle사에서 무료로 제공하는 Oracle DB 다운받으셔서 하시면 됩니다.
DB에 아이디와 비밀번호 정도를 저장하는 간단한 회원가입 쿼리를 연습해 볼건데요.
전체 코드는 맨 마지막에 있으니 일단 순서대로 읽어 보시고 마지막에 따라 해 보시길 추천드립니다.
그리구 제가 예전에 JAVA 시간에 배운 수업 내용을 정리한 것이니 *불펌금지*
포스팅하는데 3시간 걸림...나보다 정리 잘 한 사람 있으면 나와보라구 해 > <
2. JDBC 작동 원리


JDBC 연결 순서 5단계
1. 드라이버 로딩
2. 데이터베이스 연결
3. Query 전송
4. 결과를 이용한 작업처리
5. 자원 반납
STEP1. 드라이버 로딩
Class.forName("oracle.jdbc.driver.OracleDriver");
Class.forName() 메서드로 JDBC 드라이버를 불러오는 과정이다.
JDBC 드라이버란?
자바에서 제공해주는 인터페이스들을 데이터베이스 회사에서 상속을 받아서 로직을 구현한 클래스 파일들의 모음이다.
드라이버 로딩이란 우리가 어떤 회사의 DB를 사용할 것인지 결정하는 것이다. 다만 이 단계에서는 Syntax Error(구문오류)인 ClassNotFoundException라는 예외 상황이 발생할 수가 있기 때문에 try-catch 블록으로 잡아 줘야 한다.
ClassNotFoundException 방지하는 법
(1) 매개변수에 오타 없는지 확인
(2) 프로젝트에 ojdbc6.jar파일 추가했는지 확인. (버전마다 jar 파일 이름 다름)
드라이버를 로딩하는 과정에서 반드시 프로젝트에 jar 파일을 연결해 주어야 한다.
jar 파일이란?
확장자가 jar인 파일로 김이 모락모락 나는 컵 아이콘이다. 쉽게 말해서 클래스를 여러 개 모아서 압축한 파일이 jar 파일이다. 그냥 우리가 아는 zip이랑 비슷하다고 생각하면 되는데 자바에서 호환되는 확장자가 jar이다.
프로젝트에 jar 파일 추가하는 법
프로젝트 선택 > 마우스 우클릭 > [build path] > [configure build path] > [libraries] 탭 > [class path] 선택 > 우측의 [add external jars] 선택 > 원하는 jar 파일 경로 선택 > apply and close

Oracle JDBC용 jar 파일 다운받는 법
https://www.oracle.com/kr/database/technologies/appdev/jdbc-downloads.html
JDBC and UCP Downloads page | Oracle 대한민국
Oracle JDBC Driver Implements JDBC 4.2 spec and certified with JDK8, JDK11, JDK17, and JDK19 Oracle JDBC driver except classes for NLS support in Oracle Object and Collection types. (4,535,061 bytes) - (SHA1: f46bbf6c42210736236e81bb18a955e3e1aa9a88)
www.oracle.com
자바 8 이상 버전에서는 ojdbc8.jar, 자바 11 버전 이상은 ojdbc11.jar 다운 (2024.11.4. 현재 기준)

STEP2. 데이터베이스 연결
데이터베이스 연결에 필요한 3가지 준비물 : url(연결경로), user(계정이름), password(패스워드)
위 세 가지가 준비 되었다면 Connection 객체에 DriverManager.getConnection(url, user, passworld) 를 담아 주자
String url = "jdbc:oracle:thin:@127.0.0.1:1520:jdbctest";
String user = "service";
String passward = "12345";
// jdbc:oracle:thin --> oracle thin버전
// @127.0.0.1 --> ip주소
// 1520 --> 포트 번호(중복x)
// jdbctest --> 사용자가 설정한 oracle db 별칭
Connection conn = DriverManager.getConnection(url, user, passward);
기본적인 Oracle의 URL 형식
jdbc:oracle:thin:@<호스트>:<포트>:<SID>
jdbc:oracle:thin:@localhost:1521:xe
- 호스트: 데이터베이스 서버의 IP 주소나 도메인 이름
- 포트: 기본적으로 Oracle은 1521 포트를 사용
- SID: 데이터베이스의 시스템 식별자(SID)
IP 주소 대신 서비스이름(localhost)을 써 줘도 된다.
jdbc:oracle:thin:@//<호스트>:<포트>/<서비스 이름>
jdbc:oracle:thin:@//localhost:1521/orclpdb1
Connection 이란?
Connection conn = DriverManager.getConnection(url, user, passward);
데이터베이스에 접속하기 위한 모든 메서드를 가지고 있는 인터페이스, 즉 MetaData
데이터베이스와의 모든 통신은 Connection 객체를 통해서만 이루어진다.
conn은 사용 가능한 테이블 목록, 컬럼 정보 등 연결된 DB의 모든 정보를 가지고 있다.
STEP3. Query 전송
jdbc는 MyBatis 라이브러리나 Spring JPA처럼 복합한 쿼리를 다루기에는 적합하지 않지만 간단한 CRUD 문 정도는 처리 가능하다.
실제 db에서 쓰이는 SQL 쿼리문을 작성해서 db에 전송하기 위한 준비를 하는 단계이다. 두 가지 준비물이 필요한데, 첫번째로 String타입의 쿼리문이다. 이 쿼리문을 PreparedStatement라는 객체에 담아서 db에 보낸다. 보통 PreparedStatement를 줄여서 psmt라고 선언하는데, 그냥 쿼리를 담아서 db로 보내는 도구(수레) 정도로 생각하면 이해하기 편하다.
if(conn != null) {
System.out.println("연결성공");
}
String sql = "INSERT INTO AIMEMBER VALUES(?,?,?,?)";
// ?인자
// : 사용자로부터 어떤 데이터가 들어올지 모를 때 사용
// : 지정한 데이터 공간 만큼 비워놓고 실행하기 전까지 대기
// DB에 전송할 수 있도록 PrepareStatement객체에 담아주기
PrepareStatement psmt = conn.prepareStatement(sql);
// 전송하기 전에 ?인자 채우는 작업
psmt.setString(1, id);
psmt.setString(2, pw);
psmt.setString(3, name);
psmt.setInt(4, age);
if(conn != null) {
System.out.println("연결성공");
}
conn 객체가 null이 아니면 연결 성공이라는 메세지를 콘솔창에 띄운다. conn이 null이 아니라는 말은 db 연결이 정상적으로 수행되어서 데이터가 conn 객체 안에 잘 들어와 있다는 것이다. 즉, 이 코드는 DB 연결이 정상적으로 잘 되었는지 확인하기 위한 것이다. 만약 conn 이 비어 있다면 db 연결에 문제가 생겼다는 뜻이고, 쿼리를 실행할 수 없기 때문에 드라이버 로딩부터 다시 확인해 봐야 한다.
위 코드에서는 PreaparedStatement psmt 를 중간에 선언했는데 사실은 main영역 맨 위에 기본값으로 초기화 해 주는게 더 좋은 코드이다. Scanner 선언할때 같이 선언하고 null값으로 세팅해놓으면 된다.
String sql = "INSERT INTO AIMEMBER VALUES(?,?,?,?)";
psmt.setString(1, id);
처음에 sql 변수의 '?' 인자를 비워두는 이유는 이 자리에 어떤 값이 들어올 지 모르기 때문이다. 일단 비워 놓고 psmt.setString, psmt.setInt 메소드를 통해 '?' 인자를 채워준다.
STEP4. 결과를 이용한 작업처리
// SQL문 전송(실행) --DML(delete, insert, update)
int row = psmt.executeUpdate();
// excuteUpdate() : insert, delete, update에 사용
// 결과를 이용한 작업처리
if(row > 0) {
System.out.println("회원가입 성공");
} else {
System.out.println("회원가입 실패");
}
쿼리를 보내주는 단계이다. psmt.executeUpdate() 메서드를 사용했는데 그 결과값이 int형으로 리턴되는 것을 알 수 있다.
executeUpdate() 메서드는 insert, delete, update에만 사용되고 select에는 사용되지 않는다.
이 코드에서 int타입의 결과값으로 뭘 받아오는 걸까? 바로 executeUpdate() 메서드에 영향을 받은 행의 수를 반환한다. 주로 INSERT, UPDATE, DELETE 작업 후에 사용된다. 행 추가, 행 삭제 등을 통해 영향을 받은 행의 숫자이다. 그렇기 때문에 select는 executeUpdate() 메서드를 사용하지 않는다. select는 단순히 데이터를 조회만 하고 수정은 하지 않기 때문에 행 숫자에 변동이 없다.
그럼 Select 쿼리를 수행할 때는 어떤 메서드를 쓰는가? executeQuery()를 사용한다.
결과값은 int가 아니라 ResultSet 객체에 담긴다.
String sql = "SELECT * FROM users";
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}
SELECT로 조회하는 데이터들은 보통 여러 줄 이므로 rs.next()를 호출해서 다음 줄로 커서 이동을 해 준다. 다음 행이 존재하는 경우 true를 반환하고, 더 이상 행이 없을 경우 false를 반환한다. 그래서 while 루프로 모든 결과를 반복적으로 처리할 수 있다.
// 결과를 이용한 작업처리
if(row > 0) {
System.out.println("회원가입 성공");
} else {
System.out.println("회원가입 실패");
}
결과를 위한 작업처리를 하는 이유는 작업의 결과를 사용자에게 시각적으로 보여주기 위해서이다. psmt.executeUpdate()가 오류없이 잘 실행이 되었다면, row에 0보다 큰 값이 들어간다. 이것을 이용해서 사용자에게 회원가입 성공 여부를 띄워 줄 수 있따.
STEP5. 자원 해제
여기까지 왔으면 다 왔다. ㅎ
try {
// 자원을 반납할때는 사용한 순서의 역순으로 반납
if(psmt != null)
psmt.close(); // sql문 전송 종료
if(conn !=null)
conn.close(); // DB연결 종료
} catch (SQLException e) {
e.printStackTrace();
}
conn을 먼저 사용했기 때문에 psmt 먼저 닫아 주고, conn을 닫아 준다. 예외처리도 같이 해 주는 것이 좋다.
3. JDBC 로그인 전체 코드
package ex01JDBC로그인;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class ex01회원가입 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("ID 입력 : ");
String id = sc.next();
System.out.print("PW 입력 : ");
String pw = sc.next();
System.out.print("이름 입력 : ");
String name = sc.next();
System.out.print("나이 입력 : ");
int age = sc.nextInt();
PreparedStatement psmt = null;
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
String user = "service";
String passward = "12345";
conn = DriverManager.getConnection(url, user, passward);
if(conn != null) {
System.out.println("연결성공");
}
String sql = "INSERT INTO AIMEMBER VALUES(?,?,?,?)";
psmt = conn.prepareStatement(sql);
psmt.setString(1, id);
psmt.setString(2, pw);
psmt.setString(3, name);
psmt.setInt(4, age);
int row = psmt.executeUpdate();
if(row > 0) {
System.out.println("회원가입 성공");
} else {
System.out.println("회원가입 실패");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(psmt != null)
psmt.close();
if(conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
여기까지 포스팅 하느라 너무 힘들었다.
하지만, 이 포스팅을 하면서 느낀 것은 예전에는 JDBC를 하면서 하나도 이해가 안 됐는데 이제는 이 정도쯤은 아무것도 아니라는 것이다. 처음에 자바 별찍기도 어려워 할 때가 있었는데ㅎㅎㅎㅎ 정말로 꾸준히 하면 누구든지 예전에 어려워했던 것을 쉽게 할 수 있는 날이 온다. 그리고 뭐든지 그만두고 포기하게 만드는 가장 큰 적은 두려움이다. 어렵더라도 별 것 아닌 거라고 생각하고 하는 마음가짐이 필요하며, 매일 조금씩 꾸준히 하는 것이 중요하다.
여러분 힘내시구 좋은 하루 보내세요
포스팅에 참고한 자료
https://www.javamadesoeasy.com/2015/07/jdbc-connection-with-oracle-11g.html
JDBC connection with Oracle 11g - ojdbc6.jar - configure java build path - registering driver - getConnection - Writing your Fir
You are here : Home / Core Java Tutorials / JDBC - Java Database connectivity tutorial In this tutorial we will learn JDBC conne...
www.javamadesoeasy.com
https://blog.naver.com/yeon_doit/223335756094
[스마트인재개발원 광주남구점] JDBC란? 실습을 통해 알아보자.
안녕하십니까! 저는 광주 스마트인재개발원에서 빅데이터 과정을 듣고 있습니다. 스마트인재개발원은 국비...
blog.naver.com
'Java' 카테고리의 다른 글
[Java] 배열 사용자정의 정렬하는 법(내림차순, 람다식) (4) | 2024.11.12 |
---|---|
[Java] 자바의 자료형 Map 과 Set 의 차이 (9) | 2024.11.07 |
[Java] ArrayList, 제네릭스(Generics), 정렬, Join, String.join 정리 (8) | 2024.11.03 |
StringBuffer 사용법, 예시, String 과 차이, StringBuilder (5) | 2024.11.03 |
[Java] BufferedReader / BufferedWriter (입출력 함수), StringTokenizer, split, BufferedWriter, StringBuilder (4) | 2024.10.27 |
1. JDBC란?
Java DataBase Connector로 자바와 오라클같은 데이터 베이스를 연동하는 것을 의미합니다.
JDBC 말고도 자바에서는 다양한 방법으로 db에 연결을 할 수가 있습니다~ ㅎㅎㅎ
Spring JPA나 MyBatis 등의 프레임워크를 써서 연결하는 방식이 가장 잘 알려져 있죠.

사실 JDBC는 오래된 방식 중에 하나이고, 요즘에 많이 쓰이지는 않지만, 가장 간단하게 이클립스에서 db연동을 실습해 볼 수 있다는 점에서 초보 개발자 분들은 알아두시면 좋다고 생각합니다. 제가 항상 강조하는 것은 '신기술이나 트렌드를 알면 좋지만, 새로나온 기술이 옛날 기술보다 항상 더 좋은 것은 아니다' 라는 것입니다.
새로 나온 것들보다 기존에 있던 방식으로 만들어진 프로그램들이 정말 훨씬 많고, 그것들이 여전히 유지보수가 되고 있습니다. JQuery든 JDBC를 보고 틀딱코딩이다 뭐 이런 말씀 하시는 분들도 계신데, 오래 써온 방식들은 그만큼 오류도 적고 안정성이 보장이 되기 때문에 뭐든지 일단 알아두시면 좋습니다.
제가 아래 실습코드 올려 두었으니 한 줄씩 입력해보시면서 따라 해 보세요~
정말 쉽고 어렵지 않습니다. DB는 Oracle사에서 무료로 제공하는 Oracle DB 다운받으셔서 하시면 됩니다.
DB에 아이디와 비밀번호 정도를 저장하는 간단한 회원가입 쿼리를 연습해 볼건데요.
전체 코드는 맨 마지막에 있으니 일단 순서대로 읽어 보시고 마지막에 따라 해 보시길 추천드립니다.
그리구 제가 예전에 JAVA 시간에 배운 수업 내용을 정리한 것이니 *불펌금지*
포스팅하는데 3시간 걸림...나보다 정리 잘 한 사람 있으면 나와보라구 해 > <
2. JDBC 작동 원리


JDBC 연결 순서 5단계
1. 드라이버 로딩
2. 데이터베이스 연결
3. Query 전송
4. 결과를 이용한 작업처리
5. 자원 반납
STEP1. 드라이버 로딩
Class.forName("oracle.jdbc.driver.OracleDriver");
Class.forName() 메서드로 JDBC 드라이버를 불러오는 과정이다.
JDBC 드라이버란?
자바에서 제공해주는 인터페이스들을 데이터베이스 회사에서 상속을 받아서 로직을 구현한 클래스 파일들의 모음이다.
드라이버 로딩이란 우리가 어떤 회사의 DB를 사용할 것인지 결정하는 것이다. 다만 이 단계에서는 Syntax Error(구문오류)인 ClassNotFoundException라는 예외 상황이 발생할 수가 있기 때문에 try-catch 블록으로 잡아 줘야 한다.
ClassNotFoundException 방지하는 법
(1) 매개변수에 오타 없는지 확인
(2) 프로젝트에 ojdbc6.jar파일 추가했는지 확인. (버전마다 jar 파일 이름 다름)
드라이버를 로딩하는 과정에서 반드시 프로젝트에 jar 파일을 연결해 주어야 한다.
jar 파일이란?
확장자가 jar인 파일로 김이 모락모락 나는 컵 아이콘이다. 쉽게 말해서 클래스를 여러 개 모아서 압축한 파일이 jar 파일이다. 그냥 우리가 아는 zip이랑 비슷하다고 생각하면 되는데 자바에서 호환되는 확장자가 jar이다.
프로젝트에 jar 파일 추가하는 법
프로젝트 선택 > 마우스 우클릭 > [build path] > [configure build path] > [libraries] 탭 > [class path] 선택 > 우측의 [add external jars] 선택 > 원하는 jar 파일 경로 선택 > apply and close

Oracle JDBC용 jar 파일 다운받는 법
https://www.oracle.com/kr/database/technologies/appdev/jdbc-downloads.html
JDBC and UCP Downloads page | Oracle 대한민국
Oracle JDBC Driver Implements JDBC 4.2 spec and certified with JDK8, JDK11, JDK17, and JDK19 Oracle JDBC driver except classes for NLS support in Oracle Object and Collection types. (4,535,061 bytes) - (SHA1: f46bbf6c42210736236e81bb18a955e3e1aa9a88)
www.oracle.com
자바 8 이상 버전에서는 ojdbc8.jar, 자바 11 버전 이상은 ojdbc11.jar 다운 (2024.11.4. 현재 기준)

STEP2. 데이터베이스 연결
데이터베이스 연결에 필요한 3가지 준비물 : url(연결경로), user(계정이름), password(패스워드)
위 세 가지가 준비 되었다면 Connection 객체에 DriverManager.getConnection(url, user, passworld) 를 담아 주자
String url = "jdbc:oracle:thin:@127.0.0.1:1520:jdbctest"; String user = "service"; String passward = "12345"; // jdbc:oracle:thin --> oracle thin버전 // @127.0.0.1 --> ip주소 // 1520 --> 포트 번호(중복x) // jdbctest --> 사용자가 설정한 oracle db 별칭 Connection conn = DriverManager.getConnection(url, user, passward);
기본적인 Oracle의 URL 형식
jdbc:oracle:thin:@<호스트>:<포트>:<SID> jdbc:oracle:thin:@localhost:1521:xe
- 호스트: 데이터베이스 서버의 IP 주소나 도메인 이름
- 포트: 기본적으로 Oracle은 1521 포트를 사용
- SID: 데이터베이스의 시스템 식별자(SID)
IP 주소 대신 서비스이름(localhost)을 써 줘도 된다.
jdbc:oracle:thin:@//<호스트>:<포트>/<서비스 이름> jdbc:oracle:thin:@//localhost:1521/orclpdb1
Connection 이란?
Connection conn = DriverManager.getConnection(url, user, passward);
데이터베이스에 접속하기 위한 모든 메서드를 가지고 있는 인터페이스, 즉 MetaData
데이터베이스와의 모든 통신은 Connection 객체를 통해서만 이루어진다.
conn은 사용 가능한 테이블 목록, 컬럼 정보 등 연결된 DB의 모든 정보를 가지고 있다.
STEP3. Query 전송
jdbc는 MyBatis 라이브러리나 Spring JPA처럼 복합한 쿼리를 다루기에는 적합하지 않지만 간단한 CRUD 문 정도는 처리 가능하다.
실제 db에서 쓰이는 SQL 쿼리문을 작성해서 db에 전송하기 위한 준비를 하는 단계이다. 두 가지 준비물이 필요한데, 첫번째로 String타입의 쿼리문이다. 이 쿼리문을 PreparedStatement라는 객체에 담아서 db에 보낸다. 보통 PreparedStatement를 줄여서 psmt라고 선언하는데, 그냥 쿼리를 담아서 db로 보내는 도구(수레) 정도로 생각하면 이해하기 편하다.
if(conn != null) { System.out.println("연결성공"); } String sql = "INSERT INTO AIMEMBER VALUES(?,?,?,?)"; // ?인자 // : 사용자로부터 어떤 데이터가 들어올지 모를 때 사용 // : 지정한 데이터 공간 만큼 비워놓고 실행하기 전까지 대기 // DB에 전송할 수 있도록 PrepareStatement객체에 담아주기 PrepareStatement psmt = conn.prepareStatement(sql); // 전송하기 전에 ?인자 채우는 작업 psmt.setString(1, id); psmt.setString(2, pw); psmt.setString(3, name); psmt.setInt(4, age);
if(conn != null) { System.out.println("연결성공"); }
conn 객체가 null이 아니면 연결 성공이라는 메세지를 콘솔창에 띄운다. conn이 null이 아니라는 말은 db 연결이 정상적으로 수행되어서 데이터가 conn 객체 안에 잘 들어와 있다는 것이다. 즉, 이 코드는 DB 연결이 정상적으로 잘 되었는지 확인하기 위한 것이다. 만약 conn 이 비어 있다면 db 연결에 문제가 생겼다는 뜻이고, 쿼리를 실행할 수 없기 때문에 드라이버 로딩부터 다시 확인해 봐야 한다.
위 코드에서는 PreaparedStatement psmt 를 중간에 선언했는데 사실은 main영역 맨 위에 기본값으로 초기화 해 주는게 더 좋은 코드이다. Scanner 선언할때 같이 선언하고 null값으로 세팅해놓으면 된다.
String sql = "INSERT INTO AIMEMBER VALUES(?,?,?,?)";
psmt.setString(1, id);
처음에 sql 변수의 '?' 인자를 비워두는 이유는 이 자리에 어떤 값이 들어올 지 모르기 때문이다. 일단 비워 놓고 psmt.setString, psmt.setInt 메소드를 통해 '?' 인자를 채워준다.
STEP4. 결과를 이용한 작업처리
// SQL문 전송(실행) --DML(delete, insert, update) int row = psmt.executeUpdate(); // excuteUpdate() : insert, delete, update에 사용 // 결과를 이용한 작업처리 if(row > 0) { System.out.println("회원가입 성공"); } else { System.out.println("회원가입 실패"); }
쿼리를 보내주는 단계이다. psmt.executeUpdate() 메서드를 사용했는데 그 결과값이 int형으로 리턴되는 것을 알 수 있다.
executeUpdate() 메서드는 insert, delete, update에만 사용되고 select에는 사용되지 않는다.
이 코드에서 int타입의 결과값으로 뭘 받아오는 걸까? 바로 executeUpdate() 메서드에 영향을 받은 행의 수를 반환한다. 주로 INSERT, UPDATE, DELETE 작업 후에 사용된다. 행 추가, 행 삭제 등을 통해 영향을 받은 행의 숫자이다. 그렇기 때문에 select는 executeUpdate() 메서드를 사용하지 않는다. select는 단순히 데이터를 조회만 하고 수정은 하지 않기 때문에 행 숫자에 변동이 없다.
그럼 Select 쿼리를 수행할 때는 어떤 메서드를 쓰는가? executeQuery()를 사용한다.
결과값은 int가 아니라 ResultSet 객체에 담긴다.
String sql = "SELECT * FROM users"; ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); System.out.println("ID: " + id + ", Name: " + name); }
SELECT로 조회하는 데이터들은 보통 여러 줄 이므로 rs.next()를 호출해서 다음 줄로 커서 이동을 해 준다. 다음 행이 존재하는 경우 true를 반환하고, 더 이상 행이 없을 경우 false를 반환한다. 그래서 while 루프로 모든 결과를 반복적으로 처리할 수 있다.
// 결과를 이용한 작업처리 if(row > 0) { System.out.println("회원가입 성공"); } else { System.out.println("회원가입 실패"); }
결과를 위한 작업처리를 하는 이유는 작업의 결과를 사용자에게 시각적으로 보여주기 위해서이다. psmt.executeUpdate()가 오류없이 잘 실행이 되었다면, row에 0보다 큰 값이 들어간다. 이것을 이용해서 사용자에게 회원가입 성공 여부를 띄워 줄 수 있따.
STEP5. 자원 해제
여기까지 왔으면 다 왔다. ㅎ
try { // 자원을 반납할때는 사용한 순서의 역순으로 반납 if(psmt != null) psmt.close(); // sql문 전송 종료 if(conn !=null) conn.close(); // DB연결 종료 } catch (SQLException e) { e.printStackTrace(); }
conn을 먼저 사용했기 때문에 psmt 먼저 닫아 주고, conn을 닫아 준다. 예외처리도 같이 해 주는 것이 좋다.
3. JDBC 로그인 전체 코드
package ex01JDBC로그인; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Scanner; public class ex01회원가입 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("ID 입력 : "); String id = sc.next(); System.out.print("PW 입력 : "); String pw = sc.next(); System.out.print("이름 입력 : "); String name = sc.next(); System.out.print("나이 입력 : "); int age = sc.nextInt(); PreparedStatement psmt = null; Connection conn = null; try { Class.forName("oracle.jdbc.driver.OracleDriver"); String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe"; String user = "service"; String passward = "12345"; conn = DriverManager.getConnection(url, user, passward); if(conn != null) { System.out.println("연결성공"); } String sql = "INSERT INTO AIMEMBER VALUES(?,?,?,?)"; psmt = conn.prepareStatement(sql); psmt.setString(1, id); psmt.setString(2, pw); psmt.setString(3, name); psmt.setInt(4, age); int row = psmt.executeUpdate(); if(row > 0) { System.out.println("회원가입 성공"); } else { System.out.println("회원가입 실패"); } } catch (Exception e) { e.printStackTrace(); } finally { try { if(psmt != null) psmt.close(); if(conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
여기까지 포스팅 하느라 너무 힘들었다.
하지만, 이 포스팅을 하면서 느낀 것은 예전에는 JDBC를 하면서 하나도 이해가 안 됐는데 이제는 이 정도쯤은 아무것도 아니라는 것이다. 처음에 자바 별찍기도 어려워 할 때가 있었는데ㅎㅎㅎㅎ 정말로 꾸준히 하면 누구든지 예전에 어려워했던 것을 쉽게 할 수 있는 날이 온다. 그리고 뭐든지 그만두고 포기하게 만드는 가장 큰 적은 두려움이다. 어렵더라도 별 것 아닌 거라고 생각하고 하는 마음가짐이 필요하며, 매일 조금씩 꾸준히 하는 것이 중요하다.
여러분 힘내시구 좋은 하루 보내세요
포스팅에 참고한 자료
https://www.javamadesoeasy.com/2015/07/jdbc-connection-with-oracle-11g.html
JDBC connection with Oracle 11g - ojdbc6.jar - configure java build path - registering driver - getConnection - Writing your Fir
You are here : Home / Core Java Tutorials / JDBC - Java Database connectivity tutorial In this tutorial we will learn JDBC conne...
www.javamadesoeasy.com
https://blog.naver.com/yeon_doit/223335756094
[스마트인재개발원 광주남구점] JDBC란? 실습을 통해 알아보자.
안녕하십니까! 저는 광주 스마트인재개발원에서 빅데이터 과정을 듣고 있습니다. 스마트인재개발원은 국비...
blog.naver.com
'Java' 카테고리의 다른 글
[Java] 배열 사용자정의 정렬하는 법(내림차순, 람다식) (4) | 2024.11.12 |
---|---|
[Java] 자바의 자료형 Map 과 Set 의 차이 (9) | 2024.11.07 |
[Java] ArrayList, 제네릭스(Generics), 정렬, Join, String.join 정리 (8) | 2024.11.03 |
StringBuffer 사용법, 예시, String 과 차이, StringBuilder (5) | 2024.11.03 |
[Java] BufferedReader / BufferedWriter (입출력 함수), StringTokenizer, split, BufferedWriter, StringBuilder (4) | 2024.10.27 |