Purple Bobblehead Bunny

Backend/JSP SERVLET

[JSP] JDBC

준영어린이 2022. 7. 2. 14:25

 

JDBC(Java Database Connectivity)

자바 프로그램과 관계형 데이터 베이스를 연결하는 인터페이스

- JDBC 라이브러리는 관계형 데이터베이스에 접근하고 SQL 쿼리문을 실행하는 방법을 제공한다.

 

jsp 프로젝트에 JDBC 설치

 

 

JDBC 드라이버 테스트

<%@ 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>
	<%@page import="java.sql.*, java.util.*" %>
	<%
	String url = "jdbc:oracle:thin:@localhost:1521:xe";
   	String id  = "book_ex";
   	String pw  = "1234";
    Connection conn = null;
    try{
    	// 드라이버 적재
    	Class.forName("oracle.jdbc.driver.OracleDriver");
        // DB에 연결
        conn = DriverManager.getConnection(url,id,pw);
        System.out.println("Connected...");
       }catch(Exception e) {
       	 e.printStackTrace();
       }finally{
       	   try{conn.close();}catch(Exception e1) {e1.printStackTrace();}
       }
	%>
</body>
</html>

Connection 객체

DB를 연동 해 여러 작업을 하기 위해 필요.

DriverManager 객체의 getConnection 메서드를 호출하여 매개값으로 호스트 이름과 포트,SID의 접속 정보가 들어있는 url, 접근할 테이블이 있는 계정의 아이디, 비밀번호를 받아 Connection 객체를 생성한다.

 

 

Class 클래스의 forName 메서드

입력한 클래스를 불러오는 메서드로, 그 클래스에 접근 가능하게 해준다.

ojdbc6.jar 안의 oracle.jdbc 패키지 안에 있는 OracleDriver 클래스를 불러온다. 

== JDBC 드라이버를 불러오는 것

 

 

insert

<%@ 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>
<%@page import="java.sql.*, java.util.*" %>
	<%
	String url = "jdbc:oracle:thin:@localhost:1521:xe";
	String id = "book_ex";
	String pw = "1234";
	Connection conn=null;
	PreparedStatement pstmt = null;
	ResultSet rs = null;
	try{
		//드라이버 적재
		Class.forName("oracle.jdbc.driver.OracleDriver");
		//DB에 연결
		conn = DriverManager.getConnection(url,id,pw);
		System.out.println("Connected...");
		//쿼리 객체 생성
		pstmt = conn.prepareStatement("insert into tbl_board values(?,?,?,?)");
		pstmt.setInt(1,1);
		pstmt.setString(2,"Title1");
		pstmt.setString(3,"Content1");
		pstmt.setString(4,"Writer1");
		int result = pstmt.executeUpdate(); //executeUpdate() : 딜리트, 인설트, 업데이트 
		
		if(result>0)
		{
			%>
			<script>
			alert("INSERT성공");
			</script>
			<%
		}
	}catch(Exception e){
		e.printStackTrace();
	}finally{
		try{pstmt.close();}catch(Exception e1){e1.printStackTrace();} //커넥션 객체 자원 정리 !
		try{conn.close();}catch(Exception e1){e1.printStackTrace();}
	}
	%>
</body>
</html>

JDBC 객체 초기화

Connection conn = null;   PreparedStatement pstmt=null;   ResultSet rs=null;

 

JDBC의 객체로 객체참조변수를 선언하고, null로 초기화 하는 작업

 

 

ResultSet 객체

입력한 SQL문이 select 문일 경우, 반환되는 데이터를 얻어올 때 필요하다.

PreparedStatement 객체의 exeecuteQuery 메서드를 사용하여 반환된 SQL문(SELECT문)의 결과를 ResultSet 객체로 받는다.

 

Set 

pstmt.setInt(1,1);
pstmt.setString(2,"Title1");
pstmt.setString(3,"Content1");
pstmt.setString(4,"Writer1");

 

쿼리문을 만들 때 ? 로 비웠던 부분에 데이터를 넣는 과정.

인덱스에 해당하는 숫자는 물음표의 순번이다.

 

setString(int, String) 인덱스를 String 값으로 지정한다.
setCharacter(int, Reader, int) 인덱스의 파라미터 값을 LONG VARCHAR로 지정
인덱스, 읽어올 스트림, 길이
setInt(int, int) 인덱스를 int 값으로 지정
setLong(int, long) 인덱스를 long으로 지정
setDouble(int, double) 인덱스를 double로 지정
setFloat(int, float) 인덱스를 float로 지정
setTime(int, time) 인덱스를 java.sql.Time으로 지정

 

 

PreparedStatement 객체

DB에 SQL문을 보내기 위해 필요.

Connection 객체에 입력된 정보를 이용하여 DB에 접근하므로 먼저 Connection 객체가 필요하다.

