JDBC
JDBC : Java Database Connectivity
자바 프로그램에서 SQL문을 실행하여 데이터를 관리하기 위한 JAVA API이다.
JDBC의 특징은 다양한 데이터베이스에 대해서 별도의 프로그램을 만들 필요 없이, 해당 데이터베이스의 JDBC를 이용하면 하나의 프로그램으로 데이터베이스를 관리 할 수 있다.
오라클 드라이버를 사용하기 위한 ojdbc6jar 파일 복사
오라클 JDBC 클래스 패스에 ojdbc 파일 복사 : C:\app\samdo\product\11.2.0\dbhome_3\jdbc\lib
이클립스에 설정되어 있는 JAVA 클래스 패스에 붙혀넣기: C:\Program Files\Java\jre1.8.0_161\lib\ext
데이터베이스 연결 순서
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <%@page import="java.sql.DriverManager"%> <%@page import="java.sql.Connection"%> <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <% Connection conn = null; String driver = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@localhost:1521:orcl"; Boolean connect = false; try { Class.forName(driver); conn = DriverManager.getConnection(url, "system", "1234"); connect = true; conn.close(); } catch (Exception e) { connect = false; e.printStackTrace(); } %> | cs |
Statement
executeQuery() : SQL문 실행 후 여러개의 결과값이 생기는 경우 사용 , SELECT
executeUpdate() : SQL문 실행 후 테이블의 내용만 변경되는 경우 사용 , INSERT, DELETE, UPDATE
1.Statement 객체는 Statement 인터페이스를 구현 한 객체를 Connection 클래스의 createStatement() 메소드를 호출함으로써 얻어진다.
2. Statement 객체가 생성되면 executeQuery() 메소드를 호출하여 SQL문을 실행시킬 수 있다. 메소드의 인수로 SQL문을 담은 String 객체를 전달한다.
3. Statement는 정적인 쿼리문을 처리할 수 있다. 즉, 쿼리문에 값이 미리 입력되어 있어야 한다.
PreparedStatement
1. PreparedStatement 객체는 Connection 객체의 PreparedStatement() 메소드를 사용해서 생성한다. 이 메소드는 인수로 SQl문을 담은 String 객체가 필요하다.
2. SQL문장이 미리 컴파일 되고, 실행 시간 동안 인수값을 위한 공간을 확보 할 수 있다는 점에서 Statement 객체와 다르다.
3. Statement 객체의 SQL은 실행 될 때 매번 서버에서 분석해야 하는 반면, PreparedStatement 객체는 한번 분석되면 재사용이 용이하다.
4. 각각의 인수에 대해 위치홀더를 사용하여 SQL문장을 정의 할 수 있게 해준다. 위치홀더는 ?로 표현된다.
5. 동일한 SQL문을 특정 값만 바꾸어서 여러번 실행해야 할 때, 인수가 많아서 SQL문을 정리해야 될 필요가 있을 때 사용하면 유용하다
Statement
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <%@page import="java.sql.*"%> <%@page import="javax.sql.*"%> <%@page import="javax.naming.*"%> <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <% 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(); } %> | cs |
preparedStatement
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | <%@page import="java.sql.*"%> <%@page import="javax.sql.*"%> <%@page import="javax.naming.*"%> <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <% 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<=10; i++){ stmt.setInt(1,i); stmt.setString(2, name[i-7]); if(stmt.executeUpdate()!=0){ out.println(i+"번 레코드를 등록 하였습니다."); } } }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> | cs |
커넥션 풀(DBCP)
클라이언트에서 다수의 요청이 발생 할 경우 데이터베이스에 부하가 발생하게 된다.
이러한 문제를 해결하기 위해서 커넥션 풀기법을 이용한다.
META-INF에 context.xml을 추가한다
tomcat컨테이너가 데이터베이스 인증을 하도록
context.xml
1 2 3 4 5 6 7 8 9 10 11 12 | <Context> <Resource name="jdbc/OracleDB" auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver" type="javax.sql.DataSource" url="jdbc:oracle:thin:@localhost:1521:orcl" username="system" password="1234" maxActive="20" maxIdle="10" maxWait="-1"/> </Context> | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <%@page import="java.sql.*"%> <%@page import="javax.sql.*"%> <%@page import="javax.naming.*"%> <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <% //META-INF에 context.xml에 해둠 Connection conn = null; try{ Context init = new InitialContext(); DataSource ds = (DataSource) init.lookup("java:comp/env/jdbc/OracleDB"); conn = ds.getConnection(); out.println("연결 되었습니다."); }catch(Exception e){ out.println("연결 실패."); 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> | cs |
'Web Programming > JSP' 카테고리의 다른 글
[JSP] Servlet (0) | 2018.07.10 |
---|---|
[JSP] FrontController Pattern & Command Pattern (0) | 2018.05.02 |
[JSP] DAO DTO (1) | 2018.05.01 |
[JSP] 자바빈을 이용한 회원가입 만들기 (4) | 2018.04.16 |
[JSP] 한글 처리 (1) | 2018.04.15 |