728x90
반응형
# ResultSet 클래스
Statement 객체로 SELECT문을 사용하여 얻어온 레코드 값들을 테이블의 형태로 갖는 객체입니다.
● 메서드
next() : 다음 데이터가 존재하는지를 불린 형으로 알려주는 메서드
● 싱글톤(Singleton)
애플리케이션이 시작될 때 어떤 클래스가 최초 한 번만 메모리에 할당하고 그 메모리에 인스턴스를
만들어 사용하는 디자인 패턴입니다.
* 디자인 패턴
소프트웨어를 설계할 때 특정 부분에서 자주 발생하는 문제들을 해결하기 위해 재사용이 가능한 최적의 방법을
제시하여 프로그램을 개발하는 방법을 말합니다.
public class Dbconn {
private static Connection dbConn;
public static Connection getConnection() throws SQLException, ClassNotFoundException{
String url = "jdbc:mariadb://127.0.0.1:3306/webdev";
String user = "root";
String pw = "1234";
Class.forName("org.mariadb.jdbc.Driver");
dbConn = DriverManager.getConnection(url, user, pw);
return dbConn;
}
# PreparedStatement 클래스
- SQL 쿼리에 매개변수를 부여하여 실행할 수 있습니다.
EX)
Statement 클래스 사용시,
String sql = "SELECT * FROM TB_MEMBER WHERE mem_userid='" + mem_userid + "'";
String sql = "INSERT INTO TB_MEMBER(...) VALUES('" + mem_userid + "','" + mem_name +..)
PreparedStatement 클래스 사용시,
String sql = "SELECT * FROM TB_MEMBER WHERE mem_userid=?";
String sql = "INSERT INTO TB_MEMBER (...) VALUES (?,?,?...);
- 처음 컴파일 후 이후에 컴파일을 추가로 하지 않습니다.
- 여러 번 실행되는 SQL쿼리일 경우 빠른 속도를 냅니다.
- "insert into test values(?,?,?)";
● return문
메서드를 종료하면서 메서드의 리턴 값을 보내고 싶을 때 사용합니다.
메소드 안에서 사용하는 분기문으로 현재 수행 중인 메서드를 종료시키고
메소드를 호출한 수행문의 위치로 분기하며 이동합니다.
* 리턴 값이 void 인 메서드라면 return 문만 사용합니다.
예시 1)
// Statement stmt = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
Connection conn = null;
try{
conn = Dbconn.getConnection();
// stmt = conn.createStatement();
String sql = "SELECT mem_idx, mem_userid, mem_name, mem_gender, mem_birthday FROM tb_member";
pstmt = conn.prepareStatement(sql); // 컴파일 후 실행
// rs = stmt.executeQuery(sql);
rs = pstmt.executeQuery();
while(rs.next()) { // rs.next() 셀제 데이터의 커서를 바꿔준다. 데이터 값이 있으면 계속 돌아간다.
String mem_idx = rs.getString("mem_idx");
String mem_userid = rs.getString("mem_userid");
String mem_name = rs.getString("mem_name");
String mem_gender = rs.getString("mem_gender");
String mem_birthday = rs.getString("mem_birthday");
System.out.println(mem_idx + ", " + mem_userid + ", " + mem_name + ", " + mem_gender + ", " + mem_birthday);
}
}catch (Exception e){
e.printStackTrace();
}finally {
}
예시 2) 문제
DB를 이용하여 로그인 프로세스 프로그램을 작성
아이디를 입력하세요.
비밀번호를 입력하세요.
DB에 아이디와 비밀번호가 일치하는 회원이 있다면,
로그인되었습니다.
DB에 아이디와 비밀번호가 일치하는 회원이 없다면,
아이디 또는 비밀번호를 확인하세요.
public class Main3 {
public static void main(String[] args) {
PreparedStatement pstmt = null;
ResultSet rs = null;
Scanner sc = new Scanner(System.in);
System.out.println("아이디를 입력하세요.");
String mem_userid = sc.next();
System.out.println("비밀번호를 입력하세요");
String mem_pass = sc.next();
try{
Connection conn = Dbconn.getConnection();
String sql = "SELECT mem_idx FROM tb_member WHERE " + "mem_userid = ? and mem_pass=PASSWORD(?)";
pstmt= conn.prepareStatement(sql);
System.out.println(sql);
pstmt.setString(1,mem_userid);
pstmt.setString(2,mem_pass); // 컴파일 후 물음표 순서대로 파라미터 입력
rs = pstmt.executeQuery();
if(rs.next()){
System.out.println("로그인 되었습니다.");
}else {
System.out.println("아이디 또는 비밀번호를 확인하세요.");
}
}catch (Exception e){
e.printStackTrace();
}
}
}
예시 3) 회원 가입
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.Scanner;
public class Main4 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("아이디를 입력하세요.");
String mem_userid = sc.next();
System.out.println("비밀번호를 입력하세요.");
String mem_pass = sc.next();
System.out.println("이름을 입력하세요.");
String mem_name = sc.next();
System.out.println("이메일을 입력하세요.");
String mem_email = sc.next();
System.out.println("주민번호를 입력하세요.");
String mem_ssn = sc.next();
System.out.println("생년월일을 입력하세요.");
String mem_birthday = sc.next();
System.out.println("성별을 입력하세요.");
String mem_gender = sc.next();
System.out.println("취미를 입력하세요.");
String mem_hobby = sc.next();
System.out.println("전화번호를 입력하세요.");
String mem_hp = sc.next();
System.out.println("우편번호를 입력하세요.");
String mem_zipcode = sc.next();
System.out.println("주소를 입력하세요.");
String mem_address1 = sc.next();
System.out.println("상세주소를 입력하세요.");
String mem_address2 = sc.next();
System.out.println("참고사항를 입력하세요.");
String mem_address3 = sc.next();
StringBuilder sql = new StringBuilder();
sql.append("INSERT INTO tb_member (mem_userid, mem_pass, mem_name,");
sql.append("mem_email, mem_ssn, mem_birthday, mem_gender, mem_hobby,");
sql.append("mem_hp, mem_zipcode, mem_address1, mem_address2,");
sql.append("mem_address3) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)");
try{
Connection conn = Dbconn.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql.toString());
pstmt.setString(1, mem_userid);
pstmt.setString(2, mem_pass);
pstmt.setString(3, mem_name);
pstmt.setString(4, mem_email);
pstmt.setString(5, mem_ssn);
pstmt.setString(6, mem_birthday);
pstmt.setString(7, mem_gender);
pstmt.setString(8, mem_hobby);
pstmt.setString(9, mem_hp);
pstmt.setString(10, mem_zipcode);
pstmt.setString(11, mem_address1);
pstmt.setString(12, mem_address2);
pstmt.setString(13, mem_address3);
int result = pstmt.executeUpdate();
if(result >= 1){
System.out.println("회원가입 성공");
}else{
System.out.println("회원가입 실패");
}
}catch (Exception e){
e.printStackTrace();
}
}
}
728x90
반응형
'🌏 DataBase > MySQL' 카테고리의 다른 글
[DB] 12. 뷰(VIEW) (Feat.Oracle) (0) | 2020.11.05 |
---|---|
[DB] 11. JPA(Java Persistent API) (Feat.Oracle) & Entity (0) | 2020.11.05 |
[DB] 9. Statement(인터페이스) (0) | 2020.10.11 |
[DB] 8. MySQL 과 JAVA 연결 (0) | 2020.10.11 |
[DB] 7. 테이블 병합(JOIN) (0) | 2020.10.11 |