JDBC응용
<자바에서 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;