<test.jsp>

[Test.jsp]

<%@ 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>
   저장완료
</body>
</html>

<db 연결 파일>

package A1101.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;

import A1101.conn.DBConn;
import A1101.model.T1101Vo;


public class InsertDao implements InsertDaoI {
      Connection conn = null;
      PreparedStatement pstmt = null;

      @Override
      public void insert(T1101Vo m) {
         try {
            conn = DBConn.getConnection();
            
            String sql = "insert into T20191101 values(sT20191101.nextval, ?, ?, ?, ?, ?)";
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, m.getId());
            pstmt.setString(2, m.getName());
            pstmt.setString(3, m.getPwd());
            pstmt.setInt(4, m.getAge());
            pstmt.setString(5, m.getEmail());
            
            pstmt.executeUpdate();
         } catch (Exception e) {
            e.printStackTrace();
         } finally {
            DBConn.close(pstmt, conn);
         }
      }

   }

<vo 파일>

package A1101;

public class T1101Vo {
    private int idx;    
    private String id;  
    private String name;
    private String pwd;
    private int age;
    private String email;
    
    
        
    
    
    T1101Vo(String id,String name,String pwd,int age, String email){
       this.id=id;
       this.name=name;
       this.pwd=pwd;
       this.age=age;
       this.email=email;
    }
    
    
    
   public int getIdx() {
      return idx;
   }
   public void setIdx(int idx) {
      this.idx = idx;
   }
   public String getId() {
      return id;
   }
   public void setId(String id) {
      this.id = id;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getPwd() {
      return pwd;
   }
   public void setPwd(String pwd) {
      this.pwd = pwd;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   public String getEmail() {
      return email;
   }
   public void setEmail(String email) {
      this.email = email;
   }
   
   @Override
   public String toString() {
       return "T1101Vo [idx=" + idx + ", id=" + id + ", name=" + name + ", pwd=" + pwd + ", age=" + age + ", email="
         + email + "]";
   } 
   
   
   

}

<서블릿>

package A1101.controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import A1101.model.T1101Vo;
import A1101.service.InsertService;
import A1101.service.InsertServiceI;

/**
 * Servlet implementation class InsertController
 */
@WebServlet("/InsertController")
public class InsertController extends HttpServlet {
   private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public InsertController() {
        super();
        // TODO Auto-generated constructor stub
    }

   /**
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    */
   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      // TODO Auto-generated method stub
      String id =request.getParameter("id");
      String name =request.getParameter("name");
      String pwd = request.getParameter("pwd");
      int age =Integer.parseInt(request.getParameter("age"));
      String email =request.getParameter("email");
      
      InsertServiceI s = new InsertService();
      T1101Vo m = new T1101Vo(id,name,pwd,age,email);
      s.insert(m);
      
      
      RequestDispatcher dispatcher=request.getRequestDispatcher("/A1101/Test.jsp");
      dispatcher.forward(request, response);
      
   }

   /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    */
   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      // TODO Auto-generated method stub
      doGet(request, response);
   }

}

<가입 폼>

<%@ 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>
<h2>회원가입 폼만들기</h2>

<form action="<%=request.getContextPath()%>/InsertController">
아 디 :   <input type="text" name = id>  <br>
이 름 : <input type="text" name =name><br>
암 호 :   <input type="text" name =pwd><br>
나 이 :   <input type="text" name =age><br>
메 일 :   <input type="text" name =email><br>
<input type="submit" value="가입">
</form>



</body>
</html>

 

 

 

JSP에서 한글을 url로 그대로 보내면 오류가 발생한다.

그러므로 아래와 같이 한글 url 처리를 진행해줘야 한다.

1. <% rquest.setCharacterEncoding("utf-8"); %>을 먼저 선언해준다.

2. java.net.URLEncoder.encode(ch2, "utf-8"); 를 사용하여 URLch2에 한글 인코딩한 것을 넣어준다.

링크로 보낼 때는 위에 형변환 URLch2를 보내준다.

 

<에러사항>

위와 같이 if ~ null 작업을 하는 이유는 처음 실행시 ch2가 null일 때 URLch2에 null 값이 들어가면 오류가 발생한다.

오류는 아래 null 값이 들어갈 때 오류를 보도록하자.

 

 

위와 같이 null 작업을 안할 경우 위와 같은 문제가 발생한다.

그러므로 꼭 null 작업을 해주도록하자.

 

콘솔에 print를 하고 싶을 경우 System.out.pirnt로 아래 콘솔에 출력할 수 있다.

위와 같이 System.out.print를 하면 아래와 같이 정상 출력된 것을 확인할 수 있다.

위와 같이 익스포트를 진행할 수 있으니

순서대로 진행하도록하자.

'[DB]' 카테고리의 다른 글

[DB개념] 식별, 비식별관계  (0) 2019.12.07
[오라클] 복합키에 관하여(pk 2개)  (0) 2019.12.06
[MySQL 개념] 부속쿼리와 join의 차이  (0) 2019.11.16
[오라클] 오라클 자료형  (0) 2019.10.22
[MySQL] 자료형  (0) 2019.10.14

위와 같이 PreparedStatement의 setString를 사용하여

sql문에 ?를 대입하여 입력하였다.

 

검색을 진행하였으나 위와 같이 아무런 것도 검색이 안되는 문제가 발생하였다.

그리고 콘솔 확인시 부적합한 열 인덱스 오류가 발생하는 것으로 확인된다.

해당 오류의 원인은 아래 문구에 있었던 것으로 확인된다.

 

setString, setInt의 경우 대입되는 값에 ''가 붙게된다 아래 예시를 들도록하겠다.

String test = "hi";
int num = 1;
setString(1, test);
setInt(2, num);

위의 코드 실행시 setString과 setInt의 인자는 전달될 때 ''가 붙어서 전달된다.

그러므로 test는 'hi'가 되고 num은 '1'이 된다.

 

그럼 ''가 붙었다고 오류가 발생되는 이유는 무엇일까

이유는 아래 코드를 다시 보도록하자

위의 코드를 보면 첫번째 ?에서 칼럼명을 전달하고 두번째 ?에서 검색할 값을 전달한다.

그런데 칼럼명에는 ''를 넣지않았다.

예를들어 칼럼명이 hi라면 setString으로 전달된 인자는 'hi'라고 전달된다.

그런데, 칼럼명에는 hi라는 칼럼명이 있지만 'hi'라는 칼럼명은 없기 때문에 위와 같이 부적합한 열 인덱스라는 오류가 발생한다.

 

또한 '%?%'역시 두번째 물음표에 모모라고 검색했을시 '%'모모'%'라고 검색되기 때문에 동일하게 오류가 발생되게 된다.

 

그렇다면 해당 문제는 어떻게 해결할 수 있을까?

아래와 같이 해결할 수 있다.

 위의 코드를 분석해보면 해결할 수 있다.

우선 칼럼명은 위와 같은식으로 +칼럼명+ 식으로 해결하였고

검색하는 것은 위에 주석처리한 부분에 설명된 것처럼 해결하였다.

 

그러므로 위와 같이 PreparedSetstring을 사용할 경우 위와 같은 문제 해결을 할수 있으니 참고하도록하자

 

추가로 숫자의 경우는 문제 없을까?

숫자의 경우 오라클에서 확인이 가능하듯이 ''가 붙어도 정상 조회가 되니 참고하도록하자

+ Recent posts