본문 바로가기

IT일반과목/JDBC

20180829 JDBC CODING 절차

@ JDBC Coding 절차

 

1. Driver 등록

-> 이클립스에서 DBMS와 연동하기 위해서는 첫번째로 Driver 등록이 되어 있어야 함

(Class.forName 사용)

 

2. DBMS와 연결 (DriverManager 객체 사용 / Connection 사용)

 

3. Statement 생성 - 작성한 쿼리문을 전송할 객체를 생성 해야 함

a. statement 방식

b. preparedStatement 방식

-> 2가지 방식이 있으며 우선적으로는 statement 방식을 사용하겠음

-> 추후 preparedStatement 방식을 사용하겠음

 

4. SQL 전송

-> Statement 객체를 이용하여 SQL 구문을 전송

-> 결과값이 있다면 ResultSet 객체를 이용하여 저장함

 

5. 결과 처리

-> SELECT 구문일 경우 ResultSet을 이용하여 정보를 객체에 담는 처리

-> INSERT, UPDATE, DELETE 구문일 경우 리턴값은 SQL 구문 처리 갯수가 리턴 됨(int)

 

6. 연결된 리소스 닫기 (close 작업)

 

 

------------------------------------------------------

Statement 객체를 이용해서 쿼리를 보낼 것이다.

 

===============================================================================

이클립스 하나 더켜서 D:\JDBC_Workspace_test

이렇게 만들고 열기

 

-------------------------------------------------

했던과정을 한번 더 새롭게 처음부터 만들어보기!!!

 

1. 실행용 클래스 제작 및 View 객체 생성

2. 메뉴 메소드 호출

3. 메뉴 메소드에서 메뉴 제작

4. 메뉴 선택에 따라(Scanner) 컨트롤러 ghcnf

5. 컨트롤러에서 DAO 호출

6. DAO에서 JDBC 코드를 이용하여 DB에서 데이터 추출

7. DAO에서 데이터 파싱후 리턴

8. 컨트롤러에서 데이터 존재 여부에 따라 결과값 출력

 

 

 

 

 

 


----------------------------------------------------------------------

 

 

package org.kh.member.controller;

 

import java.util.ArrayList;

 

import org.kh.member.dao.MemberDao;

import org.kh.member.model.vo.Member;

 

public class MemberController {

 

// 컨트롤러 클래스의 역할

// view에서 요청한 기능을 컨트롤러가 DAO와의 연결을 하는 역할

 

// 회원 전체출력 메소드

public void selectMemberAll() {

MemberDao dao = new MemberDao();

ArrayList<Member> list = dao.selectMemberAll(); // DAO의 회원 전체 조회 메소드 호출

// 리턴한 list 결과 상황

// 1. list 가 있을 때

// 2. lost 가 없을 때

 

if (!list.isEmpty())// .isEmpty =비어있따 // list가 있을 떄

{

 

// 결과출력

System.out.println("\n----------------- 전체 회원 정보 조회 -----------------\n");

System.out.println("아이디 비밀번호 이름 성별 나이 이메일 전화번호 주소 취미 가입일");

 

//1번째 방식

for(Member m : list) {

System.out.println(m);//m만써도된다.원래는 m.toString()이렇게 써야되는데 어차피 String이므로생략했다.

}

//2번째 방식

/*

for (Member m : list) {

System.out.println(

m.getMemberId() + " " +

m.getMemberPwd() + " " +

m.getMemberName() + " "+

m.getGender() + " " +

m.getAge() + " " +

m.getEmail() + " " +

m.getPhone()+ " " +

m.getAddress() + " " +

m.getHobby() + " " +

m.getEnrollDate());

}

*/

//3번째 방식

/*

* for (int i = 0; i < list.size(); i++) {

* System.out.println(list.get(i).getMemberId() + " " +

* list.get(i).getMemberPwd() + " " + list.get(i).getMemberName() + " " +

* list.get(i).getGender() + " " + list.get(i).getAge() + " " +

* list.get(i).getEmail() + " " + list.get(i).getMemberId() + " " +

* list.get(i).getAddress() + " " + list.get(i).getHobby() + " " +

* list.get(i).getEnrollDate()); }

*/

} else// list가 없을 때

{

// 없다고 알려주는 코드

System.out.println("회원 목록이 없습니다.");

}

 

}

 

// 회원 아이디 검색 메소드

 

public void selectMemberId() {

}

 

// 회원 이름 검색 메소드

public void selectMemberName() {

}

 

// 회원 가입 메소드

public void insertMember() {

}

 

// 회원 정보 수정 메소드

public void updateMember() {

}

 

// 회원 탈뢰 메소드

public void deleteMember() {

}

 

}

 

