



prepareStatement() 메서드는 Connection 인터페이스의 메서드.
JDBC에서는 데이터베이스에 연결할 때
Connection 객체를 사용하고, 이를 통해 SQL 문을 실행할 준비된(prepared) 문을 생성할 수 있다.

회원가입

로그인

package member;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import main.Main;
public class MemberController {
public void printMenu() throws Exception {
System.out.println("---------------MEMBER----------");
System.out.println("1.회원가입");
System.out.println("2.로그인");
System.out.print("번호를 입력하세요: ");
String input = Main.SC.nextLine();
switch (input) {
case "1":
join();
break;
case "2":
login();
break;
default:
System.out.println("잘못 입력하셨습니다");
}
}//printMenu method
// 외부에서 로그인,가입 호출하지 않도록 ! private로 설정.메뉴를 보여주고 그다음에 가입,로그인하도록함.
private void join() throws Exception {
System.out.println("--------------회원가입----------");
Connection conn = getConn();
// SQL 준비 PSTMT를 쓸거니까 ?로 두기.
String sql = "INSERT INTO MEMBER(ID,PWD,NICK) VALUES(?,?,?)";
// 입력받기.
System.out.println("ID를 입력하세요 ");
String inputId = Main.SC.nextLine();
System.out.println("PWD를 입력하세요 ");
String inputPwd = Main.SC.nextLine();
System.out.println("닉네임을 입력하세요 ");
String inputNick = Main.SC.nextLine();
// SQL 실행을 위한 statement 준비
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, inputId);
pstmt.setString(2, inputPwd);
pstmt.setString(3, inputNick);
// statement 에 SQL 담아주고 실행 및 결과 리턴받기
int result = pstmt.executeUpdate();
System.out.println("쿼리 실행 결과 :" + result);
// 결과 출력
if (result != 1) {
// 생성자의 인자값으로 문자를 넘겨주면 예외메시지로 넘어간다. 출력문없이 에러 메세지확인 가능.
throw new RuntimeException("회원가입 실패!");
}
System.out.println("회원가입 성공");
}
private void login() throws Exception {
Connection conn = getConn();
// SQL 준비
String sql = "SELECT* FROM MEMBER WHERE ID= ? AND PWD= ?";
System.out.println("ID를 입력하세요 ");
String id = Main.SC.nextLine();
System.out.println("PWD를 입력하세요 ");
String pwd = Main.SC.nextLine();
// SQL 실행을 위한 statement 준비
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
pstmt.setString(2, pwd);
// statement 에 SQL 담아주고 실행 및 결과 리턴받기
ResultSet rs = pstmt.executeQuery();
// 결과 출력
if (rs.next()) {
String dbId = rs.getString("ID");
String dbPwd = rs.getString("PWD");
String dbNick = rs.getString("NICK");
MemberVo vo = new MemberVo(dbId, dbPwd, dbNick);
System.out.println(vo.getNick() + "님 환영합니다~");
} else {
throw new RuntimeException("로그인실패...");
}
}//login()
private Connection getConn() throws Exception {
// JDBC 드라이버 로딩
String driver = "oracle.jdbc.driver.OracleDriver";
Class.forName(driver);
// 데이터베이스 연결 정보 준비
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String id = "C##KH";
String pwd = "1234";
// 데이터베이스 연결 == 커넥션 객체 얻기
Connection conn = DriverManager.getConnection(url, id, pwd);
return conn;
}
}
---------------데이터를 뭉치기 위해
MEMBER VO를 만듬
package member;
public class MemberVo {
// 멤버테이블의 데이터를 채우기 위함. 아이디,비번,닉네임
private String id;
private String pwd;
private String nick;
public MemberVo() {
super();
}
public MemberVo(String id, String pwd, String nick) {
super();
this.id = id;
this.pwd = pwd;
this.nick = nick;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getNick() {
return nick;
}
public void setNick(String nick) {
this.nick = nick;
}
@Override
public String toString() {
return "MemberVo [id=" + id + ", pwd=" + pwd + ", nick=" + nick + "]";
}
}
----------메인에서
mc.printMenu();를 실행하기 위함(예외처리함)
package main;
import java.util.Scanner;
import member.MemberController;
public class Main {
public static final Scanner SC=new Scanner(System.in);
public static void main(String[] args) {
System.out.println("============JDBC(MEMBER)==========");
MemberController mc= new MemberController();
try {
mc.printMenu();
}
catch(Exception e){
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
!? 아 그래서 pstmt를 쓰는군요
뭔지 모르고 그냥 계속 외워서 사용했었는데
이제부터 알고 사용할 수 있겠네요!
좋은 정보 감사합니다!