본문 바로가기

Program/JSP

HTML 연동

22.08.04-HTML 연동

HTML연동


<%@ page contentType="text/html;charset=utf-8"%><!--날라오는 문서에 대한 인코딩-->
<%@ page import ="java.sql.*"%>
<%!
    //선언부
    String url = "jdbc:oracle:thin:@localhost:1521:XE";
    String user="java";
    String password="1234";
%>

<%
    //스클립틀릿:로직작성
    //out.print("이jsp에서 회원을 처리");
    //클라이언트인 브라우저가 전송한 파라미터(전송변수 즉 html에서의 name)들을 받기

    request.setCharacterEncoding("utf-8");//전송받는 파라미터값들에 대한 인코딩
    String user_id        = request.getParameter("user_id");
    String pass            = request.getParameter("pass");
    String user_name    = request.getParameter("user_name");
    String mail_id        = request.getParameter("mail_id");
    String myserver        = request.getParameter("myserver");
    String mail_server        = request.getParameter("mail_server");
    String tel1                = request.getParameter("tel1");
    String tel2                = request.getParameter("tel2");
    String tel3                = request.getParameter("tel3");
    String social1            = request.getParameter("social1");
    String social2            = request.getParameter("social2");
    String gender            = request.getParameter("gender");
    //취미는 파라미터가 배열로 되어 있으므로, 배열로 받아야한다.
    String[] hobby        = request.getParameterValues("hobby");
    out.print("취미 수 "+hobby.length);
    //직접 입력한 이메일 서버가 있다면, 그걸 우선해주고, 없다면 select박스 값을넣는다.
    String email=null;
    //email = mail_id
    String s =null;
    if(myserver.length()>0){//직접 입력을 한 경우
        s=myserver; 
    }else{
        s=mail_server;
    }
    email = mail_id+"@"+s;

    out.print("userid "+user_id);
    out.print("<br>");
    out.print("pass "+pass);
    out.print("<br>");
    out.print("username "+user_name);
    out.print("<br>");
    out.print("maili "+mail_id);
    out.print("<br>");
    out.print("server "+mail_server);
    out.print("<br>");
    out.print("social "+social1);
    out.print("<br>");
    out.print("social2 "+social2);
    out.print("<br>");
    out.print("gender "+gender);
    out.print("<br>");

    /*오라클 테이블에 레코드 삽입 
        1)해당 DBMS제품에 맞는 드라이버 로드 
        2)접속
        3)쿼리문
        4)DB관련 연결 닫기
    */
    Class.forName("oracle.jdbc.driver.OracleDriver");

    Connection con = DriverManager.getConnection(url,user,password);
    if(con==null){out.print("오라클 접속 실패<br>");}else{out.print("성공");}

    String sql ="INSERT INTO member(member_id,user_id,pass,user_name,email,tel1,tel2,tel3,social1,social2,gender)";
    sql+=" VALUES(seq_member.nextval,?,?,?,?,?,?,?,?,?,?)";

    //PreparedStatement 는 인터페이스이므로, new로 직접 생성할 수 없는데 Connection객체로부터 인스턴스를 얻어올 수 있다. 즉 접속이 성공되면 얻어올 수 있다.
    PreparedStatement pstmt=con.prepareStatement(sql);//인터페이스임
    //바인드 변수값 할당
    pstmt.setString(1,user_id);
    pstmt.setString(2,pass);
    pstmt.setString(3,user_name);
    pstmt.setString(4,email);
    pstmt.setString(5,tel1);
    pstmt.setString(6,tel2);
    pstmt.setString(7,tel3);
    pstmt.setString(8,social1);
    pstmt.setString(9,social2);
    pstmt.setString(10,gender);

    int result = pstmt.executeUpdate();//DML 수행 메소드 
    if(result==0){out.print("입력실패");
    }else out.print("입력성공");

    //member 테이블에 레코드가 입력된 시점에 pk인 member_id를 가져와야한다.
    //접속을 할때 세션이 일어나는데 시퀀스에서 curVal을 사용하면 최근에 세션내에 일어난 시퀀스를 가져온다.
    //MAX()문은 위험 : dbms는 다중 사용자 서버이므로, 동시 사용시 데이터의 일관성이 깨짐
    sql="SELECT seq_member.currval AS member_id FROM dual";
    PreparedStatement pstmt2 = con.prepareStatement(sql);
    ResultSet rs = pstmt2.executeQuery();
    int member_id=0;
    if(rs.next()){//next()호출시 true라면 
        member_id = rs.getInt("member_id");
    }

    //hobby테이블에 취미 넣기 
    PreparedStatement pstmt3=null;
    for(int i=0; i<hobby.length;i++){
        sql ="INSERT INTO hobby(hobby_id,member_id,hobby_name) VALUES(seq_hobby.nextval,?,?)";
        //PreparedStatement는 쿼리문 하나당 하나씩 생성 


        pstmt3=con.prepareStatement(sql);
        pstmt3.setInt(1,member_id);
        pstmt3.setString(2,hobby[i]);

        pstmt3.executeUpdate();
     }

    if(rs!=null)rs.close();
    if(pstmt2!=null)pstmt2.close();
    if(pstmt3!=null)pstmt3.close();
    if(pstmt!=null)pstmt.close();
    if(con!=null)con.close();
%>

회원가입 완료