✿∘˚˳°∘°
25일차 : JDBC - Statement 본문
20221230
이클립스와 오라클의 인코딩방식이 다르면 데이터교환 시 글자가 깨질 수 있다
UTF-8로 맞춰줌
Preferences > General > Workspace > Encoding확인
Preferences > General > Editors > Speling > Encoding확인
SELECT 는 조회결과를 값으로 받기 때문에 이를 받아줄 객체가 필요함(ResultSet)
INSERT / UPDATE / DELETE 는 행 삽입/수정/삭제 시 작업에 성공한 n개의 행이 리턴되므로 int형으로 받으면 된다.
JDBC 실습에 사용할 계정 / 테이블 생성(+INSERT)
-- 20221230 : JAVA프로그램과 연동할 계정만들기
CREATE USER jdbc IDENTIFIED BY 1234;
GRANT CONNECT, RESOURCE TO jdbc;
-- 테이블생성
CREATE TABLE MEMBER_TBL(
MEMBER_ID VARCHAR2(20) PRIMARY KEY, -- 아이디
MEMBER_PW VARCHAR2(30) NOT NULL, -- 비밀번호
MEMBER_NAME VARCHAR2(30) NOT NULL, -- 이름
MEMBER_ADDR VARCHAR2(100) NOT NULL, -- 주소
MEMBER_PHONE CHAR(13) NOT NULL, -- 전화번호
MEMBER_AGE NUMBER NOT NULL, -- 나이
MEMBER_GENDER CHAR(3) CHECK(MEMBER_GENDER IN('남', '여')),
ENROLL_DATE DATE -- 가입일
);
INSERT INTO MEMBER_TBL VALUES
('user01', '1111', '유저01', '서울시 영등포구', '010-1111-1111', 20, '남', SYSDATE);
INSERT INTO MEMBER_TBL VALUES
('user02', '2222', '유저02', '서울시 강남구', '010-2222-2222', 21, '여', SYSDATE);
INSERT INTO MEMBER_TBL VALUES
('user03', '3333', '유저03', '서울시 금천구', '010-3333-3333', 22, '여', SYSDATE);
INSERT INTO MEMBER_TBL VALUES
('user04', '4444', '유저04', '인천시 서구', '010-4444-4444', 23, '남', SYSDATE);
INSERT INTO MEMBER_TBL VALUES
('user05', '5555', '유저05', '인천시 부평구', '010-5555-5555', 24, '여', SYSDATE);
SELECT * FROM MEMBER_TBL;
COMMIT; -- COMMIT을 하지않으면 JAVA에서 조회할 수 없음
[ JAVA 클래스 ] - [ memberStart.java / member.java / memberConroller.java / memberDao.java ]
- memberStart : 실행 클래스
- member : 기능제공클래스1 member의 정보를 저장하고 세팅할 클래스
- memberController : 기능제공클래스2, 수행할 작업을 작성
- memberDao : 기능제공클래스3, DB관련코드를 따로관리할 클래스,
데이터베이스에 접속하고 쿼리문을 수행하고 결과를 되돌려주는 클래스
DAO : Data Access Object : DB관련코드는 DAO에서 따로관리(코드가 길기 때문에)
Member.java
package kr.or.member.vo;
import java.sql.Date;
public class Member {
private String memberId;
private String memberPw;
private String memberName;
private String memberAddr;
private String memberPhone;
private int memberAge;
private char memberGender;
private Date enrollDate; //java.sql의 Date사용
public Member() {
super();
}
public Member(String memberId, String memberPw, String memberName, String memberAddr, String memberPhone,
int memberAge, char memberGender, Date enrollDate) {
super();
this.memberId = memberId;
this.memberPw = memberPw;
this.memberName = memberName;
this.memberAddr = memberAddr;
this.memberPhone = memberPhone;
this.memberAge = memberAge;
this.memberGender = memberGender;
this.enrollDate = enrollDate;
}
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public String getMemberPw() {
return memberPw;
}
public void setMemberPw(String memberPw) {
this.memberPw = memberPw;
}
public String getMemberName() {
return memberName;
}
public void setMemberName(String memberName) {
this.memberName = memberName;
}
public String getMemberAddr() {
return memberAddr;
}
public void setMemberAddr(String memberAddr) {
this.memberAddr = memberAddr;
}
public String getMemberPhone() {
return memberPhone;
}
public void setMemberPhone(String memberPhone) {
this.memberPhone = memberPhone;
}
public int getMemberAge() {
return memberAge;
}
public void setMemberAge(int memberAge) {
this.memberAge = memberAge;
}
public char getMemberGender() {
return memberGender;
}
public void setMemberGender(char memberGender) {
this.memberGender = memberGender;
}
public Date getEnrollDate() {
return enrollDate;
}
public void setEnrollDate(Date enrollDate) {
this.enrollDate = enrollDate;
}
}
memberConroller 의 전역변수 / 생성자 선언
// private ArrayList<Member> members; 정보저장을 DB에 할거기때문에 필요없음
private Scanner sc;
// 데이터베이스 관련코드를 처리하는 객체를 전역변수로 선언(여러메소드에서 사용하므로)
private MemberDao dao;
public MemberController() {
super();
sc = new Scanner(System.in);
dao = new MemberDao();
}
0. 메인코드
memberConrtoller.java - main()
public void main() {
while(true) {
System.out.println("\n ---------- 회원 관리 프로그램 v1 ----------\n");
System.out.println("1. 전체 회원 조회"); // SELECT
System.out.println("2. 아이디로 회원 조회"); // SELECT
System.out.println("3. 이름으로 회원 조회"); // SELECT
System.out.println("4. 회원 가입"); // INSERT
System.out.println("5. 회원 정보 변경"); // UPDATE
System.out.println("6. 회원 탈퇴"); // DELETE
System.out.println("0. 프로그램 종료");
System.out.print("선택 > ");
int sel = sc.nextInt();
switch(sel) {
case 1:
selectAllMember();
break;
case 2:
selectMemberId();
break;
case 3:
selectMemberName();
break;
case 4:
insertMember();
break;
case 5:
//비밀번호, 주소, 전화번호 변경
updateMember();
break;
case 6:
//아이디로 삭제
deleteMember();
break;
case 0:
System.out.println("프로그램을 종료합니다.");
return;
default:
System.out.println("잘못입력하셨습니다");
}
}
}
1. 전체회원조회
memberController.java
public void selectAllMember() {
// 1.여기서 DB작업이 필요한지 생각하기
// 2.필요하면 사용할 쿼리문 작성 : SELECT * FROM MEMBER_TBL;
// 3.쿼리문을 완성하기위해서 사용자한테 입력받아야할 값이 있는지
// 4.사용자한테 입력받을 값이 없음 -> 바로 쿼리문을 실행하고 결과받아오기(있으면 입력먼저받기)
ArrayList<Member> list = dao.selectAllMember();
// 회원정보 1명을 받을거면 Member타입으로 받음
// 회원정보 여러개를 받을거면 Member[]로 받아야하는데, 배열을 사용하면 반드시 길이를 지정해줘야함(몇명인지모르는데)
// 길이제한이 없는 배열인 ArrayList<Member>를 사용해준다.
System.out.println(list.size());
System.out.println("\n ---------- 전체 회원 출력 ----------\n");
System.out.println("아이디\t비밀번호\t이름\t주소\t\t전화번호\t\t나이\t성별\t가입일");
System.out.println("------------------------------------------------------------------------------");
for(int i=0; i<list.size(); i++) {
Member m = list.get(i);
System.out.print(m.getMemberId()+"\t");
System.out.print(m.getMemberPw()+"\t");
System.out.print(m.getMemberName()+"\t");
System.out.print(m.getMemberAddr()+"\t");
System.out.print(m.getMemberPhone()+"\t");
System.out.print(m.getMemberAge()+"\t");
System.out.print(m.getMemberGender()+"\t");
System.out.println(m.getEnrollDate());
}
}
memberDao.java
// 데이터베이스에 접속해서 전체회원을 조회하여 리턴하는 메소드
public ArrayList<Member> selectAllMember(){
//JDBC 작성절차
//0. 자원반환을 해야하는 객체를 미리 선언
Connection conn = null; //2번절차에서 사용할 객체
Statement stmt = null; //3번절차에서 사용할 객체
ResultSet rset = null; //4번절차에서 사용할 객체(SELECT 인 경우)
//결과를 반환할 객체
ArrayList<Member> list = new ArrayList<Member>();
//사용할 쿼리문을 작성
//문자열에 작성(단, ""안에 ;은 반드시제거 - 있으면 에러발생 / 대소문자상관X)
String query = "select * from member_tbl";
try {
//1. 드라이버등록(연결 시 사용할 클래스 등록(ojdbc6제공), 외부라이브러리추가를 하지않으면 사용불가)
Class.forName("oracle.jdbc.driver.OracleDriver");//"패.키.지.클래스"
//2. 커넥션 생성(java와 db가 연결할 통로만들기, 1번에서 등록한 드라이버를 이용해서 연결생성 - dbms연결)
//접속에 문제가 없으면 Connection객체리턴
//접속정보에 문제가 있으면 null 리턴
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe","jdbc","1234");
//127.0.0.1 내컴퓨터ip를 조회해줌
//3. 쿼리문을 실행하고, 결과를 가져올 객체 생성(Statement)
//2번에서 만들어진 conn을 이용해서 생성
stmt = conn.createStatement();
//4.5.는 동시에 일어남
//4. 쿼리문 실행 : select문을 실행하는 메소드, 매개변수로 쿼리문 전달
// 결과로 select 수행결과인 ResultSet을 반환
//5. 쿼리문 실행 결과를 저장
rset = stmt.executeQuery(query);
//DB랑 통신을 통해 해야할 일은 여기서 종료
//5-1. 수행결과를 자바에서 사용하기위한 형태로 편집
//ResultSet에 있는 정보를 -> ArrayList<Member> 변환
//rset.next(); : 커서를 한줄 내리고 데이터가 있으면 true 없으면 false반환
while(rset.next()) {
String memberId = rset.getString("member_id");
String memberPw = rset.getString("member_pw");
String memberName = rset.getString("member_name");
String memberAddr = rset.getString("member_addr");
String memberPhone = rset.getString("member_phone");
int memberAge = rset.getInt("member_age");
char memberGender = rset.getString("member_gender").charAt(0);
Date enrollDate = rset.getDate("enroll_date");
Member m = new Member(memberId, memberPw, memberName, memberAddr, memberPhone, memberAge, memberGender, enrollDate);
list.add(m);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
rset.close();
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return list;
}
2. 아이디로 회원조회 : Id를 입력받아 해당 회원 정보 조회(1명)
memberController.java
public void selectMemberId() {
//1. DB작업이 필요한가? O 회원정보는 DB에있으므로 필요
//2. 작성해야할 쿼리문? SELECT * FROM MEMBER_TBL WHERE MEMBER_ID=입력값;
//3. 쿼리문 작성을 위해 입력받아야 할 값이 있나? O Id를 입력받아야한다.
System.out.println("\n ---------- id로 회원 조회 ----------\n");
System.out.print("조회할 아이디를 입력하세요 : ");
String memberId = sc.next();
//이번에는 한명(조회불가 시0명)의 정보를 조회해서 받기때문에 Member타입으로 받는다.
//query문에서 조건절이 primary key이기 때문에 조회결과는 무조건 회원 0 또는 1명
//primary key가 아니면 확신할수는 없다.(unique가 아닌 이상 중복인경우 1명이상이 나올 수 있음)
Member m = dao.selectMemberId(memberId);
if(m == null) {
System.out.println("회원정보를 찾을 수 없습니다.");
}else {
System.out.println("아이디 : "+m.getMemberId());
System.out.println("비밀번호 : "+m.getMemberPw());
System.out.println("이름 : "+m.getMemberName());
System.out.println("주소 : "+m.getMemberAddr());
System.out.println("전화번호 : "+m.getMemberPhone());
System.out.println("나이 : "+m.getMemberAge());
System.out.println("성별 : "+m.getMemberGender());
System.out.println("가입일 : "+m.getEnrollDate());
}
}
MemberDao.java
public Member selectMemberId(String memberId) {
//0.반환할 객체 선언
Connection conn = null; //무조건
Statement stmt = null; // 무조건
//ResultSet이 필요한지 아닌지 - 지금 사용할 query문이 SELECT이면 필요, 다른 DML일 경우 필요없음
ResultSet rset = null;
//결과처리할변수
Member m = null;
//select * from member_tbl where memberId = '아이디' 이므로 외따옴표까지 작성
String query = "select * from member_tbl where member_Id = '"+memberId+"'";
try {
//1.드라이버등록
Class.forName("oracle.jdbc.driver.OracleDriver");
//2.Connect 객체 생성(dbms와연결)
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe","jdbc","1234");
//3.Statement객체 생성
stmt = conn.createStatement();
//4. 쿼리문실행 5.결과를 ResultSet로 받기(저장)
rset = stmt.executeQuery(query);
//5-1 수행결과를 자바에서 사용하기위한 형태로 변환
if(rset.next()) {
m = new Member();
//지금 객체를 만드는 이유 m == null : 조회실패 / m == 객체주소 : 조회성공
String memberId2 = rset.getString("member_id");
m.setMemberId(memberId2);
String MemberPw = rset.getString("member_pw");
m.setMemberPw(MemberPw);
String memberName = rset.getString("member_name");
m.setMemberName(memberName);
m.setMemberAddr(rset.getString("member_Addr"));
m.setMemberPhone(rset.getString("member_phone"));
m.setMemberAge(rset.getInt("member_age"));
m.setMemberGender(rset.getString("member_gender").charAt(0));
m.setEnrollDate(rset.getDate("enroll_date"));
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
//6. 자원반환
conn.close();
stmt.close();
rset.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return m;
}
3. 이름으로 회원 조회 : 이름을 입력받아 입력값이 이름에 포함된 회원 모두 조회(부분검색가능, n명출력)
memberController.java
public void selectMemberId() {
//1. DB작업이 필요한가? O 회원정보는 DB에있으므로 필요
//2. 작성해야할 쿼리문? SELECT * FROM MEMBER_TBL WHERE MEMBER_ID=입력값;
//3. 쿼리문 작성을 위해 입력받아야 할 값이 있나? O Id를 입력받아야한다.
System.out.println("\n ---------- id로 회원 조회 ----------\n");
System.out.print("조회할 아이디를 입력하세요 : ");
String memberId = sc.next();
//이번에는 한명(조회불가 시0명)의 정보를 조회해서 받기때문에 Member타입으로 받는다.
//query문에서 조건절이 primary key이기 때문에 조회결과는 무조건 회원 0 또는 1명
//primary key가 아니면 확신할수는 없다.(unique가 아닌 이상 중복인경우 1명이상이 나올 수 있음)
Member m = dao.selectMemberId(memberId);
if(m == null) {
System.out.println("회원정보를 찾을 수 없습니다.");
}else {
System.out.println("아이디 : "+m.getMemberId());
System.out.println("비밀번호 : "+m.getMemberPw());
System.out.println("이름 : "+m.getMemberName());
System.out.println("주소 : "+m.getMemberAddr());
System.out.println("전화번호 : "+m.getMemberPhone());
System.out.println("나이 : "+m.getMemberAge());
System.out.println("성별 : "+m.getMemberGender());
System.out.println("가입일 : "+m.getEnrollDate());
}
}
MemberDao.java
public ArrayList<Member> selectMemberName(String searchName){
// 0. 반환할 객체 생성
Connection conn = null;
Statement stmt = null;
ResultSet rset = null; //select를 사용하기때문에 필요
//결과처리변수선언
ArrayList<Member> list = new ArrayList<Member>();
//쿼리문작성
String query = "select * from member_tbl where member_name like '%"+searchName+"%'";
try {
//1.driver등록
Class.forName("oracle.jdbc.driver.OracleDriver");
//2.connection객체생성(dbms연결)
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe","jdbc","1234");
//3. statement객체생성
stmt = conn.createStatement();
//4. 쿼리문실행 / 5. 결과값을 넣기
rset = stmt.executeQuery(query);
while(rset.next()) {
//getString(정수) - 의 경우 순서가 중요하다(컬럼의 순서로 가져옴)
String memberId = rset.getString(1);
String memberPw = rset.getString(2);
String memberName = rset.getString(3);
String memberAddr = rset.getString(4);
String memberPhone = rset.getString(5);
int memberAge = rset.getInt(6);
char memberGender = rset.getString(7).charAt(0);
Date enrollDate = rset.getDate(8);
Member m = new Member(memberId, memberPw, memberName, memberAddr, memberPhone, memberAge, memberGender, enrollDate);
list.add(m);
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
conn.close();
stmt.close();
rset.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return list;
}
4. 회원가입(중복아이디를 입력하지 않는다는 가정)
MemberConroller.java
public void insertMember() {
System.out.println("\n ---------- 회원 가입 ----------\n");
//1. DB작업이 필요한가? ㅇ INSERT
//2. 작성해야할 쿼리문은? INSERT INTO MEMBER_TBL VALUES('아이디','비밀번호',...,sysdate);
//3. 입력받아야할 값이 있나? ㅇ 가입일빼고 전부
System.out.print("아이디 입력 : ");
String memberId = sc.next();
System.out.print("비밀번호 입력 : ");
String memberPw = sc.next();
System.out.print("이름 입력 : ");
String memberName = sc.next();
System.out.print("주소 입력 : ");
sc.nextLine();
String memberAddr = sc.nextLine();
System.out.print("전화번호 입력 : ");
String memberPhone = sc.next();
System.out.print("나이 입력 : ");
int memberAge = sc.nextInt();
System.out.print("성별 입력[남/여] : ");
char memberGender = sc.next().charAt(0);
Member m = new Member(memberId, memberPw, memberName, memberAddr, memberPhone, memberAge, memberGender);
// Member로 묶는 방법 세가지
// 1. 모든 매개변수가 있는 생성자를 사용하고 enrolldate에 null을 대입하기
//Member m = new Member(memberId, memberPw, memberName, memberAddr, memberPhone, memberAge, memberGender, null);
// 2. 매개변수가 7개인 생성자를 또 생성해서 사용하기(생성자는 필요에 따라 더 만들어도 되므로)
//Member m = new Member(memberId, memberPw, memberName, memberAddr, memberPhone, memberAge, memberGender);
// 3. 기본생성자로 객체 생성 후 setter사용
int result = dao.insertMember(m);
//insert/update/delete는 수행결과를 정수(수행하여 반영된 행의 수)로 리턴
if(result > 0) {
System.out.println("회원가입 성공!");
}else {
System.out.println("회원가입 실패!");
}
}
MemberDao.java
public int insertMember(Member m) {
//0.반환할 객체 생성
Connection conn = null;
Statement stmt = null;
//ResultSet rset = null; - 수행할 쿼리가 SELECT가 아니므로 ResultSet은 없어도된다.
//결과처리할 변수
int result = 0;
//쿼리문작성
String query = "INSERT INTO MEMBER_TBL VALUES("
+"'"+m.getMemberId()+"',"
+"'"+m.getMemberPw()+"',"
+"'"+m.getMemberName()+"',"
+"'"+m.getMemberAddr()+"',"
+"'"+m.getMemberPhone()+"',"
+m.getMemberAge()+","
+"'"+m.getMemberGender()+"',"
+"sysdate)";
System.out.println(query);
try {
//1. 드라이버선언
Class.forName("oracle.jdbc.driver.OracleDriver");
//2. Connection생성
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe","jdbc","1234");
//3. Statement생성
stmt = conn.createStatement();
//4,5. 쿼리문 수행 후 결과저장(SELECT일때랑 다름)
//stmt.executeQuery(query) 사용불가 - 리턴타입이 result set
//insert/update/delete는 stmt.executUpdate()로 실행
//결과는 쿼리수행으로 변경된 테이블의 행의 갯수로 받는다(정수)
result = stmt.executeUpdate(query);
if(result > 0) {
//insert가 정상적으로 수행되면 commit
conn.commit();
}else {
//insert가 비정상이면(실패하면) rollback
conn.rollback();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
stmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return result;
}
5. 회원정보변경 : 비밀번호, 주소, 전화번호 변경
MemberConroller.java
public void updateMember() {
// UPDATE MEMBER_TBL SET MEMBER_PW = '수정값',MEMBER_ADDR = '수정값', MEMBER_PHONE = '수정값'
// WHERE MEMBER_ID = '아이디';
System.out.println("\n ---------- 회원 정보 수정 ----------\n");
System.out.print("정보를 수정 할 회원의 id를 입력하세요 : ");
String memberId = sc.next();
Member check = dao.selectMemberId(memberId);
if(check == null) {
System.out.println("일치하는 회원 정보가 없습니다.");
}else {
System.out.print("변경할 비밀번호 입력 : ");
String updatePw = sc.next();
System.out.print("변경할 주소 입력 : ");
sc.nextLine();
String updateAddr = sc.nextLine();
System.out.print("변경할 전화번호 입력 : ");
String updatePhone = sc.next();
Member m = new Member(memberId, updatePw, updateAddr, updatePhone);
int result = dao.updateMember(m);
if(result > 0) {
System.out.println("수정 성공!");
}else {
System.out.println("수정 실패!");
}
}
}
MemberDao.java
public int updateMember(Member m) {
// 0.객체생성
Connection conn = null;
Statement stmt = null;
//반환값변수
int result = 0;
//쿼리문
// UPDATE MEMBER_TBL SET MEMBER_PW = '수정값',MEMBER_ADDR = '수정값', MEMBER_PHONE = '수정값'
// WHERE MEMBER_ID = '아이디';
String query = "update member_tbl set member_pw = '"+m.getMemberPw()
+"',member_addr = '"+m.getMemberAddr()
+"',member_phone = '"+m.getMemberPhone()
+"' where member_id = '"+m.getMemberId()+"'";
//1.드라이버
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe","jdbc","1234");
stmt = conn.createStatement();
result = stmt.executeUpdate(query);
if(result > 0) {
conn.commit();
}else {
conn.rollback();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
conn.close();
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return result;
}
6.회원탈퇴 : 아이디를 입력받아 해당회원정보 삭제
MemberConroller.java
public void deleteMember() {
System.out.println("\n ---------- 회원 정보 삭제 ----------\n");
System.out.print("탈퇴할 회원의 id를 입력하세요 : ");
String memberId = sc.next();
Member check = dao.selectMemberId(memberId);
if(check == null) {
System.out.println("일치하는 회원 정보가 없습니다.");
}else {
int result = dao.deleteMember(memberId);
if(result > 0) {
System.out.println("삭제성공!");
}else {
System.out.println("삭제실패!");
}
}
}
MemberDao.java
public int deleteMember(String memberId) {
Connection conn = null;
Statement stmt = null;
int result = 0;
//쿼리문 : DELETE FROM MEMBER_TBL WHERE MEMBER_ID = '아이디'
String query = "delete from member_tbl where member_id = '"+memberId+"'";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe", "jdbc", "1234");
stmt = conn.createStatement();
result = stmt.executeUpdate(query);
if(result > 0) {
conn.commit();
}else {
conn.rollback();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
conn.close();
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return result;
}
[ 후기 ]
오늘 수업은 DB랑 연결이되니까 실행할때마다 입력하지않아도 되는 점이 너무너무 편했다.
코드 한두줄로 디비랑 연결되어 데이터 주고받는것도 너무신기하고 오늘수업은 너무너무 재미있었다.
재밌긴한데 쿼리문 작성이 힘들다...외따옴표 찾기가 쉽지않다 찾으면서 눈빠지는줄..!
오늘 실수한 점
1. 3번 : 이름을 입력받아 회원정보를 조회하는 메소드에서 일치하는 회원이 없을 경우 memberConroller에서 ArrayList의 size를 이용하여 if문을 짜줘야하는데 Dao에서 if를 걸어줌
잘못짠 부분
if(rset.next) { while(rset.next) }-- 다음행으로 가는 행동을 하는 rset.next()가 두개이기 때문에 때문에 행이 하나이거나 첫째 행은 출력이 안된다. 때문에, if(rset == null) 도 넣어보았는데 아애동작하지 않는 상황이발생. 메인에서 리스트의 사이즈를 재주거나 isEmply명령어를 이용했어야 했다.
2. 쿼리문 오타실수
'국비수업 > JDBC' 카테고리의 다른 글
29일차 : JDBC 실습1. LIBRARY(도서대여) 프로그램 (0) | 2023.01.06 |
---|---|
28일차 : JDBC 실습1 - 커뮤니티( 로그인 / 회원가입 / 게시판 ) (0) | 2023.01.05 |
27일차 : JDBC - Singleton (0) | 2023.01.03 |
26일차 : JDBC - PreparedStatement (0) | 2023.01.02 |