MapleStory Finger Point

🟤 JAVA/🟤 JSP

[JSP] JDBC (Java Database Connectivity)

HYEJU01 2024. 6. 28. 00:02

[ JDBC 란? ]
Java Database Connectivity의 약자로
자바 프로그램에서 SQL문을 실행하여 데이터를 관리하기 위한 JAVA API

[ 연결 API connector ]
MYSQL , ORACLE 에 따라 전용 JDBC 를 사용한다.


[ SQL 실행 하기 위한 방법 ]
1. MyBatis (Spring에서 학습)
2. 하이버네이트 JPA 등


[ 기본 셋팅 ]

 

더보기
오라클 hr스키마 초기화
0. 접속 해제.
1. Run sql commandline접속
=> conn sys as sysdba
2. @?/demo/schema/human_resources/hr_main.sql
3. HR
4. users
5. temp
6. 1234
7. C:/oraclexe/app/oracle/product/11.2.0/server/demo/schema/log/

 


1. 프로그램과 datebase 연결
2. 오라클에서 제공해주는 데이터베이스 연결 API
3. ojdbc.jar << api 추가

 

 

  • 프로젝트 최상위 > 폴더 생성 > lib > ojdbc11.jar 넣기
  • ojdbc11 은 sqldeveloper파일 안에 있다.
  • 프로젝트 속성 -. build path -> libraries > add external JARs > ojdbc11 넣기
  • referenced libraries 가 생긴다.

 

 

 

 


 

 

 


 

 

[  Connection 객체 ]  -- DB와 JAVA 연결

  • 데이터베이스와 JAVA연결 해준다.
  • DriverManager.getConnection() 메서드를 사용하여 커넥션을 구할 수 있다.
  • 연결이 끝난 뒤에는 반드시 close() 메서드를 호출하여 Connection 객체가 사용한 시스템 자원을 반환한다. ( 시스템 자원이 불필요하게 소모되어 커넥션을 구할 수 없는 상황이 발생!!) 

 

 

 

[  Statement 객체 ]  --- 쿼리문 실행
Connection 객체로부터 Statement를 생성하고 쿼리문을 실행

 

[ Statement 주요 메서드 ]
1. executeQuery() // Select 쿼리문을 실행합니다.
2. executeUpdate() // Insert, Update, Delete 쿼리문을 실행합니다. 

 

 


[ ResultSet 객체 ]  --- 쿼리문 실행 결과값 읽어오기
Statement 객체의 executeQuery() 메서드는 Select 쿼리문의 결과를 ResultSet객체에 담아서 리턴

Cursor 대기하고 Next() 하며 다음이 있으면 계속 전진하며
getString(컬럼) 으로 값을 가져온다.

 


[ ResultSet 주요 메서드 ]
1. next() // 다음 값의 확인
2. getString() // 지정한 컬럼 값을 String으로 읽음
3. getInt() // 지정한 컬럼 값을 int 타입으로 읽음
4. getDouble() //지정한 컬럼 값을 double 타입으로 읽음

 

 

 

[ PreparedStatement 객체 ]

  • Statement 객체를 대신한다. 쿼리문을 실행하는 동일한 기능을 제공한다.
  • 값을 지정할 때 값 부분을 물음표(?)로 처리하기 때문에 간단히 값을 지정가능하다.
  • 첫번째 물음표 인덱스는 1이며, 이후 순서대로 1씩 증가한다.

 

 


1) sql 접속 정보를 선언
String url = "jdbc.oracle.thin:@localhost:1521:xe";
Stirng uid =  "HR";
String upw =  "HR";

-------

2) jdbc 드라이버 호출
// java.sql 패키지를 사용하는데 내부 클래스들이 전부 throws 처리 되어있기 때문에 try-catch 문 안에서 작성한다.

Class.forName("oracle.jdbc.OracleDriver");

-------

3) sql 연결을 위한 connection 

//module 파일에 추가 

module JDBC{
requires java.sql;
}

//connection 객체 생성
DriverManager.getConnection(url, uid, upw);


------------------

