Oracle Connection

JIHYUN·2023년 8월 14일
0

sql

목록 보기
8/9

JDK 클래스, 인터페이스
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.time.LocalDateTime;

Oracle JDBC 라이브러리 클래스
import oracle.jdbc.OracleDriver;

OracleConnect 인터페이스에서 static으로 선언된 모든 상수(*) 이름들을 임포트.
import static edu.java.jdbc.model.Blog.Entity.;
import static edu.java.jdbc.oracle.OracleConnect.
;

JDBC(Java Database Connectivity):

자바 프로그램에서 데이터 베이스를 연결하고, SQL 문장들을 실행하는 방법.

1. Oracle JDBC 라이브러리를 다운로드하고 자바 프로젝트에 라이브러리를 포함.

(1) 라이브러리 다운로드

			External Resources >> Project URL
			ojdbc11.jar
			21.9.0.0/                                         2023-02-10 00:34         -      
			ojdbc11-21.9.0.0.jar                              2023-02-10 00:34   5189606    

(2) 이클립스 프로젝트 폴더에 lib 폴더 생성
(3) 다운로드한 라이브러리 jar 파일을 lib 폴더에 복사
(4) jar 파일을 프로젝트의 빌드 패스(build path)에 추가.
파일명 위에서 우클릭, build path, add to build path

2. 오라클 데이터베이스 서버에 접속하기 위한 정보들(URL, USER ,PASSWORD)을 상수로 정의.

1 ~ 2. OracleConnect.java
3. 프로그램에서 오라클 JDBC 라이브러리를 사용할 수 있도록 드라이버 등록(라이브러리를 메모리에 로딩)
4. 데이터베이스 서버에 접속.
5. Statement 타입 객체 생성.

  • DB 서버에서 실행할 SQL 문장을 작성, 실행하는 객체.
  1. Statement 객체의 메서드를 사용해서 SQL 문장을 DB 서버로 전송하고, 그 결과를 처리.
  • executeQuery(): DQL. SELECT 문장.
  • executeUpdate(): DML. insert, update, delete 문장.
  1. 결과 처리 - 화면 출력.
  2. 사용했던 모든 리소스들(Connection, Statement, ResultSet)을 해제(close).

OracleConnect

// SCOTT	scott@//localhost:1521/xe // oracle 접속에서 확인 가능
//					server ip:port/SID service id

public interface OracleConnect {
	// 인터페이스의 필드는 public static final만 가능. public static final은 생략.
	// 오라클 데이터베이스 서버 접속 주소
	// local host: 현재 개인 PC // cmb 
	String URL = "jdbc:oracle:thin:@192.168.20.8:1521:xe";
//	String URL = "jdbc:oracle:thin:@localhost:1521:xe";
	//								server ip:port:SID
	// 오라클 데이터베이스 서버 계정
	String USER = "scott";
	// 오라클 데이터베이스 서버 비밀번호
	String PASSWORD = "tiger";
}

main JDBC

public class JdbcMain01 {