Connection 객체의 prepareStatement 메서드에 SQL문을 입력하여 PreparedStatement 객체를 생성한다.

ResultSet 객체는 입력한 SQL

 

 

PreparedStatement 메서드

  • executeQuery(String sql) 
    • SELECT 문을 사용할 때 쓰이며, ResultSet 타입을 리턴한다.
  • executeUpdate(String sql)
    • INSERT, UPDATE, DELETE 문을 사용할 때 쓰이며, 실행한 행 수를 int 형으로 리턴한다.
      • PreparedStatement는 인터페이스로, Statement 인터페이스를 상속 받는다.

 

객체 종료 

rs.close();          - resultSet 객체 종료

pstmt.close();    - PreparedStatement 객체 종료

conn.close();     - Connection 객체 종료

 

 

 

 


select

<%@ 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>
	<%@page import="java.sql.*,java.util.*" %>
	<%
	
		String url = "jdbc:oracle:thin:@localhost:1521:xe"; //URL
		String id = "book_ex";	//ID
		String pw = "1234";		//PW
		
		Connection conn=null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try{
		//드라이버 적재
		Class.forName("oracle.jdbc.driver.OracleDriver");
		//DB에 연결 
		conn = DriverManager.getConnection(url,id,pw);
		System.out.println("Connected...");
		//쿼리객체 
		pstmt = conn.prepareStatement("select * from tbl_board");
		
		//쿼리 전송
		rs = pstmt.executeQuery();
		while(rs.next())
		{
			out.print(rs.getInt("bno")+" | ");
			out.print(rs.getString("title")+" | ");
			out.print(rs.getString("content")+" | ");
			out.print(rs.getString("writer")+"<br>");
			
		}
		
		
		
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			try{rs.close();}catch(Exception e1){e1.printStackTrace();}
			try{pstmt.close();}catch(Exception e1){e1.printStackTrace();}
			try{conn.close();}catch(Exception e1){e1.printStackTrace();}
		}
	
	%>
</body>
</html>

Result객체의 next 메서드

 

다음 행으로 커서를 이동하며, 다음 행이 있으면 true, 없으면 false 리턴

ResultSet 객체의 getString은 입력된 이름의 열을 찾아 String타입으로 리턴하며,

getDouble도 마찬가지로 double형으로 리턴한다.

 

 

 

 

 

update

<%@ 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>
	<%@page import="java.sql.*,java.util.*" %>
	<%
	
		String url = "jdbc:oracle:thin:@localhost:1521:xe"; //URL
		String id = "book_ex";	//ID
		String pw = "1234";		//PW
		
		Connection conn=null;
		PreparedStatement pstmt = null;
		try{
		//드라이버 적재
		Class.forName("oracle.jdbc.driver.OracleDriver");
		//DB에 연결 
		conn = DriverManager.getConnection(url,id,pw);
		System.out.println("Connected...");
		pstmt=conn.prepareStatement("update tbl_board set title=?,content=? where bno=?");
		pstmt.setString(1,"UpdateTitle!");
		pstmt.setString(2,"UpdateContent!");
		pstmt.setInt(3,100);
		
		int result = pstmt.executeUpdate();
		
		if(result>0)
			System.out.println("성공!");
		else
			System.out.println("실패");
		
		
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			try{conn.close();}catch(Exception e1){e1.printStackTrace();}
		}
	%>
</body>
</html>

 

 

 

delete

<%@ 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>
<%@page import="java.sql.*, java.util.*" %>
	<%
	String url = "jdbc:oracle:thin:@localhost:1521:xe";
	String id = "book_ex";
	String pw = "1234";
	Connection conn=null;
	PreparedStatement pstmt = null;
	ResultSet rs = null;
	try{
		//드라이버 적재
		Class.forName("oracle.jdbc.driver.OracleDriver");
		//DB에 연결
		conn = DriverManager.getConnection(url,id,pw);
		System.out.println("Connected...");
		//쿼리 객체 생성
		pstmt = conn.prepareStatement("delete from tbl_board where bno=100");
		
		int result = pstmt.executeUpdate();
		
		if(result>0)
		{
			System.out.println("성공"	);
		}
		else
		{
			System.out.println("실패"	);
		}
	}catch(Exception e){
		e.printStackTrace();
	}finally{
		try{pstmt.close();}catch(Exception e1){e1.printStackTrace();} //커넥션 객체 자원 정리 !
		try{conn.close();}catch(Exception e1){e1.printStackTrace();}
	}
	%>
</body>
</html>

 

'Backend > JSP SERVLET' 카테고리의 다른 글

[Servlet] doGet, doPost  (0) 2022.07.04
[Servlet] 서블릿 이해  (0) 2022.07.04
[Servlet]MVC Pattern  (0) 2022.07.01
[JSP] 쿠키, Cookie  (0) 2022.06.30
[JSP] request.getParameter(), getAttribute()  (0) 2022.06.28