728x90
반응형
회원가입(기본)
import java.sql.*;
import java.util.Scanner;
public class Jdbc1 {
public static void main(String[] args) {
String url = "jdbc:mysql://127.0.0.1/aidev?useSSL=false";
String uid = "root";
String upw = "1234";
Scanner sc = new Scanner(System.in);
System.out.println("😊😊😊😊😊 회원가입 😊😊😊😊😊");
System.out.println("아이디를 입력하세요 > ");
String mem_userid = sc.next();
System.out.println("비밀번호를 입력하세요 > ");
String mem_userpw = sc.next();
System.out.println("이름을 입력하세요 > ");
String mem_name = sc.next();
System.out.println("휴대폰번호를 입력하세요 > ");
String mem_hp = sc.next();
System.out.println("이메일 입력하세요 > ");
String mem_email = sc.next();
System.out.println("성별을 입력하세요 > ");
String mem_gender = sc.next();
System.out.println("취미를 입력하세요 > ");
String mem_hobby = sc.next();
System.out.println("주민등록번호 앞자리를 입력하세요 > ");
String mem_ssn1 = sc.next();
System.out.println("주민등록번호 뒷자리를 입력하세요 > ");
String mem_ssn2 = 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();
String sql = "insert into tb_member (mem_userid, mem_userpw, mem_name, ";
sql += "mem_hp, mem_email, mem_gender, mem_hobby, mem_ssn1, mem_ssn2, ";
sql += "mem_zipcode, mem_address1, mem_address2, mem_address3) values (";
sql += "'"+mem_userid+"', '"+mem_userpw+"', '"+mem_name+"', ";
sql += "'"+mem_hp+"', '"+mem_email+"', '"+mem_gender+"', ";
sql += "'"+mem_hobby+"', '"+mem_ssn1+"', '"+mem_ssn2+"', ";
sql += "'"+mem_zipcode+"', '"+mem_address1+"', '"+mem_address2+"', ";
sql += "'"+mem_address3+"')";
// System.out.println(sql);
try {
Class.forName("com.mysql.cj.jdbc.Driver");//sql 패키지를 가저오자
Connection conn = DriverManager.getConnection(url, uid, upw);
Statement stmt = conn.createStatement();
int result = stmt.executeUpdate(sql);
if(result >= 1) System.out.println("회원가입이 완료되었습니다");
else System.out.println("회원가입에 실패하였습니다");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e){//연결이 안되었을때는(getConnection 빨간줄 생성)
e.printStackTrace();
}
}
}
문제. jdbc1을 참고하여 jdbc2 클래스에 회원가입 수정 프로그램을 작성해보자
1. 아이디를 기준으로 수정
2. sql 쿼리를 저장할 객체는 StringBuilder 사용
import java.sql.*;
import java.util.ArrayList;
import java.util.Scanner;
//문제. jdbc1을 참고하여 jdbc2 클래스에 회원가입 수정 프로그램을 작성해보자
// 1. 아이디를 기준으로 수정
// 2. sql 쿼리를 저장할 객체는 StringBuilder 사용
public class Jdbc2 {
public static void main(String[] args) {
String url = "jdbc:mysql://127.0.0.1/aidev?useSSL=false";
String uid = "root";
String upw = "1234";
Scanner sc = new Scanner(System.in);
System.out.println("😊😊😊😊😊 회원수정😊😊😊😊😊");
System.out.println("변경할 아이디를 입력하세요 > ");
String mem_userid = sc.next();
System.out.println("비밀번호를 입력하세요 > ");
String mem_userpw = sc.next();
System.out.println("이름을 입력하세요 > ");
String mem_name = sc.next();
System.out.println("휴대폰번호를 입력하세요 > ");
String mem_hp = sc.next();
System.out.println("이메일 입력하세요 > ");
String mem_email = sc.next();
System.out.println("성별을 입력하세요 > ");
String mem_gender = sc.next();
System.out.println("취미를 입력하세요 > ");
String mem_hobby = sc.next();
System.out.println("주민등록번호 앞자리를 입력하세요 > ");
String mem_ssn1 = sc.next();
System.out.println("주민등록번호 뒷자리를 입력하세요 > ");
String mem_ssn2 = 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("update tb_member set ")
.append("mem_userpw ='"+ mem_userpw+ "', ")
.append("mem_name ='"+ mem_name+ "', ")
.append("mem_hp ='"+ mem_hp+ "', ")
.append("mem_email ='"+ mem_email+ "', ")
.append("mem_gender ='"+ mem_gender+ "', ")
.append("mem_hobby ='"+ mem_hobby+ "', ")
.append("mem_ssn1 ='"+ mem_ssn1+ "', ")
.append("mem_ssn2 ='"+ mem_ssn2+ "', ")
.append("mem_zipcode ='"+ mem_zipcode+ "', ")
.append("mem_address1 ='"+ mem_address1+ "', ")
.append("mem_address2 ='"+ mem_address2+ "', ")
.append("mem_address3 ='"+ mem_address3+ "' where mem_userid=' "+mem_userid+"'");
System.out.println(sql);
try {
// class 라는 이름을 가진 클래스는 jvm에서 동작할 클래스들의 정보를 묘사하는 일종의 메타클래스
// DB와 연결할 드라이바 클래스를 찾아서 로드
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection(url, uid, upw);
Statement stmt = conn.createStatement();
int result = stmt.executeUpdate(sql.toString());
if(result >= 1) System.out.println("회원가입이 완료되었습니다");
else System.out.println("회원가입에 실패하였습니다");
} catch (ClassNotFoundException e) {//Class.forName에 해당하는 예외처리를 해줘야한다
e.printStackTrace();
} catch (SQLException e){//SQL Server에서 경고 또는 오류를 반환할 때 throw되는 예외이다.
e.printStackTrace();
}
}
}
Delete
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class Jdbc3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("😢😢😢😢 회원탈퇴 😢😢😢😢");
System.out.println("탈퇴할 아이디를 입력하세요");
String mem_userid = sc.next();
StringBuilder sql = new StringBuilder();
sql.append("delete from tb_member ")
.append("where mem_userid='" + mem_userid + "'");
try{
Connection conn = Dbconn.getConnection();
Statement stmt = conn.createStatement();
int result = stmt.executeUpdate(sql.toString());
if(result>=1) System.out.println("탈퇴되었습니다.");
else System.out.println("탈퇴 실패되었습니다.");
}catch (ClassNotFoundException e){
e.printStackTrace();
}catch (SQLException e){
e.printStackTrace();
}
}
}
싱글톤 패턴 이용한 DB연결
싱글톤 패턴 : 디자인 패턴 중 하나로 매번 드라이버를 로드하지 않고 프로세스에서 객체를 단 하나만 만들어
재활용할 수 있도록 공유자원을 생성하는 방법
✔ 디자인 패턴
소프트웨어를 설계할 때 특정 맥락에서 자주 발생하는 고질적인 문제들이 발생했을 때 재사용할 수 있는
해결책을 다룬 알고리즘
PreparedStatement 인터페이스
- Statement와 PreparedStatement의 차이는 캐시 사용 유무
- 객체를 캐시에 담아 재사용
- 반복적으로 쿼리를 수행한다면 statement에 비해 성능이 많이 좋음
- statement 보안상 취약점이 발견되었기 때문에 PreparedStatement를 사용하는 것을 권장하고 있음
- 코드가 길어질 수 있음
statement
StringBuilder sql = new StringBuilder();
sql.append("delete from tb_member")
.append("where mem_userid ='"+mem_userid+"'");
PreparedStatement
StringBuilder sql = new StringBuilder();
sql.append("delete from tb_member")
.append("where mem_userid ='"+mem_userid=?");
PreparedStatement pstmt = conn.PreparedStatement(sql.toString());
pstmt.setString(1, mem_userid);
pstmt.executeUpdate();
Result 인터페이스
- 결과를 저장할 수 있는 객체
- 저장된 값을 로우 단위로 불러올 수 있음
- 로우 단위로 데이터를 가져올 경우 타입을 지정하여 불러올 수 있음
StingBuilder sql = new StringBuilder();
sql.append("select * from tb_member where mem_userid = ? and mem_pw =?");
Connection conn = Dbconn.getConnection();
PreparedStatement pstmt = Conn.prepareStatement(sql.toString);
pstmt.setString(1, mem_userid);
pstmt.setString(2, mem_userpw);
pstmt.executeQuery();
PreparedStatement(한줄 출력)
public class Jdbc4 {
public static void main(String[] args) {
System.out.println("😁회원목록😁");
StringBuilder sql = new StringBuilder();
sql.append("select * from tb_member");// *로 했기 때문에 다른 모든것을 가저올 수 있다.
try{
Connection conn = Dbconn.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql.toString());
ResultSet rs = pstmt.executeQuery();// sql에서 테이블을 받아오는 것이다. Resultset에 담아짐
rs.next();//처음 컬럼이아닌 필드를 가리키고 있어서 다음 커서인 컬럼을 가리킨다.
// 꺼내오는 방법은 필드명이다.
int mem_idx = rs.getInt("mem_idx");// 첫 번쨰 mem_idx를 저장
String mem_userid = rs.getString("mem_userid");
String mem_name = rs.getString("mem_name");
String mem_hp = rs.getString("mem_hp");
System.out.println("번호 : "+mem_idx);
System.out.println("아이디 : "+mem_userid);
System.out.println("이름 : "+mem_name);
System.out.println("휴대폰번호 : "+mem_hp);
}catch (ClassNotFoundException e){
e.printStackTrace();
}catch (SQLException e){
e.printStackTrace();
}
}
}
PreparedStatement(전체 출력)
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Jdbc5 {
public static void main(String[] args) {
System.out.println("😁회원목록😁");
StringBuilder sql = new StringBuilder();
sql.append("select * from tb_member");// *로 했기 때문에 다른 모든것을 가저올 수 있다.
try{
Connection conn = Dbconn.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql.toString());
ResultSet rs = pstmt.executeQuery();// sql에서 테이블을 받아오는 것이다. Resultset에 담아짐
while(rs.next()) {//처음 컬럼이아닌 필드를 가리키고 있어서 다음 커서인 컬럼을 가리킨다.
// 꺼내오는 방법은 필드명이다.
int mem_idx = rs.getInt("mem_idx");// 첫 번쨰 mem_idx를 저장
String mem_userid = rs.getString("mem_userid");
String mem_name = rs.getString("mem_name");
String mem_hp = rs.getString("mem_hp");
System.out.println("번호 : "+ mem_idx+", 아이디 : "+mem_userid+", 이름 : "+mem_name+", 휴대폰번호 : "+mem_hp);
}
}catch (ClassNotFoundException e){
e.printStackTrace();
}catch (SQLException e){
e.printStackTrace();
}
}
}
문제.
아이디, 비밀번호를 입력받아 로그인 프로그램을 작성해보자.
아이디를 입력하세요 > apple
비밀번호를 입력하세요 > 1111
로그인 되었습니다. (아이디 또는 비밀번호를 확인하세요)
문제(1)
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
public class JdbcTask1 {
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_userpw = sc.next();
StringBuilder sql = new StringBuilder();
sql.append("select mem_idx from tb_member " +
"where mem_userid =? and mem_userpw = ?");
try{
Connection conn = Dbconn.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql.toString());
pstmt.setString(1, mem_userid);//물음표에 넣기
pstmt.setString(1, mem_userpw);
ResultSet rs = pstmt.executeQuery();// sql에서 테이블을 받아오는 것이다. Resultset에 담아짐
if(rs.next())System.out.println("로그인 되었습니다.");
else System.out.println("아이디 비밀번호를 확인하세요");
}catch (ClassNotFoundException e){//모둘이 올라오지 않는 경우
e.printStackTrace();
}catch (SQLException e){// 쿼리가 문제가 나오면
e.printStackTrace();
}
}
}
문제(2) - Dbcon 으로 받아오기
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Dbconn {
private static Connection conn; // 주요하게 생각하는것을 컨넥션 객체를 사용할 수 있게
//스테틱이 있으면 클래스만 불러도 된다 메소드 호출시
public static Connection getConnection() throws SQLException, ClassNotFoundException {// 리턴타입은 Connection
String url = "jdbc:mysql://127.0.0.1/aidev?useSSL=false";
String uid = "root";
String upw = "1234";
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection(url, uid, upw);
return conn;
}
}
반응형
'JDBC' 카테고리의 다른 글
JDBC 학생 성적 관리 프로그램 최종 (0) | 2022.11.01 |
---|---|
JDBC 서버 클라이언트 연동(학생 관리) (0) | 2022.10.20 |
JDBC(영어 단어장, 학생 성적 관리 프로그램 ) (0) | 2022.10.19 |
JDBC (설치 및 연동, 기본) (0) | 2022.10.19 |