프로그래밍/수업일지 (39)

728x90

 

수업내용 정리 (Java)

 

1. 수업일지 29일차 1-3 문제 변형

로그인할때 틀리면 계속 입력을 받아서 로그인에 성공하면 멈추도록 하기(boolean으로 반환받기)
위와 동일하지만 boolean이 아니라 Member 변수로 반환받기로 변형

 1-1) 메인 ㄱ 

더보기
import java.util.Scanner;
import been.Member;
import service.MemberService;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		// 회원서비스 비지니스로직(업무코드)
		MemberService mSer = new MemberService();
		while(true) {
			System.out.print(" 아이디 입력> ");
			String id = sc.next();
			System.out.print(" 비밀번호 입력> ");
			String pw = sc.next();
			Member member = mSer.login(id, pw);
			if(member != null) {
				System.out.println(" > "+id+"님의 회원정보");
				member.showInfo();
				break;
			}else {
				System.out.println(" > id 또는 pw가 틀렸습니다.\n");
			}
		}
		System.out.println(" > 프로그램 종료");
	}
}
  • member가 null일 경우를 대비하여 if문을 입력하였다.

 

 1-2) Member 클래스 ㄱ 

더보기
public class Member {
	private String id;
	private String pw;
	private String name;
	private int age;
	private String birth;
	
	public Member(String id, String pw, String name, int age, String birth) {
		this.id=id;
		this.pw=pw;
		this.name=name;
		this.age=age;
		this.birth=birth;
	}

	public void showInfo() {
		System.out.println(" ‖ 아이디\t: "+id);
		System.out.println(" ‖  이름\t: "+name+"님");
		System.out.println(" ‖  나이\t: "+age+"살");
		System.out.println(" ‖  생일\t: "+birth);
	}
	@Override
	public String toString() {
		String str=(" ‖ 아이디\t: "+id+"\n ‖  이름\t: "+name+"님"
				+ "\n ‖  나이\t: "+age+"살"+"\n ‖  생일\t: "+birth);
		return str;
	}
}
  • 모든 동작은 서비스 클래스에서 할 것이기 때문에 생성자와 출력 메소드만 만들었다.
  • showInfo랑 toString 둘 다 동일하게 회원 정보를 출력하는 것이다.

 

 1-3) 서비스(동작) ㄱ 

더보기
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import common.JdbcUtil;
import been.Member;

// 회원관리 서비스
public class MemberService {
	Connection con;
	PreparedStatement pstmt;
	ResultSet rs;
	public Member login(String id, String pw) {
		con=JdbcUtil.getConnection();
		String sql = "select*from member where id=? and pw=?";
		try {
			pstmt=con.prepareStatement(sql);
			pstmt.setString(1, id);
			pstmt.setString(2, pw);
			rs = pstmt.executeQuery();
			if(rs.next()) {
				System.out.println(" > "+id+"님 로그인 성공");
				Member m = new Member(id, pw, rs.getString("name"),
						rs.getInt("age"), rs.getString("birth"));
				return m;
			}
		} catch (SQLException e) {
		} finally {
			JdbcUtil.dbClose(rs, pstmt, con);
		}
		return null;
	}
}
  • 입력받은 매개변수를 db에서 찾고, db에 있다면 해당 정보를 가져와서 Member 변수 m에 저장하고 m을 return한다.
  • id, pw 값도 db 값과 동일하니 Member m에 입력할 때 매개변수 값으로 해도 되지만 db 값이 진짜 값이니 id, pw 또한 db에서 가져오는 것도 나쁘지 않다. (나는 코드가 길어지니 줄였다.)
  • 정보 찾기와 입력이 끝났다면 finally를 통해 db를 닫아준다.

 

 

2. 수업일지 29일차 1-3 문제 변형2

