JDBC
JDBC
ㅠ 이전에 이미 깔아놓은 오라클이 있었는데 32비트를 설치해놔서 sql developer에 64비트로 설치되어있는 자바경로가 먹지 않았다. 그래서 깔끔하게 전부 삭제하고 다시 깔았다 ^^ …
일단 oracle developer에 데이터를 삽입조회수정삭제 할 테이블을 만들어줬다.
그리고 값을 추가하면 자동으로 증가 , 감소 시켜줄 시퀀스도 만들어줬다.
그다음 이클립스에서 오라클 데이터베이스를 쓰려면 JDBC라는 라이브러리를 써서 중간다리 역할을 해줘야한다.
Program Friles -> Java -> jre1.8.0_201 -> lib -> ext에 가면 이클립스에서 매번 쓰는 라이브러리들이 모여있다.
여기에 오라클데이터베이스를 설치한곳에 있는 jdbc 라이브러리를 추가해주면 된다.
이클립스에서 오라클 디비에 접속할 준비완료!
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);
}
}
성공적으로 insert 됐다는 메세지가 나왔다
기존에 넣어놨던 테이블에 데이터가 정상적으로 삽입되었다 !
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);
}
}
테이블도 잘 조회된다!
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);
}
}
수정도 잘 되었다 ㅎ
3학년때 들었던 수업에서 jdbc를 후루룩 하고 지나갔어서 코드를 보니까 얼핏얼핏 기억이 났다. 오라클 삭제하고 다시 까느라 시간이 좀 걸렸다 ㅠ
Comments