티스토리 뷰
//JDBC(Java data base connectivity) 프로그램 순서 7단계 01단계 :드라이버 로딩(mysql 드라이버 로딩) 02단계 :Connection객체로 DB연결 1)ip 2)port번호 3)db접속id 4)db접속비번 5)db명(sid,service name) 03단계 :Query실행을 위한 준비 ( statement 또는 PreparedStatement객체생성) 04단계 :Query실행 05단계 :Query실행결과 사용 (insert,update,delete의 경우 생략 가능단계) 06단계 :statement 또는 PreparedStatement객체 종료(close()) 07단계 :DB연결(Connection 객체) 종료(close()) |
1단계 mysql 드라이버 로딩
2단계 DB연결
String jdbcDriver = "jdbc:mysql://localhost:3306/dev41db?" +
"useUnicode=true&characterEncoding=euckr";
String dbUser = "dev41id";
String dbPass = "dev41pw";
DB명 : dev41db
dbid : dev41id
dvpw : dev41pw
conn = DriverManager.getConnection(jdbcDriver, dbUser, dbPass);
드라이버매니저 클래스 내에 getConnection 메서드는 String 타입으로 3개의 변수를 입력받았다.
입력받는 값은 3개(1. String url 2. String user 3. String password) 이지만,
DBMS 종류, MYSQL, IP, PORT 번호, DB명, DBID, DBPW 를 판단 후
정상이면 생성된 객체의 주소값을 리턴하고 아니면 에러가 발생한다.
3단계 쿼리실행준비
아래의 코드는 DBMS에서 쿼리실행결과를 확인하고 가져온다.
pstmt = conn.prepareStatement(
"INSERT INTO tb_member VALUES (?, ?, ?, ?, ?)");
conn 객체참조변수에 할당된 주소를 찾아가서 pprepareStatement 메서드를 호출하면
insert 쿼리문장을 매개변수에 입력후 메서드가 실행된다.
preapredStatement 를 통해 생성된 객체의주소값을 pstmt 객체참조변수에 할당한다.
pstmt.setString(1, m_id);
pstmt.setString(2, m_pw);
pstmt.setString(3, m_level);
pstmt.setString(4, m_name);
pstmt.setString(5, m_email);
pstmt 객체참조변수를 찾아가서 setString 메서드를 실행한다.
첫번째 위치는 String을 넣어야하고 m_id를 넣는다는 뜻이다.
4단계 쿼리 실행
int result = pstmt.executeUpdate();
pstmt 객체참조변수를 찾아가서 executeUpdate() 메서드를 실행한다.
executeUpdate() 메서드는 변경하는 명령어로 create, drop,insert, delete, update 가 있다.
수행결과로 int 타입의 값을 반환한다.
실행결과 콘솔창 :
11111<-- m_id /minsert/m_insert_pro.jsp 22222<-- m_pw /minsert/m_insert_pro.jsp 33333<-- m_level /minsert/m_insert_pro.jsp 44444<-- m_name /minsert/m_insert_pro.jsp 55555<-- m_email /minsert/m_insert_pro.jsp com.mysql.jdbc.JDBC4Connection@491592e7<-- conn class com.mysql.jdbc.JDBC4Connection<-- conn.getClass() com.mysql.jdbc.JDBC4PreparedStatement@52d7ee0c: insert INTO tb_member VALUES (** NOT SPECIFIED **, ** NOT SPECIFIED **, ** NOT SPECIFIED **, ** NOT SPECIFIED **, ** NOT SPECIFIED **)<-- pstmt 1 class com.mysql.jdbc.JDBC4PreparedStatement<-- pstmt.getClass() 1 com.mysql.jdbc.JDBC4PreparedStatement@52d7ee0c: insert INTO tb_member VALUES ('11111', '22222', '33333', '44444', '55555')<-- pstmt 2 1<-- result |
5단계 쿼리실행결과 활용
수행결과로
->INSERT, DELETE, UPDATE 관련 구문에서는 반영된 레코드의 건수를 반환한다.
->CREATE, DROP 관련 구문에서는 -1을 반환한다.
insert 한줄을 반영했으므로 1이 result로 반환되었다.
System.out.println(result + "<-- result");
6단계 객체를 종료한다.
pstmt.close();
conn.close();
pstmt , conn 객체를 종료한다.
전체코드 :
<%@ 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">
<%@ page import = "java.sql.DriverManager" %>
<%@ page import = "java.sql.Connection" %>
<%@ page import = "java.sql.PreparedStatement" %>
<%@ page import = "java.sql.SQLException" %>
<%
request.setCharacterEncoding("euc-kr");
Connection conn = null;
PreparedStatement pstmt = null;
//화면에서 입력자료 받아서 콘솔창에 출력 시작
String m_id = request.getParameter("m_id");
String m_pw = request.getParameter("m_pw");
String m_level = request.getParameter("m_level");
String m_name = request.getParameter("m_name");
String m_email = request.getParameter("m_email");
System.out.println(m_id + "<-- m_id /minsert/m_insert_pro.jsp");
System.out.println(m_pw + "<-- m_pw /minsert/m_insert_pro.jsp");
System.out.println(m_level + "<-- m_level /minsert/m_insert_pro.jsp");
System.out.println(m_name + "<-- m_name /minsert/m_insert_pro.jsp");
System.out.println(m_email + "<-- m_email /minsert/m_insert_pro.jsp");
//화면에서 입력자료 받아서 콘솔창에 출력 끝
//JDBC 프로그램 순서
//01단계 :드라이버 로딩 시작
//01단계 :드라이버 로딩 끝
try{
//02단계 :DB연결(Connection)시작
String jdbcDriver = "jdbc:mysql://localhost:3306/dev41db?" +
"useUnicode=true&characterEncoding=euckr";
String dbUser = "dev41id";
String dbPass = "dev41pw";
conn = DriverManager.getConnection(jdbcDriver, dbUser, dbPass);
//static
System.out.println(conn + "<-- conn");
System.out.println(conn.getClass() + "<-- conn.getClass()");
//02단계 :DB연결(Connection)끝
//03단계 :Query실행을 위한 statement 또는 prepareStatement객체생성 시작
pstmt = conn.prepareStatement(
"insert INTO tb_member VALUES (?, ?, ?, ?, ?)");
System.out.println(pstmt + "<-- pstmt 1");
System.out.println(pstmt.getClass() + "<-- pstmt.getClass() 1");
//insert into tb_member values('id001','pw001','관리자','홍01','email01');
pstmt.setString(1, m_id);
pstmt.setString(2, m_pw);
pstmt.setString(3, m_level);
pstmt.setString(4, m_name);
pstmt.setString(5, m_email);
System.out.println(pstmt + "<-- pstmt 2");
//03단계 :Query실행을 위한 statement 또는 prepareStatement객체생성 끝
//04단계 :Query실행 시작
int result = pstmt.executeUpdate();
System.out.println(result + "<-- result");
//04단계 :Query실행 끝
//05단계 :Query실행결과 사용 (insert의 경우 생략 가능단계)
}finally{
//06단계 :statement 또는 prepareStatement객체 종료(close())
if (pstmt != null) try { pstmt.close(); } catch(SQLException ex) {}
//07단계 :Connection 객체 종료(close())
if (conn != null) try { conn.close(); } catch(SQLException ex) {}
}
%>
'41기 개발자과정' 카테고리의 다른 글
20219026 - DML, DDL, DCL (0) | 2021.09.26 |
---|---|
20210924 mysql list처리 (0) | 2021.09.24 |
20210924 mysql 접근 오류페이지 (0) | 2021.09.24 |
20210923 - mysql DBMS 구축 (0) | 2021.09.23 |
20210917 jsp-session (0) | 2021.09.17 |