로그인할때 틀리면 계속 입력을 받아서 로그인에 성공하면 멈추도록 하기(Member 객체로 반환받기)
위와 동일하지만 Member가 아니라 ArrayList<Member>로 반환받기
admin(관리자) 계정일 경우에는 모든 멤버 정보를 출력하고,
admin(관리자) 계정이 아닐 경우에는 본인의 정보만 출력
  • Member 클래스는 위의 1-2와 동일하게 사용한다.

 2-1) 메인 ㄱ 

더보기
import java.util.ArrayList;
import java.util.Scanner;
import been.Member;
import service.MemberService;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		// 회원서비스 비지니스로직(업무코드)
		MemberService mSer = new MemberService();
		
		while(true) {
			System.out.print(" 아이디 입력> ");
			String id = sc.next();
			System.out.print(" 비밀번호 입력> ");
			String pw = sc.next();
			ArrayList<Member> mList = mSer.login(id, pw);
			if(mList != null) {
				if(mList.size() == 1) {
					System.out.println(" > "+id+"님의 회원정보");
					System.out.println(" >----------+");
					System.out.println(mList.get(0));
					System.out.println(" >----------+");
				}else {
					System.out.println(" > 회원 정보 출력");
					mSer.showMemberList();
				}
				break;
			}else {
				System.out.println(" > id 또는 pw가 틀렸습니다.\n");
			}
		}
		System.out.println(" > 프로그램 종료");
	}
}
  • 위의 1-1과 비슷하지만 Member가 아닌 ArrayList로 변경했다.
  • 그리고 관리자 계정과 아닌 계정을 구분하여 정보를 출력해야 하기 때문에 if문을 사용했다.
  • 첫번째로 mList가 null인지 아닌지 구분하여 로그인이 되었는지 아닌지 확인한다.
  • 두번째로 mList가 null이 아닐 경우, mList의 길이가 1인지 그 이상인지 확인하여 로그인한 계정이 관리자 계정인지 아닌지 구분한다. 관리자 계정이 아닐 경우에는 로그인한 계정의 회원 정보를 출력하고, 관리자 계정인 경우에는 관리자 계정을 제외한 Member 회원 정보를 전부 출력한다.

 

 2-2) 서비스(동작) ㄱ 

더보기
// 전체 코드 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import common.JdbcUtil;
import been.Member;

// 회원관리 서비스
public class MemberService {
	Connection con;
	PreparedStatement pstmt;
	ResultSet rs;
	public ArrayList<Member> login(String id, String pw) {
		ArrayList<Member> mList = null;
		con=JdbcUtil.getConnection();
		String sql = "select*from member where id=? and pw=?";
		try {
			pstmt=con.prepareStatement(sql);
			pstmt.setString(1, id);
			pstmt.setString(2, pw);
			rs = pstmt.executeQuery();
			if(rs.next()) {
				mList = new ArrayList<Member>();
				if(id.equals("ADMIN") || id.equals("admin")) {
					System.out.println(" > 관리자 로그인 성공");
					sql = "select*from member where id!=?";
					pstmt=con.prepareStatement(sql);
					pstmt.setString(1, id);
					rs = pstmt.executeQuery();
					while(rs.next()) {
						Member m = new Member(rs.getString("id"),
							rs.getString("pw"), rs.getString("name"),
							rs.getInt("age"), rs.getString("birth"));
						mList.add(m);
					}
				}else {
					System.out.println(" > "+id+"님 로그인 성공");
					Member m = new Member(id, pw, rs.getString("name"),
							rs.getInt("age"), rs.getString("birth"));
					mList.add(m);
				}
			}
		} catch (SQLException e) {
		} finally {
			JdbcUtil.dbClose(rs, pstmt, con);
		}
		return mList;
	}

