JDBC란 Java DataBase Connectivity를 의미합니다!
즉 DataBase의 쿼리를 자바와 연결시키는 것인데요.
저는 이번에 JDBC를 위해 Oracle을 사용할 예정입니다!
JSP이건 Servlet이건 자바를 이용하게됩니다.
이런 자바와 데이터베이스의 중간에서 브릿지 역할을 해주는것이 JDBC입니다.
JDBC에서 제공해주는 API를 이용해서 자바언에에서 데이터베이스에 접근하여 데이터베이스를 관리하게 됩니다.
저는 지금 이클립스를 이용해서 코딩을 하고 있는데 이런 API를 이용하기 위해서는 이클립스에 오라클 라이브러리를 이클립스에 복사해야합니다.
window - Preferences에 들어가서 Classpath Variables를 보면 우리가 실질적으로 쓰고있는 JRE라이브러리를 사용하고 있는 경로가 나오게 됩니다.
근데 만약 오라클 DB를 사용하기위해서는 오라클 라이브러리를 사용해야합니다.
오라클 라이브러리도 해당 경로에 있으면 됩니다!
오라클 라이브러리는
C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib
해당 경로에 있는데요.
해당 경로에 있는 ojdbc6버전을 사용할 예정입니다.
이 ojdbc6를 아까 jre lib폴더안의 ext폴더에 복사해서 넣어주시면 됩니다!
JDBC의 실행순서입니다.
OracleDriver 로딩을하고 Java와 Oracle을 연결하기위해 id와 pw를 입력해줍니다.
또 사용할 쿼리를 전송하기위한 객체를 생성하고 쿼리를 작성해서 전송합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="newBook" method="post">
book name : <input type="text" name="book_name"></br>
book location : <input type="text" name="book_loc"></br>
<input type="submit" value="book register">
</form>
</body>
</html>
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("/newBook")
public class NewBook extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=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:xe";
String id = "scott";
String pw = "tiger";
Connection con = null;
Statement stmt = null;
try {
Class.forName(driver);
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) {
out.print("INSERT success!!");
} else {
out.print("INSERT fail!!");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(stmt != null) stmt.close();
if(con != null) con.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
위의 코드를 이용하여 JDBC를 구현해봤습니다.
간단하게 설명을 해보자면
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String id = "scott";
String pw = "tiger";
해당 코드부터 실제 DB를 쓰기위한 코드입니다.
드라이버가 어디 있는지를 알려주고 url을 지정해줍니다.
그리고 우리가 생성했던 계정 정보를 입력해줍니다.
Connection con = null;
Statement stmt = null;
그리고 연결을 위한 Connection객체와 Statement객체를 생성하고
Class.forName(driver);
오라클드라이버 로딩을 합니다.
con = DriverManager.getConnection(url, id, pw);
로딩을 했다면 자바와 오라클을 연결해야합니다.
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) {
out.print("INSERT success!!");
} else {
out.print("INSERT fail!!");
}
앞서 전송했던 쿼리가 성공했다면 result에는 1이라는 값이 담기게 됩니다.
만약 성공했다면 성공했다는 메세지를 출력시키고 실패했다면 실패했다는 메세지를 출력합니다.
try {
if(stmt != null) stmt.close();
if(con != null) con.close();
} catch (Exception e2) {
e2.printStackTrace();
}
마지막에 코드가 모두 실행되고나면 데이터를 모두 반환해주어야 합니다.
그래야 정상적으로 프로그램이 종료되기 때문이죠!
이 글은 실전 JSP (renew ver.) - 신입 프로그래머를 위한 강좌를 수강하며 공부한 내용을 정리한 글입니다.
https://www.inflearn.com/course/실전-jsp_renew/dashboard
'Java 관련 > JSP & Servlet' 카테고리의 다른 글
[JSP & Servlet] Connection Pool (0) | 2022.08.25 |
---|---|
[JSP & Servlet] DAO와 DTO (0) | 2022.08.24 |
[JSP & Servlet] filter를 통한 한글처리 (0) | 2022.08.22 |
[JSP & Servlet] JSP Servlet의 한글처리 (0) | 2022.08.21 |
[JSP & Servlet] Session (1) | 2022.08.20 |