Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 기본
- struts2
- JavaScript
- oracle
- 오버로딩
- 국제화
- HTML
- 메소드
- Menu
- Spring
- Android
- 에러페이지
- paint
- 이클립스
- 전화걸기
- AWT
- mybatis
- 메서드
- 배열
- Eclips
- 예외처리
- 생성자
- 클래스
- Graphic
- OGNL
- layout
- JSP
- Java
- 어노테이션
- 안드로이드
Archives
- Today
- Total
note
PreparedStatement Statement 의 차이점(SELECT),(INSERT) 본문
파일위치
PreparedStatement
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.sql.*" %> <!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=UTF-8"> <title>테이블의 레코드를 화면에 표시하는 예제</title> </head> <body> <h2>member1 테이블의 레코드를 화면에 표시하는 예제</h2> <table width="550" border="1"> <tr> <td width="100">아이디</td> <td width="100">패스워드</td> <td width="100">이름</td> <td width="100">가입일자</td> </tr> <% Connection conn = null; PreparedStatement pstmt=null; ResultSet rs = null; try{ String jdbcUrl ="jdbc:oracle:thin:@localhost:1521:orcl"; String dbId="hr"; String dbPass="hr"; //JDBC 수행 1 단계 : jdbc driver 로드 Class.forName("oracle.jdbc.driver.OracleDriver"); //JDBC 수행 2단계: Connection 객체 생성 conn=DriverManager.getConnection(jdbcUrl,dbId,dbPass); String sql ="select * from member1"; //JDBC 수행 3단계 : PreparedStatement 객체 생성 pstmt=conn.prepareStatement(sql); //JDBC 수행 4단계 : sql문 실행 //JDBC 수행 5단계 : sql문의 실행으로 얻어진 레코드를 담는 ResultSet 객체 생성 //ResultSet은 커서의 개념이 있어서 next()메소드 사용시 데이터가 있는곳까지만 데이터 뽑아냄 rs=pstmt.executeQuery(); while(rs.next()){ String id = rs.getString("id"); String passwd = rs.getString("passwd"); String name = rs.getString("name"); Timestamp register = rs.getTimestamp("register"); %> <tr> <td width="100"><%=id %></td> <td width="100"><%=passwd %></td> <td width="100"><%=name %></td> <td width="100"><%=register.toString() %></td> </tr> <% } }catch(Exception e){ e.printStackTrace(); }finally{ if(rs != null) try{rs.close();}catch(SQLException sqle){} if(pstmt != null) try{rs.close();}catch(SQLException sqle){} if(conn != null) try{rs.close();}catch(SQLException sqle){} } %> </table> </body> </html>
Statement
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.sql.*" %> <!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=UTF-8"> <title>테이블의 레코드를 화면에 표시하는 예제</title> </head> <body> <h2>member1 테이블의 레코드를 화면에 표시하는 예제</h2> <table width="550" border="1"> <tr> <td width="100">아이디</td> <td width="100">패스워드</td> <td width="100">이름</td> <td width="100">가입일자</td> </tr> <% //PreparedStatement -> Statement 차이점 Connection conn = null; Statement stmt=null; //PreparedStatement pstmt=null; ResultSet rs = null; try{ String jdbcUrl ="jdbc:oracle:thin:@localhost:1521:orcl"; String dbId="hr"; String dbPass="hr"; //JDBC 수행 1 단계 : jdbc driver 로드 Class.forName("oracle.jdbc.driver.OracleDriver"); //JDBC 수행 2단계: Connection 객체 생성 conn=DriverManager.getConnection(jdbcUrl,dbId,dbPass); String sql ="select * from member1"; //JDBC 수행 3단계 : Statement 객체 생성 //pstmt=conn.prepareStatement(sql); stmt = conn.createStatement(); //JDBC 수행 4단계 : sql문 실행 //JDBC 수행 5단계 : sql문의 실행으로 얻어진 레코드를 담는 ResultSet 객체 생성 //ResultSet은 커서의 개념이 있어서 next()메소드 사용시 데이터가 있는곳까지만 데이터 뽑아냄 //rs=pstmt.executeQuery(); rs=stmt.executeQuery(sql); //차이점은 sql문장 실행시킬때 sql을 넘김 while(rs.next()){ String id = rs.getString("id"); String passwd = rs.getString("passwd"); String name = rs.getString("name"); Timestamp register = rs.getTimestamp("register"); %> <tr> <td width="100"><%=id %></td> <td width="100"><%=passwd %></td> <td width="100"><%=name %></td> <td width="100"><%=register.toString() %></td> </tr> <% } }catch(Exception e){ e.printStackTrace(); }finally{ if(rs != null) try{rs.close();}catch(SQLException sqle){} if(stmt != null) try{rs.close();}catch(SQLException sqle){} if(conn != null) try{rs.close();}catch(SQLException sqle){} } %> </table> </body> </html>
PreparedStatement 가 더 나은 방법이라 함
더 나은 방법이란것을 뒷받침 하기 위한 예제
INSERT
Statement 사용시 ' 사용시 에러가 났음
'' 두개 사용시 '하나만 표시가 됨
잘 들어간다
Statement 사용시 ' 사용시 에러가 났음
'' 두개 사용시 '하나만 표시가 됨
어느 사용자가 '를 사용하기 위해''를 두번 넣는 수고를 할까?
PreparedStatement 실행
잘 들어간다
PreparedStatement
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.sql.*" %> <% request.setCharacterEncoding("utf-8"); //전송된 데이터 처리 String id= request.getParameter("id"); String passwd= request.getParameter("passwd"); String name= request.getParameter("name"); //전송되지 않은 데이터를 jsp에서 생성함(날짜/시간) Timestamp register= new Timestamp(System.currentTimeMillis()); Connection conn = null; PreparedStatement pstmt = null; try{ String jdbcUrl ="jdbc:oracle:thin:@localhost:1521:orcl"; String dbId="hr"; String dbPass="hr"; //JDBC 수행 1단계 : jdbc driver 로드 Class.forName("oracle.jdbc.driver.OracleDriver"); //JDBC 수행 2 단계 : Connection 객체 생성 conn =DriverManager.getConnection(jdbcUrl,dbId,dbPass); //sql 수행문 테이블명 뒤에 부분적으로 수정할경우에는 컬럼명을 입력해야됨 //member1 (id,passwd,name,register) 모든 데이터를 추가할경우는 생략가능 String sql = "insert into member1 values(?,?,?,?)"; //JDBC 수행 3단계 : PreparedStatement 객체 생성 //위에 sql문장을 저장시키고 각물음표에 매칭시키기 pstmt = conn.prepareStatement(sql); pstmt.setString(1,id); pstmt.setString(2,passwd); pstmt.setString(3,name); pstmt.setTimestamp(4,register); //JDBC 수행 4단계 : SQL 문 실행 pstmt.executeUpdate(); }catch(Exception e){ e.printStackTrace(); }finally{ //자원 정리 if(pstmt != null) try{pstmt.close();}catch(SQLException sqle){} if(conn != null) try{pstmt.close();}catch(SQLException sqle){} } %> <!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=UTF-8"> <title>레코드 삽입 (추가) 예제</title> </head> <body> member 1 테이블에 새로운 레코드를 삽입(추가) 했습니다. </body> </html>
Statement
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.sql.*" %> <% request.setCharacterEncoding("utf-8"); //전송된 데이터 처리 String id= request.getParameter("id"); String passwd= request.getParameter("passwd"); String name= request.getParameter("name"); //전송되지 않은 데이터를 jsp에서 생성함(날짜/시간) Timestamp register= new Timestamp(System.currentTimeMillis()); Connection conn = null; Statement stmt = null; try{ String jdbcUrl ="jdbc:oracle:thin:@localhost:1521:orcl"; String dbId="hr"; String dbPass="hr"; //JDBC 수행 1단계 : jdbc driver 로드 Class.forName("oracle.jdbc.driver.OracleDriver"); //JDBC 수행 2 단계 : Connection 객체 생성 conn =DriverManager.getConnection(jdbcUrl,dbId,dbPass); //sql 수행문 테이블명 뒤에 부분적으로 수정할경우에는 컬럼명을 입력해야됨 //member1 (id,passwd,name,register) 모든 데이터를 추가할경우는 생략가능 //직접 매칭시킴 String sql = "insert into member1 values('"+id+"','"+passwd+"','"+name+"',sysdate)"; //JDBC 수행 3단계 : Statement 객체 생성 stmt = conn.createStatement(); //JDBC 수행 4단계 : SQL 문 실행 stmt.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); }finally{ //자원 정리 if(stmt != null) try{stmt.close();}catch(SQLException sqle){} if(conn != null) try{stmt.close();}catch(SQLException sqle){} } %> <!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=UTF-8"> <title>레코드 삽입 (추가) 예제</title> </head> <body> member 1 테이블에 새로운 레코드를 삽입(추가) 했습니다. </body> </html>
Statement가 코드량이 적은건 사실이지만
기능적인 문제가 있는것도 사실이다
Statement보단 PreparedStatement를 사용하는것이 낫지 않을까?
Statement보단 PreparedStatement를 사용하는것이 낫지 않을까?
'JSP > 기본' 카테고리의 다른 글
방명록 MODEL1 방식 ORACLE (0) | 2012.02.13 |
---|---|
JSP MODEL1 방식 (0) | 2012.02.10 |
JSP 자바빈 사용하기(자동 생성방법) , 액션태그,getProperty,setProperty 사용 (0) | 2012.02.08 |
JSP 세션 Session (0) | 2012.02.07 |
JSP 쿠키 생성,보기,삭제,수정 (0) | 2012.02.07 |