	public void showMemberList() {
		con=JdbcUtil.getConnection();
		String sql = "select*from member where id!=?";
		try {
			pstmt=con.prepareStatement(sql);
			pstmt.setString(1, "admin");
			rs = pstmt.executeQuery();
			System.out.println(" >------------------------+");
			System.out.println("ID\tNAME\tBIRTH");
			while(rs.next()) {
				System.out.println(" >--------------+");
				System.out.println(rs.getString("ID")+"\t"+rs.getString("NAME")+
				"\t"+rs.getString("BIRTH"));
			}
			System.out.println(" >------------------------+");
		} catch (SQLException e) {
			System.out.println(" > 정보 불러오기 실패");
			e.printStackTrace();
		} finally {
			JdbcUtil.dbClose(rs, pstmt, con);
		}
	}
}

 

// login 메소드
public ArrayList<Member> login(String id, String pw) {
	ArrayList<Member> mList = null;
	con=JdbcUtil.getConnection();
	String sql = "select*from member where id=? and pw=?";
	try {
		pstmt=con.prepareStatement(sql);
		pstmt.setString(1, id);
		pstmt.setString(2, pw);
		rs = pstmt.executeQuery();
		if(rs.next()) {
			mList = new ArrayList<Member>();
			if(id.equals("ADMIN") || id.equals("admin")) {
				System.out.println(" > 관리자 로그인 성공");
				sql = "select*from member where id!=?";
				pstmt=con.prepareStatement(sql);
				pstmt.setString(1, id);
				rs = pstmt.executeQuery();
				while(rs.next()) {
					Member m = new Member(rs.getString("id"),
						rs.getString("pw"), rs.getString("name"),
						rs.getInt("age"), rs.getString("birth"));
					mList.add(m);
				}
			}else {
				System.out.println(" > "+id+"님 로그인 성공");
				Member m = new Member(id, pw, rs.getString("name"),
						rs.getInt("age"), rs.getString("birth"));
				mList.add(m);
			}
		}
	} catch (SQLException e) {
	} finally {
		JdbcUtil.dbClose(rs, pstmt, con);
	}
	return mList;
}
  • retrun을 한 번만 하기 위해 메소드를 시작할 때 ArrayList<Member> mList를 생성해 null값을 넣어둔다. (null 값을 넣으면 새로 값을 집어넣지 않는 이상 mList를 반환해도 null 값을 반환한 것이 된다.)
  • 매개변수로 받아온 id와 pw가 db에서 확인이 되었다면 id가 admin(관리자)인지 확인하고 맞을 경우, 다시 db에 검색을 해서 id가 admin인 계정을 제외한 계정을 검색해서 m에 저장 후 mList에 저장한다.
  • id가 admin(관리자)가 아닌 경우, 검색된 계정을 m에 저장 후 mList에 저장한다.
  • 마지막에 mList를 반환한다.

 

// showMemberList 메소드
public void showMemberList() {
	con=JdbcUtil.getConnection();
	String sql = "select*from member where id!=?";
	try {
		pstmt=con.prepareStatement(sql);
		pstmt.setString(1, "admin");
		rs = pstmt.executeQuery();
		System.out.println(" >------------------------+");
		System.out.println("ID\tNAME\tBIRTH");
		while(rs.next()) {
			System.out.println(" >--------------+");
			System.out.println(rs.getString("ID")+"\t"+rs.getString("NAME")+
			"\t"+rs.getString("BIRTH"));
		}
		System.out.println(" >------------------------+");
	} catch (SQLException e) {
		System.out.println(" > 정보 불러오기 실패");
		e.printStackTrace();
	} finally {
		JdbcUtil.dbClose(rs, pstmt, con);
	}
}
  • admin(관리자)만 제외하고 출력했다.

 

 

3. Transaction (TX)

 3-1) MySQL ㄱ 

더보기
-- 주문 결제 TX
create table PURCHASE(
PC_NO int auto_increment primary key,				-- 주문번호
PC_MID varchar(10) not null,					-- 주문자 ID
PC_PID varchar(10) not null					-- 상품 ID
);

