JDBC(Java Database Connectivity)
자바 프로그램과 관계형 데이터 베이스를 연결하는 인터페이스
- JDBC 라이브러리는 관계형 데이터베이스에 접근하고 SQL 쿼리문을 실행하는 방법을 제공한다.
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 인터페이스를 상속 받는다.
- INSERT, UPDATE, DELETE 문을 사용할 때 쓰이며, 실행한 행 수를 int 형으로 리턴한다.
객체 종료
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 |