** 1월에 작성했던 글
(1) 로그인, 회원가입을 위한 userexp 테이블 생성
CREATE TABLE userexp(
id varchar2(30),
pass varchar2(30),
name varchar2(30),
auth varchar2(30),
point NUMBER
);
INSERT INTO userexp VALUES ('himan','7777','홍길동','관리자',4000);
SELECT * FROM userexp;
-- > 아이디, 비밀번호 찾는 조건문
--> dao sql 문 삽입시 ' ' 부분은 ?로 입력
SELECT * FROM userexp
WHERE id = 'himan'
AND pass = '7777';
(2) vo 객체 생성
public class Userexp {
private String id;
private String pass;
private String name;
private String auth;
private int point;
public Userexp() {
super();
// TODO Auto-generated constructor stub
}
public Userexp(String id, String pass, String name, String auth, int point) {
super();
this.id = id;
this.pass = pass;
this.name = name;
this.auth = auth;
this.point = point;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuth() {
return auth;
}
public void setAuth(String auth) {
this.auth = auth;
}
public int getPoint() {
return point;
}
public void setPoint(int point) {
this.point = point;
}
}
(3) dao 작성
(Data Access Object)
- 데이터베이스 접근 객체의 약어로써 DB와 Java파일을 연결해주는 jdbc 드라이버를 실행시켜 DB에서 회원 정보를 불러오거나 DB에 회원 정보를 넣고자 할 때 사용
- JSP에서 회원 DB 테이블에 접근할 수 있도록 DAO 클래스를 정의함
--> jdbc 연결 메서드
public class A01_Dao2 {
private Connection con;
private Statement stmt;
private PreparedStatement pstmt;
private ResultSet rs;
// 2. 공통 메서드 선언(setConn())
public void setConn() throws SQLException {
// 1) 드라이버 연결
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("예외 처리:"+e.getMessage());
}
// 2) 특정 서버 연결
String info = "jdbc:oracle:thin:@146.56.185.62:1521:xe";
con = DriverManager.getConnection(info,"hydba","1111");
System.out.println("접속 성공");
}
void closeRsc() {
if(rs!=null) {
try {
rs.close();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
if(pstmt!=null) {
try {
pstmt.close();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
if(stmt!=null) {
try {
stmt.close();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
if(con!=null) {
try {
con.close();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
--> login 메서드생성
public Userexp login(String id, String pass) {
Userexp u = null;
String sql = "select * \r\n"
+ "from userexp \r\n"
+ "where id=? and pass = ? ";
try {
setConn();
pstmt=con.prepareStatement(sql);
pstmt.setString(1,id);
pstmt.setString(2, pass);
rs=pstmt.executeQuery();
if( rs.next() ) {
u = new Userexp(rs.getString("id"),rs.getString("pass"),
rs.getString("name"),rs.getString("auth"),rs.getInt("point"));
}
rs.close();
pstmt.close();
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println(e.getMessage());
closeRsc();
}
return u;
}
- pstmt ~ : preparedstatement에 어떠한 정해진 SQL문장을 DB 삽입하는 형식으로 인스턴스를 가져온다.
- preparedstatement : DBMS의 캐시에 준비되어있는 쿼리를 사용한다는 의미, SQL injection 같은 해킹 기법을 방어하기 위해 사용.
- pstmt.setString(1, id) :
하나의 sql 문장을 준비하고, 문장에 물음표를 넣고,
나중에 물음표에 해당하는 내용으로 id,pass를 넣어준다.
즉, 매개변수로 넘어온 id,pass 를 물음표에 들어갈 수 있도록 하여 실제로 db에 접속을 시도하고자 하는 사용자의 id,pass를 입력받아
존재 유무를 파악한다.
- rs.getString("id") : 쿼리를 실행한 결과를 rs에 저장
(4) jsp 작성
<%
String id = request.getParameter("id");
String pass = request.getParameter("pass");
//System.out.println("id:"+id);
//db를 통해 login이 생성되어있는지 여부 확인을 위해 boolean 선언 ..
String call="init";
if(id!=null){
//id가 null이 아닐때, 아이디를 입력해서 로그인한 화면일때 db처리
call="login";
//DB처리 할 수 있게 A01_Dao2 dao = new A01_Dao2(); 선언
A01_Dao2 dao = new A01_Dao2();
//해당하는 데이터가 있으면 Userexp 객체를 할당.
Userexp u = dao.login(id,pass);
if(u!=null){
call="success";
session.setAttribute("user",u);
// 로그인 성공시 세션을 활용할 수 있다.
}else{
call="fail";
}
}
%>
//
$(document).ready(function(){
//java의 변수를 js로 처리하기
var call="<%=call%>";
if(call=="success"){
alert("로그인 성공");
location.href="userexp_main.jsp";
}
if (call=="fail"){
alert("로그인 실패. \n 다시 로그인 하세요!!")
$("[name=id]").focus();
}
$("#logBtn").click(function(){
var id = $("[name=id]").val();
var pass = $("[name=pass]").val();
if(id!="" && pass!=""){
$("form").submit();
}else{
alert("아이디나 비밀번호를 입력하세요.");
}
});
});
</script>
</head>
<body>
<h3>로그인</h3>
<form method="post">
<table>
<tr><th>아이디</th><td><input type="text" name="id"/></td></tr>
<tr><th>비밀번호</th><td><input type="password" name="pass"/></td></tr>
<tr><td colspan="2"><input type="button" id="logBtn" value="로그인"/></td></tr>
<tr><td colspan="2" onclick="location.href='userexp_reg.jsp'">회원가입</td></tr>
</table>
</form>
</body>
</html>
[기타 오류 점검]
$("#delBtn").click(function(){
if(confrim("삭제하시겠습니까?")){
$("[name=proc]").val("del");
$("form").submit();
}
});
와씨 이부부분에서 계속 "프로퍼티 [id]을(를) 찾을 수 없습니다." 오류가 났는데 알고보니
delBtn앞에 아이디 선언해주는 #입력 안해서 오류뜸.. 진짜 ㅋㅋㅋㅋㅋ욕나옴
'공부 > database' 카테고리의 다른 글
2021.11.26 - 국비수업 4주차 벌써..? database 일주일 수업 정리(1) (0) | 2021.11.26 |
---|---|
2021.11.22 - 국비수업 22일차 / database개념, sql작성, 이클립스 dbeaver 연동 (원격서버접속) (0) | 2021.11.22 |