create table PAY(
	PY_NO int auto_increment primary key,			-- 결제번호
	PY_COST int not null,					-- 결제금액
	PY_PCNO int not null references PURCHASE(PC_NO)		-- 주문번호
);

 

 3-2) TxMain ㄱ 

더보기
import service.ShoppingService;

public class TxMain {
	// 쇼핑 서비스
	public static void main(String[] args) {
		ShoppingService ss = new ShoppingService();
		
		boolean flag = ss.order();
		if(flag) {
			System.out.println(" > 주문 완료");
		}else {
			System.out.println(" > 주문 실패");
		}
	}
}

 

 3-3) JdbcUtil (자주 쓰는 메소드 클래스) ㄱ 

더보기
  • 기본적으로 같지만 수동적으로 commit 하기 위해 getConnection 메소드에서 auto commit만 false로 바꿨다.
public static Connection getConnection() {
	try {
		Connection con = DriverManager.getConnection
        					("jdbc:mysql://localhost:3306/mydb", "icia", "1234");
		con.setAutoCommit(false);	// auto commit 해제. 수동으로 commit 해야함
//		con.setAutoCommit(true); // < 기본 값
		return con;
	} catch (SQLException e) {
		e.printStackTrace();
	}
	return null;
}

 

 3-4) 서비스(동작) ㄱ 

더보기
// 전체 코드
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import common.JdbcUtil;

public class ShoppingService {
	Connection con;
	PreparedStatement pstmt;
	ResultSet rs;
	
	public boolean order() {
		con=JdbcUtil.getConnection();
		String sql="insert into purchase(pc_mid, pc_pid) values(?, ?)";
		try {
			pstmt = con.prepareStatement(sql);	// sql 파싱(컴파일)
			pstmt.setString(1, "B");
			pstmt.setString(2, "컴퓨터");
			int result = pstmt.executeUpdate();	// sql 실행
			if(result>0) {
				System.out.println(" > 상품 주문 성공");
				sql = "insert into pay(py_cost, py_pcno) values(2000000, 2)";
				pstmt = con.prepareStatement(sql);
				result = pstmt.executeUpdate();
				if(result>0) {
					System.out.println(" > 결제 성공");
//					con.commit();
					JdbcUtil.txCommit(con);
					return true;
				}else {
					System.out.println(" > 결제 실패");
//					con.rollback();
					JdbcUtil.txRollback(con);
				}
			}else {
				System.out.println(" > 상품 주문 실패, 결제TX 실패");
			}
		} catch (SQLException e) {
			System.out.println("order 예외");
			e.printStackTrace();
		}
		return false;
	}
}
  • int result에 pstmt.executeUpdate()를 담는다. (문장을 전달해서 값을 받아오는 것에 성공하면 1, 실패하면 0)
  • result 값이 1 이상이라면 다시 db에 문장을 전달하고 값을 받아와서 result에 받는다.
  • result 값이 두 번 모두 1 이상이라면 JdbcUtil 클래스에 만들어둔 txCommit 메소드를 사용하여 db에서 commit해준다. (con.commit: 자바에서 만들어둔 메소드)
  • result 값이 1 이상이었다가 두번째에서 아니게 됐다면 db에서 rollback해준다. (con.rollback: 자바에서 만들어둔 메소드)

 


 

전체 피드백

  • 주말에 수업일지 읽으면서 복습하는 것이 아니라 예제 비슷하게 내고 코드를 만들어보면서 코드(영어!)와 친해져야 할 것 같다.
  • 나는 db보다 자바가 더 잘맞는 것 같다. 자바로 돌아오니까 재밌다..

 


728x90
728x90

 

수업내용 정리 (Java)

 

1. Jdbc

 

  • MySQL ㄱ 
