JAVA

JDBC응용

순두부 호랑이 2022. 9. 1. 23:37
728x90
SMALL

<자바에서 sql파일 만드는 방법>

scr->new->sqlfile 

자바에서 sql을 만들고 꼭 연결을 해야 한다

연결하는 방법은

https://yuhyewon.tistory.com/47?category=1041413 

 

8/29 [java] - jdbc,mvc

JDBC(JAVA Database Connectivity) : 자바에서 DB에 접속하기 위해 사용되는 API JBBC DrIVER: DBMS 제소사들이 자신들의 DB에 맞게 interface의 메소드들을 구현하여 제공 !!JDBC 연결 순서!! 1. JDBC Driver 로..

yuhyewon.tistory.com

이 게시물에 나와있다

 

<자바에서 Data Source Explorer 연결하는 법>

1. 상단에 있는 Window창에서 Database Connections을 누른다

2.Database Connections에서 new를 누른다

3. 내가 사용하는 데이터 베이스 프로그램을 선택한다 나는 Oracle를 사용해서 Oracle을 선택했다

4. 옆에 나침반(?)모양처럼 생긴것을 선택한다

5. Name/Type 탭에서 Oracle Thin Driver  Oracle  11 선택  -> JAR List에서 ojdbc14.jar선택후 Remove JAR/Zip -> Add JAR/Zip선택 -> ojdbc6선택 -> ok선택

6. ServiceName:xe 

    Host: localhost

    Port number : 1521

    User name: hr

    Password: hr

7. 이렇게 노란색 이 뜨면서 연결이 된다

Type: Oracle_11/ Name: New Oracle / Database : xe 를 선택한다

8. 해당문 드레그 후 alt+x로 실행한후 'SQL Results' 에서 Succeded가 되었는지 확인한다

 

<memberCon>

package Controller;

import java.util.ArrayList;

import Model.MemberDAO;
import Model.MemberDTO;

public class MemberCon {
	// 뷰에서 받은 정보를 모델로 바로 보낼 수 없음
	// 컨트롤러를 사용해줘야함
	// Controller 역할을 진행하는 클래스
	
	// view <-> DAO(DB의 로직)
	// 컨트롤러가 DAO로 접근할 수 있는 객체 생성
	MemberDAO dao = new MemberDAO();
	
	int cnt = 0;
	
	public int conInsert(String id, String pw, String nick, int age) {
		//View가 넘겨준 회원가입 정보들을 DAO로 연결해주는 메소드
		cnt = dao.insert(id, pw, nick, age);
		return cnt;
	}
	
	public ArrayList<MemberDTO> conSelect() {
		
		ArrayList<MemberDTO> totalList = new ArrayList<>();
		
		totalList = dao.select();
		
		return totalList;
	}
	
	//로그인을 진행하기 위한 Controller 요청
	public String conLogin(String id, String pw) {
		
		String nick = dao.login(id, pw);
				
		return nick;
	}
}

<MemberDAO>

