JDBC

3 minute read

JDBC

ㅠ 이전에 이미 깔아놓은 오라클이 있었는데 32비트를 설치해놔서 sql developer에 64비트로 설치되어있는 자바경로가 먹지 않았다. 그래서 깔끔하게 전부 삭제하고 다시 깔았다 ^^ …

일단 oracle developer에 데이터를 삽입조회수정삭제 할 테이블을 만들어줬다.

image-20200318204208960

image-20200318204146946

그리고 값을 추가하면 자동으로 증가 , 감소 시켜줄 시퀀스도 만들어줬다.

image-20200318204242403

그다음 이클립스에서 오라클 데이터베이스를 쓰려면 JDBC라는 라이브러리를 써서 중간다리 역할을 해줘야한다.

Program Friles -> Java -> jre1.8.0_201 -> lib -> ext에 가면 이클립스에서 매번 쓰는 라이브러리들이 모여있다.

여기에 오라클데이터베이스를 설치한곳에 있는 jdbc 라이브러리를 추가해주면 된다.

image-20200318204732058

image-20200318204748210

이클립스에서 오라클 디비에 접속할 준비완료!

image-20200318205024076

image-20200318205003305

jsp 파일로 테이블에 입력할 정보 쓰는 칸 만들어주고 데이터를 추가/수정/조회 하는 servlet 파일들도 만들어줬다.

CreateBook.java

package com.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/CreateBook")
public class CreateBook extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("UTF-8");
		PrintWriter out = response.getWriter();
		String bookName = request.getParameter("book_name");
		String bookLoc = request.getParameter("book_loc");
		//입력받은 값들을 변수에 저장
		
		String driver = "oracle.jdbc.driver.OracleDriver";
		String url = "jdbc:oracle:thin:@localhost:1521:orcl";
		//맨뒷부분 orcl에 xe로 되어있는 분들도 계실거다. 
		String id = "scott";
		String pw = "tiger2";
		//연결할 테이블이 있는 계정의 아이디와 비번

		
		Connection con = null;
		Statement stmt = null;
		
		try {
			Class.forName(driver);
			//OracleDriver 로딩
			con = DriverManager.getConnection(url,id,pw);
			//자바와 오라클 연결
			stmt = con.createStatement();
			//쿼리 전송 객체
			String sql = "INSERT INTO book(book_id, book_name, book_loc)";
				sql += " VALUES (BOOK_SEQ.NEXTVAL, '" + bookName + "', '" + bookLoc + "')";
			//쿼리 작성
			int result = stmt.executeUpdate(sql);
			//쿼리 전송
			
			if(result ==1) { //결과가 1이면 성공
				out.println("INSERT success!!");
			}else { //0이면 접속 실패
				out.println("INSERT fail!!");
			}
		}catch (Exception e) {
			e.printStackTrace();
		}finally { // !! 꼭 여기서 위에 쓴 자원들을 닫아줘야한다.
			try {
				if(stmt != null) stmt.close();
				if(con!=null) con.close();
			}catch(Exception e) {
				e.printStackTrace();
			}
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

image-20200318205425906

image-20200318205441848

성공적으로 insert 됐다는 메세지가 나왔다

image-20200318205522354

기존에 넣어놨던 테이블에 데이터가 정상적으로 삽입되었다 !

SelectBook.java

package com.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/SelectBook")
public class SelectBook extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("UTF-8");
		PrintWriter out = response.getWriter();
		
		String driver = "oracle.jdbc.driver.OracleDriver";
		String url = "jdbc:oracle:thin:@localhost:1521:orcl";
		String id = "scott";
		String pw = "tiger2";
		
		Connection con = null;
		Statement stmt = null;
		ResultSet res = null;
		
		try {
			Class.forName(driver);
			
			con = DriverManager.getConnection(url,id,pw);
			stmt = con.createStatement();
			String sql = "SELECT * FROM book";
			res = stmt.executeQuery(sql);
			//데이터 입력,수정,삭제와 달리 조회일때만 ResultSet이 쓰인다.+executeQuery !
		
			
			while(res.next()) {
				//첫번째 행부터 테이블 마지막까지 돌면서 정보를 읽어온다
				int bookId = res.getInt("book_id");
				String bookName = res.getString("book_name");
				String bookLoc=res.getString("book_loc");
				
				out.print("bookId : " + bookId + ", ");
				out.print("bookName : " + bookName + ", ");
				out.print("bookLoc : " + bookLoc + "</br>");
				}
			}catch(Exception e) {
				e.printStackTrace();
			}finally {
				try {
					if(res != null) res.close();
					if(stmt != null) stmt.close();
					if(con != null) con.close();
				}catch (Exception e) {
					e.printStackTrace();
				}
			}
	}
		
	

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

image-20200318205736795

테이블도 잘 조회된다!

ModifyBook.java

package com.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/ModifyBook")
public class ModifyBook extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("UTF-8");
		PrintWriter out = response.getWriter();
		String driver = "oracle.jdbc.driver.OracleDriver";
		String url = "jdbc:oracle:thin:@localhost:1521:orcl";
		String id = "scott";
		String pw = "tiger2";
		
		Connection con = null;
		PreparedStatement pstmt = null;
		
		try {
			Class.forName(driver);
			
			con = DriverManager.getConnection(url,id,pw);
			String sql = "UPDATE book SET book_loc =? WHERE book_name = ?";
			
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1,"001-00007123");
			pstmt.setString(2,"book2");
			//pstmt(PreparedStatement)는 복잡하게 써진 sql문을 간단하게 표현수 있도록 도와준다.
			//pstmt.setString에 ? 가 써져있는 순서대로 값을 넣어주면 된다 !
			
			int result = pstmt.executeUpdate();
			if(result ==1) {
				out.println("UPDATE success!!");
			}else {
				out.println("UPDATE fail!!");
			}
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			try {
				if(pstmt != null)pstmt.close();
				if(pstmt!=null)con.close();
			}catch(Exception e) {
				e.printStackTrace();
			}
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

image-20200318205934799

image-20200318210006516

수정도 잘 되었다 ㅎ

3학년때 들었던 수업에서 jdbc를 후루룩 하고 지나갔어서 코드를 보니까 얼핏얼핏 기억이 났다. 오라클 삭제하고 다시 까느라 시간이 좀 걸렸다 ㅠ

Comments