더보기
-- test table
Create table member(
	ID varchar(20) PRIMARY KEY,
	PW varchar(20) NOT NULL,
	NAME varchar(20) NOT NULL,
	AGE tinyint unsigned NOT NULL,
	BIRTH date default (current_DATE)
);
select*FROM MEMBER;
-- test data
INSERT INTO MEMBER VALUES('A','1111','에이', 20, DEFAULT);
INSERT INTO MEMBER VALUES('B','2222','비비', 21, '2023-10-31');
INSERT INTO MEMBER VALUES('C','3333','씨씨', 22, DEFAULT);
INSERT INTO MEMBER VALUES('D','4444','디디', 30, DEFAULT);
INSERT INTO MEMBER VALUES('E','5555','이이', 32, DEFAULT);

 

 

더보기
Connection con;
PreparedStatement pstmt;
ResultSet rs;
  • Connection con: db 접속을 위한 객체 생성
  • PreparedStatement pstmt: sql 문장과 db 전달
  • ResultSet rs: select 결과 저장

 

 

public static void main(String[] args) {
	JdbcConnectionTest conTest=new JdbcConnectionTest();
	conTest.connect();
       
	// select, insert, ...
	conTest.select();
	conTest.select(30, "에이");
	conTest.insert("L", "101010", "엘", 34, "2010-10-10");
	
	conTest.dbClose();
}

 

// conTest.connect();
public void connect() {	/* java and db 연결 */
	try {
		con=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "icia", "1234");
		System.out.println("db 접속 성공");
	} catch (SQLException e) {
		System.out.println("db 접속 실패");
		e.printStackTrace();
	}
}
  • db 접속을 위해 만들어둔 con 객체에 getConnection 메소드를 통해 db 접속
  • getConnection("db 주소", "id", "pw") 구조로 적는다.
  • localhost: ip적는곳 / 현재 컴퓨터에 있는 db를 사용한다면 localhost를 통해 접근이 가능하다.
  • db 접속에 실패할 수도 있으므로 try-catch문을 이용하여 작성해야 한다.

 

// conTest.dbClose();
private void dbClose() {	/* java and db 연결 종료 */
	try {
		con.close();
		System.out.println("db 종료 성공");
	} catch (SQLException e) {
		System.out.println("db 종료 실패");
		e.printStackTrace();
	}
}
  • con 객체에 close 메소드를 통해 db 연결 해제
  • 연결 해제에 실패할 때를 대비하여 try-catch문을 이용하여 작성한다.

 

// conTest.select();
private void select() {
	String sql="select*from member";
	try {
		pstmt=con.prepareStatement(sql);
		rs=pstmt.executeQuery(); // executeQuery는 select만
		while(rs.next()) {
			System.out.println("아이디: "+rs.getString("ID")); // ID 칼럼에 있는 값을 반환
			System.out.println("비밀번호: "+rs.getString("PW"));
			System.out.println("이름: "+rs.getString("NAME"));
			System.out.println("나이: "+rs.getInt("AGE"));
			System.out.println("생일: "+rs.getDate("BIRTH"));
			System.out.println(" -----:");
		}
	} catch (SQLException e) {
		System.out.println("select 예외 발생");
		e.printStackTrace();
	}
	System.out.println("select 완료");
}
  • String sql="~"; : sql에서 실행할 문장을 적는다.
  • pstmt=con.prepareStatement(sql); : sql 문장을 db에 전달 파싱(분석) / 컴파일과 비슷하다고 생각해도 된다.
  • rs=pstmt.executeQuery(); : db에서 select문을 실행한다.
  • while문: 조건에 rs.next()를 넣어 rs의 다음 값이 있는지 확인하고  다음 값이 없으면 while문을 종료한다. sysout을 통해 rs에 담긴 값을 받아와 출력한다.
  • 에러가 날 수 있으므로 try-catch문을 이용하여 작성한다.

 

