방명록
- 1030 jdbc -day12023년 10월 30일 13시 57분 48초에 업로드 된 글입니다.작성자: 삶은고구마
1.기존 이클립스에서 세팅하기
더보기1 2 3 4 2.새 프로젝트 하위에 새폴더와 새 파일 생성
새폴더:sql / 새파일:student.sql 3.student.sql 파일을 sql deveplover 편집창에 드래그해서 아래의 코드를 작성한다.
1)system 계정으로 student계정 생성
2)student 계정으로(컬러:보라색) 접속
3)member table 생성 및 데이터 추가(디코)
더보기--(System계정) student 계정 생성 --student/student alter session set "_oracle_script" = true; create user student identified by student default tablespace users; grant connect,resource to student; alter user student quota unlimited on users; -- member 테이블 생성 create table member( id varchar2(20), name varchar2(100) not null, gender char(1), birthday date, email varchar2(500) not null, point number default 1000, create_at timestamp default systimestamp, constraints pk_member_id primary key(id), constraints uq_member_email unique(email), constraints ck_member_gender check(gender in('M','F')) ); insert into member values( 'honggd', '홍길동', 'M', '1999-09-09', 'honggd@naver.com', default, default ); insert into member values( 'gogd', '고길동', 'M', '1980-02-15', 'gogd@naver.com', default, default ); insert into member values( 'sinsa', '신사임당', 'F', '1995-05-05', 'sinsa@naver.com', default, default ); insert into member values( 'leess', '이순신', null, null, 'leess@naver.com', default, default ); insert into member values( 'qwerty', '쿼티', 'F', null, 'qwerty@naver.com', default, default ); commit; select *from member;
4.외부라이브러리 추가
1)ojdbc jar 파일
2)해당 프로젝트(01_jdbc)-속성에서 외부 라이브러리로 lib-ojdbc8 추가
프로젝트 하위에 Referenced Libraries 생성됨.
3)연결이 잘 되었는지 아래의 코드를 작성하여 테스트 해본다.
기본포트 1521는 sql developer에서 사용하던 포트 그대로 사용하면 되는데,
나같은 경우엔 1522가 기본값이라 따로 테스트 해봐야할 것 같다.
더보기package test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class JdbcTest { String driverClassName = "oracle.jdbc.OracleDriver"; String url = "jdbc:oracle:thin:@localhost:1521"; //접속 프로토콜@url:port String user = "student"; String password = "student"; public static void main(String[] args) { JdbcTest main = new JdbcTest(); main.test1(); main.test2(); } /**<pre> * jdbc 절차 * 1.Driver 클래스 등록 * 2.Connection 객체 생성(url, id, password) * 3.PreparedStatement 객체 생성(쿼리 준비) * 4.쿼리 실행 - ResultSet 객체 반환 * 5.ResultSet 처리 * 6.반환 (ResultSet - PreparedStatment - Connection 순 반환) */ private void test2() { Connection conn =null; PreparedStatement pstmt = null; ResultSet rset = null; try { //1.Driver 클래스 등록 Class.forName(driverClassName); System.out.println("1.드라이버 클래스 등록 완료"); //2.Connection conn = DriverManager.getConnection(url,user,password); System.out.println("2.Connection 객체 생성 완료"); //3.PreparedStatement 객체 생성 pstmt = conn.prepareStatement("select * from member"); System.out.println("3.PrepareStatement 객체 생성 완료"); //4.쿼리 실행 및 ResultSet 반환 rset = pstmt.executeQuery(); System.out.println("4.query 실행 완료"); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } } /** * ojdbc8.jar 연결 테스트 */ private void test1() { //클래스 등록 try { Class.forName("oracle.jdbc.OracleDriver"); System.out.println("ojbdc 연결 완료~"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } }
회원관리 예제
mvc 패턴으로 회원가입 예제를 다뤄보자. run 실행클래스 view 유저(사용자)에게 보이는 화면단 controller 뷰에서 사용자가 선택한 방법을 dao에게 전달
(view와 dao 사이의 브릿지)dao(data access object) db와 직접 접촉(db연결/쿼리 실행등) vo(value object) db로 작업된/할 값을 member 객체 or 리스트에 담음 db student.sql DQL (SELECT) DML (INSERT,UPDATE,DELETE) 1.Driver 클래스 등록 1.Driver 클래스 등록 2.Connection 객체 생성 (url, id, password) 2.Connection 객체 생성 (url, id, password)
-auto commit false 설정3.PreparedStatement 객체 생성 (쿼리 준비)
미완성 쿼리의 ? 값 대입3. PreparedStatement 객체 생성 (쿼리 준비)
미완성 쿼리의 ? 값 대입4.쿼리 실행 ->
ResultSet 객체 반환4.쿼리 실행 ->
int 값 반환 (값:실행된 행의 갯수)5.ResultSet 처리 5.트랜잭션 처리 commit or rollback 6. 자원 반납
(ResultSet-> PreparedStatement ->Connection 순)6.자원반납 (이하동일) rset = pstmt.executeQuery();result = pstmt.executeUpdate();1.Main
더보기package com.sh.run; import com.sh.member.view.MemberMenu; /** * <pre> * MVC패턴 * 기능을 제공함에 있어 코드가 가진 "성격"별로 클래스를 나누어 처리하는 패턴 * -Model * -entity 클래스 : db 테이블과 상응하는 클래스 * -dao 클래스 : Data Access Object db 접근 클래스.(오직 여기에서만 접속) * -service 클래스 : 업무로직 담당(트랜잭션 처리) * ... * * -View 클래스 : 사용자가 보게 될 화면 담당. 메뉴/사용자 입력값 처리 등등.. * * -Controller 클래스 : 사용자 요청을 처리하는데 있어 전체 제어의 역할. * -요청을 받아 하위클래스에 분배. 처리 결과를 다시 view단에 전달. */ public class Main { public static void main(String[] args) { new MemberMenu().mainMenu(); System.out.println("==이용해주셔서 감사합니다.=="); } }
2.Member
더보기package com.sh.member.model.entity; import java.sql.Date; import java.sql.Timestamp; /** * db member 테이블과 1대1 매칭하는 클래스 * - table - entity class * - column - field * - row - member객체 * */ public class Member { //멤버sql의 컬럼값을 필드로.. private String id; private String name; private String gender; private Date birthday; private String email; private int point; private Timestamp createdAt; public Member() {} public Member(String id,String name,String gender, Date birthday, String email,int point,Timestamp createdAt) { this.id = id; this.name = name; this.gender = gender; this.birthday = birthday; this.email = email; this.point = point; this.createdAt = createdAt; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public int getPoint() { return point; } public void setPoint(int point) { this.point = point; } public Timestamp getCreatedAt() { return createdAt; } @Override public String toString() { return "Member [id=" + id + ", name=" + name + ", gender=" + gender + ", birthday=" + birthday + ", email=" + email + ", point=" + point + ", createdAt=" + createdAt + "]"; } public void setCreatedAt(Timestamp createdAt) { this.createdAt = createdAt; } }
3.MemberController
더보기package com.sh.member.controller; import java.util.List; import com.sh.member.model.dao.MemberDao; import com.sh.member.model.entity.Member; //제어 클래스 public class MemberController { private MemberDao dao = new MemberDao(); //멤버 리스트 public List<Member> findAll() { //요청 List<Member> members = dao.findAll(); //결과를 view단에 반환 return members; } //멤버 리스트 public List<Member> findName(String searchName) { //요청 List<Member> members = dao.findName(searchName); //결과를 view단에 반환 return members; } //회원가입 메소드 public int insertMember(Member member) { //memberDao에게 멤버객체를 보내줌(요청) //그리고 결과를 view단에 전달한다 int result = dao.insertMember(member); return result; } //아이디 조회 public Member findById(String id) { return dao.findById(id); } //회원 탈퇴- 아이디조회 //아이디 조회 public int deleteMember(String id) { return dao.deleteMember(id); } //회원 수정할 메소드 public int updateMamber(String type,String data,String id) { return dao.updateMember(type,data,id); } }
4.MemberDao
더보기package com.sh.member.model.dao; import java.sql.Connection; import java.sql.Date; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Timestamp; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import com.sh.member.model.entity.Member; public class MemberDao { /**<pre> * dql jdbc 절차 (update) * 1.Driver 클래스 등록 * 2.Connection 객체 생성(url, id, password) * 3.PreparedStatement 객체 생성(쿼리 준비) * 4.쿼리 실행 - ResultSet 객체 반환 * 5.ResultSet 처리 * 6.반환 (ResultSet - PreparedStatment - Connection 순 반환) */ private String driverClassName = "oracle.jdbc.OracleDriver"; private String url = "jdbc:oracle:thin:@localhost:1521:xe"; //접속 프로토콜@url:port private String user = "student"; private String password = "student"; /* 여러 건 조회하는 경우: 0이면 빈 list 반환, n행이면 n개의 member객체를 가진 list반환 한 건 조회하는 경우: 0행이면 null 반환, 1행이면 member객체 1개 반환 */ public List<Member> findAll() { List<Member>members = new ArrayList<>(); Connection conn = null; PreparedStatement pstmt = null; ResultSet rset = null; String sql = "Select * from member order by created_at desc"; try { //1.Driver 클래스 등록 Class.forName(driverClassName); //2.Connection 객체 생성(url, id, password) conn = DriverManager.getConnection(url,user,password); //3.PreparedStatement 객체 생성(쿼리 준비) pstmt = conn.prepareStatement(sql); //4.쿼리 실행 - ResultSet 객체 반환 rset = pstmt.executeQuery(); //5.ResultSet 처리 while(rset.next()) { String id = rset.getString("id"); String name = rset.getString("name"); String gender = rset.getString("gender"); Date birthday= rset.getDate("birthday"); String email = rset.getString("email"); int point = rset.getInt("point"); Timestamp created_at =rset.getTimestamp("created_at"); //컬럼명으로 가져온 컬럼값들을 member객체로 만들고 Member member = new Member(id,name,gender,birthday,email,point,created_at); System.out.println(member); members.add(member);//멤버 객체 하나를 리스트에 추가 } } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } //6.반환 (ResultSet - PreparedStatment - Connection 순 반환) try { rset.close(); } catch (SQLException e) { e.printStackTrace(); } try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } return members; //리스트를 반환한다. } //================================================================================= /** * <pre> * dml jdbc 처리절차 (insert, udpate, delete) * 1.드라이버 클래스 등록 * 2.connection 객체 생성 (url,user,pw필요 ) * -auto commit false 설정 * 3.preparedStatement 객체 생성(query) * -미완성 쿼리의 ? 값 대입 * 4.쿼리 실행 - int 반환받는다. * 5.트랜잭션처리 (commit or rollback) * 6.자원반납 */ public int insertMember(Member member) { int result=0; Connection conn = null; PreparedStatement pstmt = null; String sql = """ insert into member values(? ,? ,? ,? ,? ,default,default) """; try { //1.드라이버 클래스 등록 Class.forName(driverClassName); //2.connection 객체 생성 (url,user,pw필요) conn = DriverManager.getConnection(url,user,password); conn.setAutoCommit(false); //-auto commit false 설정(d:true) //3.preparedStatement 객체 생성(query) pstmt = conn.prepareStatement(sql); // -미완성 쿼리의 ? 값 대입 pstmt.setString(1, member.getId()); //db의 인덱스 기준이라 1부터 시작함. pstmt.setString(2, member.getName()); pstmt.setString(3, member.getGender()); pstmt.setDate(4, member.getBirthday()); pstmt.setString(5, member.getEmail()); //4.쿼리 실행(dml) - int 반환받는다. result = pstmt.executeUpdate(); //처리된 행의 수를 반환. 2행이 어쩌고~:2가 반환 //5.트랜잭션처리 (commit or rollback) if(result>0) conn.commit();//결과가 1개이상이면 성공- 커밋 else conn.rollback();//실패했다면 롤백 } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } finally { //6.자원반납 try { pstmt.close(); } catch (Exception e) { e.printStackTrace(); } try { conn.close(); } catch (Exception e) { e.printStackTrace(); } } return result; } //======================================================================================= //회원삭제 - pk 아이디로 public int deleteMember(String id) { int result=0; Member member = null; //조회된 아이디가 없으면 null반환 Connection conn = null; PreparedStatement pstmt = null; String sql = "delete from member where id = ?"; try { //1.드라이버 클래스 등록 Class.forName(driverClassName); //2.connection 객체 생성 (url,user,pw필요) conn = DriverManager.getConnection(url,user,password); conn.setAutoCommit(false); //-auto commit false 설정(d:true) //3.preparedStatement 객체 생성(query) pstmt = conn.prepareStatement(sql); // -미완성 쿼리의 ? 값 대입 //입력한 id를 where절 조건으로 삼는다. pstmt.setString(1, id); //4.쿼리 실행(dml) - int 반환받는다. result = pstmt.executeUpdate(); //처리된 행의 수를 반환. 2행이 어쩌고~:2가 반환 //5.트랜잭션처리 (commit or rollback) if(result>0) conn.commit();//결과가 1개이상이면 성공- 커밋 else conn.rollback();//실패했다면 롤백 } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } finally { //6.자원반납 try { pstmt.close(); } catch (Exception e) { e.printStackTrace(); } try { conn.close(); } catch (Exception e) { e.printStackTrace(); } } return result; } //================================================================================= //아이디 조회 public Member findById(String id) { Member member = null; //조회된게 없으면 null을 반환 Connection conn = null; PreparedStatement pstmt = null; ResultSet rset = null; String sql = "select * from member where id = ?"; try { //1.Driver 클래스 등록 Class.forName(driverClassName); //2.Connection 객체 생성(url, id, password) conn = DriverManager.getConnection(url,user,password); //3.PreparedStatement 객체 생성(쿼리 준비) pstmt = conn.prepareStatement(sql); //미완성 쿼리 값 대입 pstmt.setString(1, id); //4.쿼리 실행 - ResultSet 객체 반환 rset = pstmt.executeQuery(); //5.ResultSet 처리 while(rset.next()) { String name = rset.getString("name"); String gender = rset.getString("gender"); Date birthday= rset.getDate("birthday"); String email = rset.getString("email"); int point = rset.getInt("point"); Timestamp created_at =rset.getTimestamp("created_at"); //컬럼명으로 가져온 컬럼값들을 member객체로 만들고 member = new Member(id,name,gender,birthday,email,point,created_at); System.out.println(member); } } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } //6.반환 (ResultSet - PreparedStatment - Connection 순 반환) finally { try { rset.close(); } catch (Exception e) { e.printStackTrace(); } try { pstmt.close(); } catch (Exception e) { e.printStackTrace(); } try { conn.close(); } catch (Exception e) { e.printStackTrace(); } } return member; } //=========================================================================================== //이름 조회 //1행만 검색하는 것 아닌가? 생각하겠지만 동명이인을 고려하여 한행이 아닌 여러행을 반환하도록 한다. //성빼고 이름으로 검색하는 로직. //id는 고유하지만 name은 고유하지 않음 public List<Member> findName(String searchName) { List<Member>members = new ArrayList<>(); Connection conn = null; PreparedStatement pstmt = null; ResultSet rset = null; System.out.println("찾는이름:"+searchName); String sql = "select * from member where name like ?"; try { //1.Driver 클래스 등록 Class.forName(driverClassName); //2.Connection 객체 생성(url, id, password) conn = DriverManager.getConnection(url,user,password); //3.PreparedStatement 객체 생성(쿼리 준비) pstmt = conn.prepareStatement(sql); //미완성 쿼리 값 대입 pstmt.setString(1, "%"+searchName+"%"); //pstmt.setString(1, "길동"); //4.쿼리 실행 - ResultSet 객체 반환 rset = pstmt.executeQuery(); //5.ResultSet 처리 while(rset.next()) { String id = rset.getString("id"); String name = rset.getString("name"); String gender = rset.getString("gender"); Date birthday= rset.getDate("birthday"); String email = rset.getString("email"); int point = rset.getInt("point"); Timestamp created_at =rset.getTimestamp("created_at"); //컬럼명으로 가져온 컬럼값들을 member객체로 만들고 Member member = new Member(id,name,gender,birthday,email,point,created_at); System.out.println(member); members.add(member);//멤버 객체 하나를 리스트에 추가 } } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } //6.반환 (ResultSet - PreparedStatment - Connection 순 반환) try { rset.close(); } catch (SQLException e) { e.printStackTrace(); } try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } return members; //리스트를 반환한다. } //========================================================================================================== //회원수정 메소드.. 이름,생일,이메일 public int updateMember(String type, String data, String id) { System.out.println(type+"/"+id); int result=0; Member member = null; //조회된 아이디가 없으면 null반환 Connection conn = null; PreparedStatement pstmt = null; //type이 birthday이면 data 값을 날짜로 형변환 if(type.equals("birthday")) { Date birthday = null; SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); //java.util.Date->long->java.sql.Date try { birthday = new Date(sdf.parse(data).getTime()); } catch (ParseException e) { e.printStackTrace(); } } String sql = "update member set "+type+" =? where id = ?"; try { //1.드라이버 클래스 등록 Class.forName(driverClassName); //2.connection 객체 생성 (url,user,pw필요) conn = DriverManager.getConnection(url,user,password); conn.setAutoCommit(false); //-auto commit false 설정(d:true) //3.preparedStatement 객체 생성(query) pstmt = conn.prepareStatement(sql); // -미완성 쿼리의 ? 값 대입 //입력한 id를 where절 조건으로 삼는다. pstmt.setString(1,data); pstmt.setString(2, id); //4.쿼리 실행(dml) - int 반환받는다. result = pstmt.executeUpdate(); //처리된 행의 수를 반환. 2행이 어쩌고~:2가 반환 //5.트랜잭션처리 (commit or rollback) if(result>0) conn.commit();//결과가 1개이상이면 성공- 커밋 else conn.rollback();//실패했다면 롤백 } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } finally { //6.자원반납 try { pstmt.close(); } catch (Exception e) { e.printStackTrace(); } try { conn.close(); } catch (Exception e) { e.printStackTrace(); } } return result; }//update }
5.MemberMenu
더보기package com.sh.member.view; import java.sql.Date; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.List; import java.util.Scanner; import com.sh.member.controller.MemberController; import com.sh.member.model.entity.Member; public class MemberMenu { private Scanner sc = new Scanner(System.in); private MemberController mc = new MemberController(); public void mainMenu() { //아래의 메뉴를 선택할때마다 memberController를 거쳐야함 String menu = """ ===== 회원 관리 프로그램 ===== 1.전체조회 2.아이디 조회 3.이름 검색 4.회원 가입 5.회원 정보 변경 6.회원 탈퇴 0.프로그램 종료 ========================== 선택:"""; while(true) { System.out.println(menu); String choice = sc.next(); Member member = null; int result = 0; List<Member> members = null; String id = null; String searchName=null; switch(choice) { case "1": members = mc.findAll(); displayMembers(members); break; //2.아이디 조회 case "2": id = inputId(); member = mc.findById(id); //조회가 되지 않았다면 null반환 displayMember(member); break; //3:이름 검색 ->동명이인이 있어서 like연산 사용해야. case "3": searchName = inputName(); members = mc.findName(searchName); displayMembers(members); break; case "4": //처리 결과 값은 정수값이 온다. member = inputMember(); //회원정보 입력 result = mc.insertMember(member); //db저장 요청 displayResult("회원 가입",result,null);//결과출력 break; //update case "5": /* * 수정할 회원 아이디를 입력받고 * 해당 회원의 조회결과를 보여준 뒤 서브메뉴를 출력한다. * 수정은 이름/생일/이메일만 가능. * 회원정보 수정 완료시 수정된 회원정보를 보여주고 수정메뉴 다시출력 * */ id = inputId(); member = mc.findById(id); //조회가 되지 않았다면 null반환 displayUpadateMenu(member); break; //회원 탈퇴 delete case "6": id = inputId(); result = mc.deleteMember(id); //조회가 되지 않았다면 null반환 displayResult("회원 탈퇴",result,null);//결과출력 break; case "0": return; //현재 메소드를 호출한 곳으로 돌아감-main으로 되돌아가 종료 default: System.out.println("잘못 입력 하셨습니다.."); break; } } } //수정메뉴 private void displayUpadateMenu(Member m) { if(m==null) { System.out.println("회원을 찾을 수 없습니다.ㅠㅠ"); } else { System.out.println("----------------------------------------------"); System.out.printf("ID: %-10s\n" + "NAME: %-10s\n" + "GENDER: %-10s\n" + "BIRTHDAY: %-10s\n" + "EMAIL: %-20s\n" + "POINT: %-10s\n" + "CREATED_AT: %-20s\n", m.getId(), m.getName(), m.getGender(), m.getBirthday(), m.getEmail(), m.getPoint(), new SimpleDateFormat("yyyy-MM-dd HH:mm").format(m.getCreatedAt()) ); System.out.println("----------------------------------------------"); System.out.println(m.getId()+"님의 회원정보를 수정합니다."); String menu = """ ===== 회원 정보 수정 ===== 1.이름 수정 2.생일 수정 3.이메일 수정 0.메인메뉴로 돌아가기. ======================= 선택:"""; while(true) { int result=0; System.out.println(menu); String choice = sc.next(); switch(choice) { case "1": //이름수정 String name = inputUpdateInfo("이름"); result = mc.updateMamber("name",name,m.getId()); //0이면 실패, 1이면 성공 displayResult("회원 이름 수정",result,m.getId());//결과출력 break; case "2": //생일수정 String birthday = inputUpdateInfo("생일"); result = mc.updateMamber("birthday",birthday,m.getId()); //0이면 실패, 1이면 성공 displayResult("회원 생일 수정",result,m.getId());//결과출력 break; case "3": //이메일수정 String email = inputUpdateInfo("메일"); result = mc.updateMamber("email",email,m.getId()); //0이면 실패, 1이면 성공 displayResult("회원 메일 수정",result,m.getId());//결과출력 break; case "0": System.out.println("메인 메뉴로 되돌아갑니다."); return; //현재 메소드를 호출한 곳으로 돌아감-main메뉴로 되돌아감. default: System.out.println("잘못 입력 하셨습니다.."); break; } }//while }//else }//method private String inputUpdateInfo(String what) { System.out.print(">수정하실 "+what+"을 입력해주세요."); return sc.next(); } //사용자명으로 검색 private String inputName() { System.out.println("조회할 사용자 이름을 입력하세요."); return sc.next(); } //1건의 회원 정보 조회 private void displayMember(Member m) { if(m == null) { System.out.println("회원을 찾을 수 없습니다.ㅠㅠ"); } else { System.out.println("----------------------------------------------"); System.out.printf("ID: %-10s\n" + "NAME: %-10s\n" + "GENDER: %-10s\n" + "BIRTHDAY: %-10s\n" + "EMAIL: %-20s\n" + "POINT: %-10s\n" + "CREATED_AT: %-20s\n", m.getId(), m.getName(), m.getGender(), m.getBirthday(), m.getEmail(), m.getPoint(), new SimpleDateFormat("yyyy-MM-dd HH:mm").format(m.getCreatedAt()) ); System.out.println("----------------------------------------------"); } } //조회하고자 하는 사용자 아이디 입력받기 private String inputId() { System.out.println("아이디를 입력하세요."); return sc.next(); } /** * n건의 회원조회 결과를 출력한다. * */ private void displayMembers(List<Member> members) { System.out.println("------------------------------------------------------------------------"); System.out.printf("%-10s%-10s%-10s%-10s%-20s%-10s%-20s\n", "ID","NAME","GENDER","BIRTHDAY","EMAIL","POINT","CREATED_AT"); System.out.println("------------------------------------------------------------------------"); if(members.isEmpty()) { System.out.println("조회된 결과가 없습니다....."); } else { for(Member m : members) { System.out.printf("%-10s%-10s%-10s%-10s%-20s%-10s%-20s\n", m.getId(), m.getName(), m.getGender(), m.getBirthday(), m.getEmail(), m.getPoint(), new SimpleDateFormat("yyyy-MM-dd HH:mm").format(m.getCreatedAt()) ); } } System.out.println("------------------------------------------------------------------------"); } //dml 처리결과 메소드 private void displayResult(String type, int result,String id) { if(result>0) { System.out.println(type+"성공!💞"); if(id!=null) { Member member = mc.findById(id); //조회가 되지 않았다면 null반환 displayMember(member); } } else { System.out.println(type+"실패!(ノ`Д)ノ"); } } //회원가입 메소드 //회원 정보를 입력받아 Member객체로 반환한다. private Member inputMember() { System.out.println("회원 정보를 입력해주세요."); System.out.println("아이디:"); String id = sc.next(); System.out.println("이름:"); String name = sc.next(); System.out.println("성별(M/F):"); String gender = sc.next(); System.out.println("생일(19900909):"); String _birthday = sc.next(); Date birthday = null; SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); //java.util.Date->long->java.sql.Date try { birthday = new Date(sdf.parse(_birthday).getTime()); } catch (ParseException e) { e.printStackTrace(); } System.out.println("이메일:"); String email = sc.next(); return new Member(id,name,gender,birthday,email, 0, null); } }
*false로 지정한 이유:여러 쿼리를 실행할때 최소작업단위에 따라 커밋하기 위해..
true인 경우 쿼리 하나 실행할 때마다 자동 커밋이 되기 때문에..
conn.setAutoCommit(false); //-auto commit false 설정(d:true)
'공부 > 학습' 카테고리의 다른 글
1101 jdbc - day3 (0) 2023.11.01 1031 jdbc - day2 (0) 2023.10.31 1027 (29일차) - sql 9일차 (0) 2023.10.27 1026 (28일차) -sql 8일 (0) 2023.10.26 1024 (26일차)- sql 6일 (0) 2023.10.24 다음글이 없습니다.이전글이 없습니다.댓글