	public static void main(String[] args) {
		Connection conn = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			// 3. Oracle JDBC driver(라이브러리) 등록.
			DriverManager.registerDriver(new OracleDriver());
			System.out.println("오라클 드라이버 등록 성공");
			
			// 4. DB 서버에 접속
			conn = DriverManager.getConnection(URL, USER, PASSWORD);
			System.out.println("conn=" + conn);
			
			// 5. Statement 객체 생성.
			String sql = "select * from blogs"; // JDBC에서 SQL 문장은 세미콜론(;)을 사용하지 않음!
			stmt = conn.prepareStatement(sql);
			System.out.println("stmt=" +stmt);
			
			// 6. Statement 실행
			rs = stmt.executeQuery();
			System.out.println("rs="+ rs);
			
			// 7. 결과 처리
			while (rs.next()) { // ResultSet에 행(row) 데이터가 있는 경우
				Integer id = rs.getInt(COL_ID); // id 컬럼의 값을 읽고 int 타입으로 리턴. 
				String title = rs.getString(COL_TITLE); // title 컬럼의 값을 String 타입으로 리턴.
				String content = rs.getString(COL_CONTENT);
				String author = rs.getString(COL_AUTHOR);
				LocalDateTime createdTime = rs.getTimestamp(COL_CREATEDTIME).toLocalDateTime();
//				TimeStamp 타입으로 읽고 LocalDateTime 타입으로 변환
				LocalDateTime modifiedTime = rs.getTimestamp(COL_MODIFIEDTIME).toLocalDateTime();
			
				Blog blog = new Blog(id, title, content, author, createdTime, modifiedTime);
				System.out.println(blog);
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			// 8. 리소스 해제
			try {
				rs.close();
				stmt.close();
				conn.close();
				System.out.println("오라클 DB 접속 해제 성공");
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		
	}
}

Model

MVC 아키텍쳐에서 Model에 해당하는 클래스,
데이터 베이스에서 정의된 테이블의 모양을 자바 클래스로 선언하기 위해서.
테이블의 컬럼들을 클래스의 필드로 선언.

public class Blog {
//	테이블 이름과 컬럼 이름들을 상수로 정의.
	public interface Entity {
		String TBL_NAME = "BLOGS";
		String COL_ID = "ID";
		String COL_TITLE = "TITLE";
		String COL_CONTENT = "CONTENT";
		String COL_AUTHOR = "AUTHOR";
		String COL_CREATEDTIME = "CREATED_TIME";
		String COL_MODIFIEDTIME = "MODIFIED_TIME";
	}
	// field
	private Integer id; // 글 번호. PK
	private String title; // 글 제목
	private String content; // 글 내용
	private String author; // 글 작성자 아이디
	private LocalDateTime createdTime; // 작성 날짜
	private LocalDateTime modifiedTime; // 수정 날짜
	public Blog() {
	}
	public Blog(Integer id, String title, String content, String author, LocalDateTime createdTime,
			LocalDateTime modifiedTime) {
		this.id = id;
		this.title = title;
		this.content = content;
		this.author = author;
		this.createdTime = createdTime;
		this.modifiedTime = modifiedTime;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public LocalDateTime getCreatedTime() {
		return createdTime;
	}
	public void setCreatedTime(LocalDateTime createdTime) {
		this.createdTime = createdTime;
	}
	public LocalDateTime getModifiedTime() {
		return modifiedTime;
	}
	public void setModifiedTime(LocalDateTime modifiedTime) {
		this.modifiedTime = modifiedTime;
	}
	@Override
	public String toString() {
		return  String.format("Blog(id=%d, title=%s, content=%s, author=%s, createdTime=%s, modifiedTime=%s)", 
				id, title, content, author, createdTime, modifiedTime);
	}
}

main insert

// DB 테이블에 insert 하기
		
		Scanner scanner = new Scanner(System.in);
		Connection conn = null;
		PreparedStatement stmt = null;
		try {
			// 오라클 드라이버를 등록
			DriverManager.registerDriver(new OracleDriver());
			
			// DB에 접속
			conn = DriverManager.getConnection(URL, USER, PASSWORD);
			
			// SQL 문장(Statement)을 준비
			String sql = String.format("insert into %s (%s, %s, %s) values (?,?,?)"
					, TBL_NAME, COL_TITLE, COL_CONTENT, COL_AUTHOR);
			System.out.println(sql);
			
			// SQL 문장을 실행할 수 있는 Statement 타입 객체 생성.
			stmt = conn.prepareStatement(sql);
			
			System.out.println("제목>>>> ");
			String title = scanner.nextLine();
			System.out.println("내용>>>> ");
			String content = scanner.nextLine();
			
			// SQL 문장에서 ? 부분을 채우는 것.
			stmt.setString(1, title);
			stmt.setString(2, content);
			stmt.setString(3, "남지현");
			
			// SQL 문장 실행
			int result = stmt.executeUpdate(); // row 개수 return
			System.out.println(result + "개 행이 삽입되었습니다.");
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				// 사용했던 모든 리소스 해제
				stmt.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			
		}

main update

//JDBC Update:
		
		Scanner scanner = new Scanner(System.in);
		
		Connection conn = null;
		PreparedStatement stmt = null;
		try {
			DriverManager.registerDriver(new OracleDriver());
			
			// 오라클 DB에 접속
			conn = DriverManager.getConnection(URL, USER, PASSWORD);
			
			// Statement 준비
			// update blogs 
			// set title = ?, content = ?, modified_time = sysdate where
			String sql = String.format("update %s set %s = ?, %s = ?, %s = sysdate where %s = ?", 
					TBL_NAME, COL_TITLE, COL_CONTENT, COL_MODIFIEDTIME, COL_ID);
			System.out.println(sql);
			
			stmt = conn.prepareStatement(sql);

			// SQL 문장의 ? 부분을 채우기 위해서 id, 업데이트할 제목/내용을 입력받음.
			System.out.print("수정할 글 번호>>>> ");
			Integer id = Integer.parseInt(scanner.nextLine());
			System.out.print("제목 업데이트>>>> ");
			String title = scanner.nextLine();
			System.out.print("내용 업데이트>>>> ");
			String content = scanner.nextLine();
			
			// SQL 문장의 ? 부분을 채움.
			stmt.setString(1, title);
			stmt.setString(2, content);
			stmt.setInt(3, id);
			
			
			// SQL의 문장을 db서버에서 실행
			int result = stmt.executeUpdate();
			System.out.println(result + "개 행이 업데이트되었습니다.");
			
			
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				stmt.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

main delete

// delete from Blogs where ID = ?
		Scanner scanner = new Scanner(System.in);
		
		Connection conn = null;
		PreparedStatement stmt = null;
		
		try {
			DriverManager.registerDriver(new OracleDriver());
			
			conn = DriverManager.getConnection(URL, USER, PASSWORD);
			
			String sql = String.format("delete from %s where %s = ?", TBL_NAME, COL_ID);
			System.out.println(sql);
			
			stmt = conn.prepareStatement(sql);
			
			System.out.print("삭제할 글 번호>>> ");
			Integer id = Integer.parseInt(scanner.nextLine());
			
			stmt.setInt(1, id);
			
			int result = stmt.executeUpdate();
			System.out.println(result + "개 행이 삭제되었습니다.");
			
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				stmt.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
profile
🍋

0개의 댓글