// conTest.select(30, "에이");
private void select(int age, String name) {
	String sql="select*from member where AGE>=? OR NAME=?";
	try {
		pstmt=con.prepareStatement(sql);
		pstmt.setInt(1, age);
		pstmt.setString(2, name);
		rs=pstmt.executeQuery(); // executeQuery는 select만
		while(rs.next()) {
			System.out.println("아이디: "+rs.getString("ID")); // ID 칼럼에 있는 값을 반환
			System.out.println("비밀번호: "+rs.getString("PW"));
			System.out.println("이름: "+rs.getString("NAME"));
			System.out.println("나이: "+rs.getInt("AGE"));
			System.out.println("생일: "+rs.getDate("BIRTH"));
			System.out.println(" -----:");
		}
	} catch (SQLException e) {
		System.out.println("select 예외 발생");
		e.printStackTrace();
	}
	System.out.println("select 완료");
}
  • 전체적인 구조는 위와 같지만, 조건이 있기 때문에 조금 다르다.
  • sql문을 작성할 때 매개변수를 바로 작성할 수 있으나 붙여주기 까다로우니 물음표(?)로 대체해주고 밑에서 pstmt.set~(n,m)을 이용하여 작성해준다.
  • pstmt.set~(n,m): ~은 타입을 적고, n은 물음표(?)의 위치(왼쪽부터 순서대로 1~), m은 물음표(?)에 넣고 싶은 매개변수를 적는다.

 

// conTest.insert("L", "101010", "엘", 34, "2010-10-10");
private void insert(String id, String pw, String name, int age, String birth) {
	String sql="insert into member(id, pw, name, age, birth) "
			+ "values(?, ?, ?, ?, ?)";
	try {
		pstmt = con.prepareStatement(sql);
		pstmt.setString(1, id);
		pstmt.setString(2, pw);
		pstmt.setString(3, name);
		pstmt.setInt(4, age);
		pstmt.setString(5, birth);
		pstmt.executeUpdate();	// insert, updqte, delete 실행
	} catch (SQLException e) {
		System.out.println("insert 예외 발생");
		e.printStackTrace();
	}
}
  • 매개변수로 받아온 값들을 물음표(?) 위치에 맞게 집어넣고, executeUpdqte(insert, update, delete 실행) 메소드를 통해 실행한다.
  • 마찬가지로 오류가 날 수 있으니 try-catch문을 이용한다.

 

 

 

// 문제1 회원 G 삭제
conTest.delete("쥐");
// 문제2 회원 A의 나이를 50살로 변경
conTest.update("A", 50);
private void update(String id, int age) {
	String sql="update member set age=? where id=?";
	try {
		pstmt = con.prepareStatement(sql);
		pstmt.setInt(1, age);
		pstmt.setString(2, id);
		pstmt.executeUpdate();	// insert, updqte, delete 실행
	} catch (SQLException e) {
		System.out.println("insert 예외 발생");
		e.printStackTrace();
	}
}

private void delete(String id) {
	String sql="delete from member where id=?";
	try {
		pstmt = con.prepareStatement(sql);
		pstmt.setString(1, id);
		pstmt.executeUpdate();	// insert, updqte, delete 실행
	} catch (SQLException e) {
		System.out.println("insert 예외 발생");
		e.printStackTrace();
	}
}
  • delete와 updqte 모두 insert를 할 때처럼 비슷하게 매개변수를 받고 물음표 위치에 따라 맞는 매개변수를 입력한다.
  • executeUpdate를 사용하여 실행한다.
  • 마찬가지로 오류가 날 수 있으므로 try-catch문을 이용한다.

 

 

 1-2) 자주 쓸 메소드 (클래스로 빼두기) ㄱ 

