티스토리 뷰
JDBC : Java DataBase Connectivity
- 자바 어플리케이션에서 표준화된 데이터 베이스 접근 제공
- 각 데이터 베이스 접속에 대한 상세한 정보를 알 필요 없음
- 이론적으로는 개발된 어플리케이션에서 DB변경 시 JDBC 드라이버만 교체
프로그래밍 단계
연결 정보
- IP 주소 : 오라클이 설치된 컴퓨터의 IP주소 혹은 도메인 이름
- 포트 : 오라클에서 네트워크를 통한 접속을 처리하기 위해 실행되어 있는 리스너의 사용 포트 -> 기본값 : 1521
- SID : 오라클 인스턴스 이름
1. JBDC 드라이버 로드
Class.forName(“oracle.jdbc.driver.OracleDriver”);
- 엑세스 DB인 경우
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
2. 데이터 베이스 연결
Connection conn = DriverManger.getConnection(JDBC_url,”아이디”,”비밀번호”);
- JDBC_URL 구성
JDBC:oracle:thin:@IP주소:포트:SID
3. Statement 생성
ⓐ Statement 객체 생성 후 SQL 문장을 변수 처리부와 함께 문자열로 구성
- 쿼리가 복잡해질수록 성능 저하 및 관리 어려움
Statement stmt = conn.createStatement( );
stmt.executeUpdate(“insert into test values(
'"+request.getParameter("username")+"','"+request.getP aramete ("email")+"')");
ⓑ PreparedStatement
- PreparedStatement 객체 생성시, SQL 문장을 미리 생성하고 변수부는 별도의 메소드로 대입하는 방식
- 성능과 관리면에서 모두 권장되는 방식
PreparedStatement pstmt = conn.prepareStatement(“insert into test values(?,?)”);
pstmt.setString(1,request.getParameter("username");
pstmt..setString(2, request.getParameter("email");
pstmt.executeUpdate();
4. SQL문 전송
5. 결과 받기
- 커서 개념의 연결 포인터
- 기본적으로 next( ) 메소드를 통해 로우 이동
ResultSet rs = pstmt.executeQuery( );
while(rs.next()) {
name = rs.getString(1); // or rs.getString(“name”);
age = rs.getInt(2); // or rs.getInt(“email”);
}
rs.close();
6. 연결 해제
- Connection을 close( ) 해주지 않으면 사용하지 않는 연결이 유지됨
- DB 자원 낭비
conn.close( );
[프로젝트 파일] -> [WebContent] -> [META-INF] -> context.xml 파일 추가
context.xml
<Context>
<Resource
name="jdbc/OracleDB"
auth="Container"
driverClassNaem="oracle.jdbc.driver.OracleDriver"
type="javax.sql.DataSource"
url="jdbc:oracle:thin:@localhost:1521:database"
username="scott" <!-- DB 사용 할 계정 -->
password="tiger" <!-- DB 사용 할 계정 비밀번호 -->
maxActive="20"
maxIdle="10"
maxWait="-1" />
</Context>
[프로젝트 파일] -> [WebContent] -> [WEB-INF] -> [lib] 파일에 있는 web.xml
- <resource-ref> 부분 추가로 입력
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<display-name>0430-jdbc</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 추가 -->
<resource-ref>
<description>Connection</description>
<res-ref-name>jdbc/OracleDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
연결 확인
- 방법1
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="java.sql.*"%>
<%
Connection conn = null;
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:database";
Boolean connect = false;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, "scott", "tiger");
connect = true;
conn.close();
} catch (Exception e) {
connect = false;
e.printStackTrace();
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>JDBC 연동 테스트 예제</title>
</head>
<body>
<h3>
<%
if (connect == true) {
%>
연결되었습니다
<%
} else {
%>
연결에 실패하였습니다
<%
}
%>
</h3>
</body>
</html>
- 방법2
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<%
Connection conn = null;
try {
Context init = new InitialContext();
DataSource ds = (DataSource) init.lookup("java:comp/env/jdbc/OracleDB");
conn = ds.getConnection();
out.println("<h3>연결되었습니다</h3>");
} catch (Exception e) {
out.println("<h3>연결에 실패하였습니다</h3>");
e.printStackTrace();
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
테이블 생성
- DB계정 로그인 후, student 테이블 생성
- 데이터 추가
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<%
Connection conn = null;
String sql = "INSERT INTO student(num, name) VALUES(6,'홍길동')";
try {
Context init = new InitialContext();
DataSource ds = (DataSource) init.lookup("java:comp/env/jdbc/OracleDB");
conn = ds.getConnection();
Statement stmt = conn.createStatement();
int result = stmt.executeUpdate(sql);
if (result != 0) {
out.println("<h3>레코드가 등록되었습니다</h3>");
}
} catch (Exception e) {
out.println("<h3>레코드 등록에 실패하였습니다</h3>");
e.printStackTrace();
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
데이터가 추가된 것을 확인 할 수 있다
- 데이터 여러개 추가
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<%
String[] name = { "공씨", "류씨", "변씨" };
Connection conn = null;
String sql = "INSERT INTO student(num, name) VALUES(?,?)";
try {
Context init = new InitialContext();
DataSource ds = (DataSource) init.lookup("java:comp/env/jdbc/OracleDB");
conn = ds.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql);
for (int i = 7; i <= 9; i++) { //홍길동이 6이라서 7부터 시작
stmt.setInt(1, i);
stmt.setString(2, name[i - 7]);
if (stmt.executeUpdate() != 0) {
out.println("<h3>" + i + "번 레코드 등록 완ㅡ료</h3>");
}
}
} catch (Exception e) {
out.println("<h3>레코드 등록에 실패하였습니다</h3>");
e.printStackTrace();
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
데이터가 추가 된 것을 확인 할 수 있다
- 데이터 불러오기
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<%
Connection conn = null;
String sql = "SELECT * FROM student";
try {
Context init = new InitialContext();
DataSource ds = (DataSource) init.lookup("java:comp/env/jdbc/OracleDB");
conn = ds.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while(rs.next()){
out.println("<h3>"+rs.getInt(1)+". "+rs.getString(2)+"</h3>");
}
rs.close();
} catch (Exception e) {
out.println("<h3>데이터 가져오기 실패!</h3>");
e.printStackTrace();
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
데이터가 출력되는 것을 볼 수 있다
'DATABASE > JDBC' 카테고리의 다른 글
[JDBC] IMAGE THUMBNAIL (0) | 2018.05.01 |
---|---|
[JDBC] FILE UPLOAD (0) | 2018.05.01 |
[JDBC] 회원가입 (1) | 2018.05.01 |
[JDBC] BASIC THINGS (0) | 2018.04.30 |