// sql 쿼리 구문 실행을 위한 statement 객체 생성 
// 실행시킬 SQL  입력후 연결 
 
 String sql = "INSERT INTO MEMBER(ID,PW,AGE,EMIAL) VALUES(?,?,?,?);";
 pstmt = conn.prepareStatement(sql);
// ? 는 1부터 순서 대로 slq 안의 ? 에 순서대로 들어가게된다.

// sql 실행
//insert , update, delete 는 executeUpdate() 문장으로 실행시킨다.
pstmt.executeUpdate(); // 적용된 로우행의 개수를 반환 

1 이상 나오면 성공 

try -catch
conn.close();
pstmt.close();

 

 

 

* INSERT

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;

public class JDBCInsert {
public static void main(String[] args) {
 String url = "jdbc:oracle:thin:@localhost:1521:xe";
 String uid =  "HR";
 String upw =  "HR";
 
 Scanner sc = new Scanner(System.in);
 
 System.out.println("아이디 >");
 String id = sc.next();
 System.out.println("비번 >");
 String pw = sc.next();
 System.out.println("나이 >");
 int age = sc.nextInt();
 System.out.println("이메일 >");
 String email = sc.next();
 
 String sql = "INSERT INTO MEMBER(ID,PW,AGE,EMAIL) VALUES(?,?,?,?)";
 
 
 
 Connection conn = null;
 PreparedStatement pstmt = null;
 
 try {
 Class.forName("oracle.jdbc.OracleDriver");
 conn = DriverManager.getConnection(url, uid, upw);
 pstmt = conn.prepareStatement(sql);
 pstmt.setString(1,id);
 pstmt.setString(2,pw);
 pstmt.setInt(3,age);
 pstmt.setString(4,email);
 
 int result = pstmt.executeUpdate();
 
 if (result == 1) {
 System.out.println("인서트 성공");
 }else {
 System.out.println("인서트 실패");
 }

 }catch (Exception e) {
 e.printStackTrace();
 }finally {
 try {
 conn.close();
 pstmt.close();
 }catch (Exception e2) {
 
 }
 }
 

}
}

 

 


* UPDATE 

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;

public class JDBCUpdate {
public static void main(String[] args) {

String url = "jdbc:oracle:thin:@localhost:1521:xe";
 String uid =  "HR";
 String upw =  "HR";
 
 Scanner sc = new Scanner(System.in);
 
 System.out.println("아이디 >");
 String id = sc.next();
 System.out.println("비번 >");
 String pw = sc.next();
 System.out.println("나이 >");
 int age = sc.nextInt();
 System.out.println("이메일 >");
 String email = sc.next();
 
 
 String sql = "UPDATE MEMBER SET AGE = ?, PW = ?, EMAIL = ? WHERE ID = ?";

 Connection conn = null;
 PreparedStatement pstmt = null;
 
 try {
 Class.forName("oracle.jdbc.OracleDriver");
 
 conn = DriverManager.getConnection(url,uid,upw);
 pstmt = conn.prepareStatement(sql);
 pstmt.setInt(1,age);
 pstmt.setString(2,pw);
 pstmt.setString(3,email);
 pstmt.setString(4,id);
 
 int result = pstmt.executeUpdate();
 
 if (result == 1) {
 System.out.println("업데이트 성공");
 }else {
 System.out.println("업데이트 실패");
 }
 
 
 }catch(Exception e) {
e.printStackTrace(); 
 }finally {
 try {
 conn.close();
 pstmt.close();
 }catch(Exception e2) {
 
 }
 }
}
}

 

 

 

* SELECT  구현방식이 살짝 다르다

pstmt.executeQuery(); //select 는 쿼리 구문으로 실행

ResultSet rs = null; // 결과를 조회해서 처리할 result set 객체가 필요하다.
pstmt.executeQuery(); //select 는 쿼리 구문으로 실행

//전진하면서 확인
//1행에 대한 프로그램 처리
//getString(),getInt() ~~~ 등을 이용해서 테이터 읽어드림

 String id  = rs.getString("id");
 String pw = rs.getString("pw");
 int ages = rs.getInt("age");
 String email = rs.getString("email"); // 읽을 컬럼명