더보기
package common;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JdbcUtil {
	static {
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	public static Connection getConnection() {
		try {
			Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "icia", "1234");
			return con;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	public static void dbClose(ResultSet rs, PreparedStatement pstmt, Connection con) {
		try {
			if(rs!=null) rs.close();
			if(pstmt!=null) pstmt.close();
			if(con!=null) con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
    
	public static void txCommit(Connection con) {
		try {
			con.commit();
		} catch (SQLException e) {
			System.out.println("commit fail");
			e.printStackTrace();
		}
	}
	public static void txRollback(Connection con) {
		try {
			con.rollback();
		} catch (SQLException e) {
			System.out.println("rollback fail");
			e.printStackTrace();
		}
	}
}

 

 

2. 문제

로그인할때 틀리면 계속 입력을 받아서 로그인에 성공하면 멈추도록 하기(boolean으로 반환받기)
회원 전체 출력하기

 2-1) 메인 ㄱ 

더보기
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		// 회원서비스 비지니스로직(업무코드)
		MemberService mSer = new MemberService();
		
		while(true) {
			System.out.print(" 아이디 입력> ");
			String id = sc.next();
			System.out.print(" 비밀번호 입력> ");
			String pw = sc.next();
			boolean result = mSer.login(id, pw);
			if(result) {
				break;
			}else {
				System.out.println(" > id 또는 pw가 틀렸습니다.\n");
			}
		}
		mSer.showMemberList(); // 회원 전체 출력
		System.out.println(" > 프로그램 종료");
	}
}

 

 2-2) 서비스 ㄱ 

더보기
// 회원관리 서비스
public class MemberService {
	Connection con;
	PreparedStatement pstmt;
	ResultSet rs;

	public boolean login(String id, String pw) {
		con=JdbcUtil.getConnection();
		String sql = "select*from member where id=? and pw=?";
		try {
			pstmt=con.prepareStatement(sql);
			pstmt.setString(1, id);
			pstmt.setString(2, pw);
			rs = pstmt.executeQuery();
			if(rs.next()) {
				System.out.println(" > "+id+"님 로그인 성공");
				return true;
			}
		} catch (SQLException e) {
		} finally {
			JdbcUtil.dbClose(rs, pstmt, con);
		}
		return false;
	}

	public void showMemberList() {
		con=JdbcUtil.getConnection();
		String sql = "select*from member";
		try {
			pstmt=con.prepareStatement(sql);
			rs = pstmt.executeQuery();
			System.out.println("ID\tNAME");
			System.out.println(" >-----+");
			while(rs.next()) {
				System.out.println(rs.getString("ID")+"\t"+rs.getString("NAME"));
				System.out.println(" >-----+");
			}
		} catch (SQLException e) {
			System.out.println(" > 정보 불러오기 실패");
			e.printStackTrace();
		} finally {
			JdbcUtil.dbClose(rs, pstmt, con);
		}
	}
}
  • try로 들어가든 catch로 들어가든 무조건 finally문을 실행하기 때문에 db 연결을 해제하는 메소드는 finally문에 넣었다.

 

로그인
회원 전체 출력

 

 


 

질문한 내용이나 어려웠던 점 메모

  • 영어가 너무 익숙하지 않다...

 


 

 + 빨리 프론트엔드도 배워보고싶다..!

728x90
728x90

 

수업내용 정리 (MySQL)

 

1. view

  • 논리적인 테이블
  • 사용하는 목적: 검색 단순화, 보안 용이
  • or replace를 추가하면 drop -> create를 하지 않고 업데이트하여 사용할 수 있다.
create or replace view emp_view as select empno, deptno, job, ename from emp
where job<>'clerk' order by ename;
select*from emp_view;

select로 출력한 view

 

create or replace view emp_view as select empno, deptno, job, ename
from emp order by deptno, empno;

select*from emp_view where deptno=10 or deptno=20;
  • 만들어두고 select로 출력할 때 조건을 줄 수도 있다!

 


 

전체 피드백

  • 오늘은 eXERD라는 프로그램을 통해 테이블 짜는 것을 해보고 그러느라 MySQL에서 배운 것은 view밖에 없었다.

 


728x90
1 2 3 4 5 6 7 ··· 13