package Model;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class MemberDAO {
	Connection conn = null;
	PreparedStatement psmt = null;
	ResultSet rs = null;
	
	int cnt = 0; // executeUpdate의 결과값을 담아주는 변수
	
	// DAO : Data Access Object
	// 데이터베이스의 data에 접근을 위한 객체 (접근 로직)

	// 데이터베이스 접속을 위한 연결 메소드
	public void getCon() {

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

			String url = "jdbc:oracle:thin:@localhost:1521:xe";
			String db_id = "hr";
			String db_pw = "hr";

			conn = DriverManager.getConnection(url, db_id, db_pw);

			if (conn != null) {
				System.out.println("연결 성공!");
			} else {
				System.out.println("연결 실패!");
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 사용된 객체를 닫아주는 메소드
	public void close() {

		try {
			if (rs != null) {
				rs.close();
			}
			if (psmt != null) {
				rs.close();
			}
			if (conn != null) {
				rs.close();
			}
		} catch (Exception e) {
			e.printStackTrace();

		}
	}

	// [1] 회원가입
	// - sql문장 실행
	// - 연결 종료
	public int insert(String id, String pw, String nick, int age) {
		
		getCon(); // - DB 접속 -> 중복되는 애들 메소드로 로직 정리하여 따로 뽑아내기
		
		try {
			String sql = "insert into memberinfo values (?,?,?,?)";
			psmt = conn.prepareStatement(sql);
			
			psmt.setString(1, id);
			psmt.setString(2, pw);
			psmt.setString(3, nick);
			psmt.setInt(4, age);
			
			cnt = psmt.executeUpdate();
			
		
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		finally {
			close();
		}
		
		return cnt;
		
	
	}

	// [2] 로그인
	public String login(String id, String pw) {
		String nick = ""; //결과값 리턴을 위한 변수
		
		getCon();
		
 		try {
			String sql = "select nick from memberInfo where id = ? and pw = ?";
			psmt = conn.prepareStatement(sql);
			psmt.setString(1,id);
			psmt.setString(2, pw);
			
			rs = psmt.executeQuery();
			
			if(rs.next()) {
				nick = rs.getString(1);
			}
						
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
 		
 		finally {
 			close();
 		}
		
		return nick;
	}

	// [3] 조회 -> 전체 회원의 아이디와 닉네임만 출력!
	public ArrayList<MemberDTO> select() {
		
		// 전체 회원의 정보를 담을 수 있는 ArrayList 만들기
		ArrayList<MemberDTO> totalList = new ArrayList<>();
		
		getCon();

		try {
			String sql = "select id, nick from memberInfo";
			
			psmt = conn.prepareStatement(sql);
			
			rs = psmt.executeQuery();
			
			while(rs.next()) {
				String id = rs.getString("id");
				String nick = rs.getString("nick");
				
				//System.out.println(id + " / "+ nick);
				
				MemberDTO dto = new MemberDTO(id, nick);
				totalList.add(dto);

				//totalList.add(new MemberDTO(id,nick)); ->위에꺼랑 사용가능
				
				
			}
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		finally {
			close();
		}
		return totalList;
	}

	// [4] 탈퇴
	// - DB 접속
	// - sql문장 실행
	// - 연결 종료

}

<Member DTO>

package Model;

public class MemberDTO {
	
	//Model -> VO(Value Object) -> DTO(Data Transfer Object)
	
	// 회원관리를 위한 설계도 => 정보 캡슐화 아무나 접근금지 
	private String id;
	private String pw;
	private String nick;
	private int age;
	
	// id
	// id, nick
	// id, pw, nick, age
	
	//Select 기능 사용시 ArrayList에 담을 id, nick을 하나의 생성자로 만들기!
	public MemberDTO(String id, String nick) {
		this.id=id;
		this.nick = nick;
	}
	
	public String getId() {
		return id;
	}
	
	public String getNick() {
		return nick;
	}
	

}

<Member Main>

package View;

import java.util.ArrayList;
import java.util.Scanner;

import Controller.MemberCon;
import Model.MemberDTO;

public class MemberMain {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		// 사용자에게 보여지는 화면들을 작성하는 구역
		
		//Controller에게 접근하기 위한 객체 생성
		MemberCon con = new MemberCon();
		int result = 0;
		
		while(true) {
			System.out.print("[1]회원가입 [2]로그인 [3]조회 [4]탈퇴 [5]종료 >> ");
			int menu = sc.nextInt();
			
			if(menu == 1) {
				// insert 작업
				System.out.println("======회원가입======");
				System.out.print("아이디 : ");
				String id = sc.next();
				System.out.print("비밀번호 : ");
				String pw = sc.next();
				System.out.print("닉네임 : ");
				String nick = sc.next();
				System.out.print("나이 : ");
				int age = sc.nextInt();
				
				result = con.conInsert(id, pw, nick, age);
				// MemberDTO -> id, pw, nick, age -> (DB로 넘어가지도록 테이블필요)
				if(result > 0) {
					System.out.println("가입 성공!");
				}else {
					System.out.println("가입 실패!");
				}
			}else if(menu == 2) {
				
				System.out.println("로그인 할 아이디 : ");
				String id = sc.next();
				
				System.out.print("로그인 할 비밀번호 : ");
				String pw = sc.next();
				
				// 로그인 성공시 회원의 닉네임 출력하기!
				String nick = con.conLogin(id, pw);
				
				if(nick!=null) {
					System.out.println("환영합니다 ~~ "+ nick + "님");
				}
				
			}else if(menu == 3) {
				
				ArrayList<MemberDTO> resultList = new ArrayList<>();
				
				resultList = con.conSelect();  // Controller에 기능 요청!	
				
				//ArrayList 출력!
				for(int i =0; i< resultList.size(); i++) {
					System.out.println(resultList.get(i).getId() + " / "
						+resultList.get(i).getNick());
				}
				
			}else if(menu == 4) {
				// delete 작업
			}else if(menu == 5) {
				System.out.println("종료합니다.");
				break;
			}
		}
	}
}

<sql_Member.sql>

/*
 * table 명 : memberInfo
 * varchar2(크기 30) id,
 * 문자(크기 30) pw,
 * 문자(크기 30) nick,
 * 숫자(20) age 
 * 
 * 를 구성하는 테이블 생성!
 */
create table memberInfo(
 	id varchar2(30),
 	pw varchar2(30),
 	nick varchar2(30),
 	age number(20)
);

insert into memberInfo values('test1','123','test1',20);
insert into memberInfo values('test2','123','test2',24);
insert into memberInfo values('test3','123','test3',21);
insert into memberInfo values('test4','123','test4',29);

select id, nick from memberInfo;


select*from memberInfo;
728x90
LIST