----------------------------------------------------------------------

 

 

package org.kh.member.dao;

 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.ArrayList;

 

import org.kh.member.model.vo.Member;

 

public class MemberDao {

//DBMS에 접근하는 전체 회원 조회 메소드

public ArrayList<Member> selectMemberAll() {

//필요한 레퍼런스 생성(Connection, Statement, ResultSet)

//java.sql 패키지 import

Connection conn = null; //Connection 레퍼런스 (객체 생성은 아직 안함)

Statement stmt = null; //Statement 래퍼런스 (객체 생성은 아직 안함)

ResultSet rset=null; //ResultSet 래퍼런스 (객체 생성은 아직 안함)

 

ArrayList<Member> list=new ArrayList<Member>();

//@ JDBC Coding 절차

try {

//1. Driver 등록

Class.forName("oracle.jdbc.driver.OracleDriver");

//2. DBMS와 연결 (Connection 사용)

conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe"

,"member", "member");

//첫번째는 연결 정보(DB종류, 타입, IP주소, 포트 등등)

//두번째는 연결하는 DBID(아이디)

//세번째는 연결하는 IDPW(비밀번호)

//get으로 읽어오는것이므로 저장하는 것이다.conn에 저장하는 것이다.

System.out.println(conn);

// conn 레퍼런스 안에 있는 값을 출력시

// DBMS에 정상연결 되었다면 hashCode (Connection )이 출력 되고

// DBMS에 연결 실패 하였다면 null값을 리턴

//3. Statement 생성 - 작성한 쿼리문을 전송할 객체를 생성 해야 함

// Connection (conn) 객체를 이용하여 Statement 객체를 생성함

stmt=conn.createStatement(); // Statement 객체 생성

//4. SQL 전송

// - Query 문이 있어야 전송합니다.

String query = "select * from member";

rset=stmt.executeQuery(query); // Statement 객체를 이용하여 쿼리문 실행

//결과를 rset에 담는다.

 

//5. 결과 처리

// rset을 이용하여 결과를 처리함

// rset.next() 메소드와 rset.set...() 메소드를 이용함

// next 메소드는 각 행을 가리키는 메소드(작업시 마다 사용해야함)

// set...() 메소드는 각 컬럼의 정보를 가져올때 사용함

//rset.next()

//rset.getString("member_id"); -> rset을 이용해스트링값갖고오는데 그컬럼명은 멤버아이디꺼갖고오라는 것이다.

while(rset.next()) {

Member m = new Member();

//ID값 저장하기

m.setMemberId(rset.getString("member_id"));

m.setMemberPwd(rset.getString("member_pwd"));

m.setMemberName(rset.getString("member_name"));

m.setGender(rset.getString("gender").charAt(0));

m.setAge(rset.getInt("age"));

m.setEmail(rset.getString("email"));

m.setAddress(rset.getString("address"));

m.setHobby(rset.getString("hobby"));

m.setEnrollDate(rset.getDate("enroll_date"));

list.add(m);

}

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//오라클에 jdbc에 드라이버에 오라클드라이버를 등록하겠다.

//이코드가 없어도 8버전부턴 가능하긴한데 넣어주는게 좋다.

catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally {

//6. 연결된 리소스 닫기 (close 작업 - finally에서 작업)

try {

rset.close();

stmt.close();

conn.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

 

return list;

}

}

 

----------------------------------------------------------------------

 

 

package org.kh.member.model.vo;

 

import java.sql.Date;

 

public class Member {

//ID, PW

private String memberId;

private String memberPwd;

private String memberName;

private char gender;

private int age;

private String email;

private String phone;

private String address;

private String hobby;

private Date enrollDate; // java.sql.Date import

public Member(String memberId, String memberPwd, String memberName, char gender, int age, String email,

String phone, String address, String hobby, Date enrollDate) {

super();

this.memberId = memberId;

this.memberPwd = memberPwd;

this.memberName = memberName;

this.gender = gender;

this.age = age;

this.email = email;

this.phone = phone;

this.address = address;

this.hobby = hobby;

this.enrollDate = enrollDate;

}

public Member() {

super();

// TODO Auto-generated constructor stub

}

 

//이렇게 해줄경우 컨트롤러에서 toString을 호출하게끔 할수 있다.

@Override

public String toString() {

return

this.getMemberId() + " " +

this.getMemberPwd() + " " +

this.getMemberName() + " "+

this.getGender() + " " +

this.getAge() + " " +

this.getEmail() + " " +

this.getPhone()+ " " +

this.getAddress() + " " +

this.getHobby() + " " +

this.getEnrollDate();

}

 

//alt+shift+s

public String getMemberId() {

return memberId;

}

public void setMemberId(String memberId) {

this.memberId = memberId;

}

public String getMemberPwd() {

return memberPwd;

}

public void setMemberPwd(String memberPwd) {

this.memberPwd = memberPwd;

}

public String getMemberName() {

return memberName;

}

public void setMemberName(String memberName) {

this.memberName = memberName;

}

public char getGender() {

return gender;

}

public void setGender(char gender) {

this.gender = gender;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getEmail() {

return email;

}

public void setEmail(String email) {

this.email = email;

}

public String getPhone() {

return phone;

}

public void setPhone(String phone) {

this.phone = phone;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

public String getHobby() {

return hobby;

}

public void setHobby(String hobby) {

this.hobby = hobby;

}

public Date getEnrollDate() {

return enrollDate;

}

public void setEnrollDate(Date enrollDate) {

this.enrollDate = enrollDate;

}

}

 

 

----------------------------------------------------------------------

 

 

package org.kh.member.run;

 

import org.kh.member.view.MemberMgr;

 

public class RunMain {

public static void main(String[] args) {

MemberMgr mgr = new MemberMgr();

mgr.mainMenu();

//new MemberMgr().mainMenu(); //객체 만들자 마자 실행

//한번만 만들어서 실행하는걸로 challenge방식으로 할 수도 있다.

}

}

 

----------------------------------------------------------------------

 

 

package org.kh.member.view;

 

import java.util.Scanner;

 

import org.kh.member.controller.MemberController;

 

//회원 관리 메뉴를 보여주는 View Class

public class MemberMgr {

private Scanner sc = new Scanner(System.in);

private MemberController mCon = new MemberController();//컨트롤러 객체

// 메인 메뉴 메소드

public void mainMenu() {

int choice;

do {

System.out.println("\n= = = = = = = = = = 회원 관리 프로그램 = = = = = = ");

System.out.println("1. 회원 정보 전체 조회");

System.out.println("2. 회원 아이디 조회(1)");

System.out.println("3. 회원 이름으로 검색(다수)");

System.out.println("4. 회원 가입");

System.out.println("5. 회원 정보 변경");

System.out.println("6. 회원 탈퇴");

System.out.println("0. 프로그램 종료");

System.out.print("선택 : ");

choice = sc.nextInt(); //선택값 choice 변수에 저장

 

switch(choice) {

case 1:mCon.selectMemberAll(); break;

case 2:break;

case 3:break;

case 4:break;

case 5:break;

case 6:break;

}

}while(choice!=0);//한번은 무조건 실행될 것이기 때문에 do while로 짰다.

System.out.println("저희 프로그램을 이용해주셔서 감사합니다. 호구님!");

}

}

 

 

 

'IT일반과목 > JDBC' 카테고리의 다른 글

20180831 JDBC 코딩(다른방식의 코딩-2)  (0) 2018.08.31
20180831 JDBC 코딩(다른방식의 코딩-1)  (0) 2018.08.31
20180831 JDBC 과제  (0) 2018.08.31
20180830 JDBC  (0) 2018.08.30
20180828 JDBC개요  (0) 2018.08.28