[executeUpdate vs executeQuery]
1. executeQuery
리턴값: ResultSet 객체(query문의 결과값을 그대로 가져온다)
사용처: 결과값을 출력할 필요가 있는 Select문에서 주로 사용된다.
2. executeupdate
리턴값: sql이 적용된 '갯수'인 int가 리턴된다.
사용처: 결과값을 출력할 필요가 없고, 쿼리문이 적용 되었는지 여부의 정보만 필요한 Create, Update, Delete문에서 주로사용된다
[예제]
- v와 컨트롤러를 분리하지 않고 모델만 분리한다.
- VO클래스를 만들어 DB값을 객체화시키는 작업을 한다.
- DAO클래스를 만들어 각각의 비지니스 메서드를 생성한다.
-> 각각의 비지니스 메서드를 만들때마다 DB에 연결하는 코드를 작성하면 유지보수성이 떨어지기 때문에
->JDBCUtil클래스를 생성하여 DB연결을 담당시킨다
- member 테이블을 생성해 db에 회원정보를 저장한다.
1. test.sql
create table member(
id int primary key,
name varchar(20) not null,
point int default 0
);
2. memberVO
-테이블형 데이터 --> 객체형 데이터(VO)
-컬럼들을 멤버변수로 가지고 있어야한다.
package model;
public class MemberVO {
private int id;
private String name;
private int point;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPoint() {
return point;
}
public void setPoint(int point) {
this.point = point;
}
@Override
public String toString() {
return "["+id+"] "+name+"님 "+point+"점";
}
}
3. JDBCUtil
-공통된 로직을 따로 관리하기 위해 생성한 Util클래스
-객체와 무관하게 사용할 예정이므로 모든 필드에 static을 붙인다.
package model;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCUtil {
static final String driverName="oracle.jdbc.driver.OracleDriver";
static final String url="jdbc:oracle:thin:@localhost:1521:xe";
static final String user="kim";
static final String passwd="1234";
public static Connection connect() { // DB에 연결을 한다. == Connection을 확보한다.
Connection conn=null;
try {
Class.forName(driverName);
conn=DriverManager.getConnection(url, user, passwd);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public static void disconnect(Statement stmt,Connection conn) {//stmt,conn객체를 받아와서 close()처리
try {
stmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
4. MemberDAO
-모든 비지니스 메서드는 메서드시그니처가 바뀌는 상황이 오는것을 방지해야하기 때문에 input값으로 MemberVO를 받는다.
package model;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
public class MemberDAO {
Connection conn;
Statement stmt;
final String insert="insert into member(id,name,point) values((select nvl(max(id),0)+1 from member), ";//pk처리
final String selectOne="select * from member where id=";
final String update="update member set point=point+";
final String delete="delete from member where id=";
final String selectAll="select * from member where name like '%";!
public boolean insert(MemberVO vo) {//멤버추가
conn=JDBCUtil.connect();
try {
stmt=conn.createStatement();
stmt.executeUpdate(insert+"'"+vo.getName()+"', "+vo.getPoint()+")");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
} finally {
JDBCUtil.disconnect(stmt, conn);
}
return true;
}
public boolean update(MemberVO vo) {//멤버 포인트 업데이트
conn=JDBCUtil.connect();
try {
stmt=conn.createStatement();
stmt.executeUpdate(update+vo.getPoint()+ "where id="+vo.getId());
} catch (SQLException e) {
// TODO Auto-generated catch block
return false;
}finally {
JDBCUtil.disconnect(stmt, conn);
}
return true;
}
public boolean delete(MemberVO vo) {//멤버삭제
conn=JDBCUtil.connect();
try {
stmt=conn.createStatement();
stmt.executeUpdate(delete+vo.getId());
} catch (SQLException e) {
// TODO Auto-generated catch block
return false;
}finally {
JDBCUtil.disconnect(stmt, conn);
}
return true;
}
public MemberVO selectOne(MemberVO vo) {//멤버한명 검색
conn=JDBCUtil.connect();
MemberVO data = null;
try {
stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(selectOne+vo.getId());
if(rs.next()) {
data = new MemberVO();
data.setName(rs.getString("name"));
data.setId(rs.getInt("id"));
data.setPoint(rs.getInt("point"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
}finally {
JDBCUtil.disconnect(stmt, conn);
}
return data;
}
public ArrayList<MemberVO> selectAll(MemberVO vo){//멤버 이름 검색
conn=JDBCUtil.connect();
ArrayList<MemberVO> datas = new ArrayList<MemberVO>();
try {
stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(selectAll+vo.getName()+"%'");
while(rs.next()) {
MemberVO data = new MemberVO();
data.setId(rs.getInt("id"));
data.setName(rs.getString("name"));
data.setPoint(rs.getInt("point"));
datas.add(data);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
JDBCUtil.disconnect(stmt, conn);
}
return datas;
}
}
5. Test01(view, controller)
package app;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
import model.MemberDAO;
import model.MemberVO;
public class Test01 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int act;
while(true) {
System.out.println("1. 가입");
System.out.println("2. 검색");
System.out.println("3. 회원1명출력");
System.out.println("4. 포인트추가");
System.out.println("5. 탈퇴");
System.out.println("6. 프로그램 종료");
System.out.print(">>> ");
act=sc.nextInt();
if(act==1) {//1. 가입
System.out.println("===1.학생추가===");
System.out.print("이름>>>");
String name = sc.next();
System.out.print("포인트 입력>>");
int point = sc.nextInt();
MemberVO vo = new MemberVO();
vo.setName(name);
vo.setPoint(point);
MemberDAO dao = new MemberDAO();
boolean res=dao.insert(vo);
if(res) {
System.out.println("로그: "+vo.getName()+"추가완료");
}
}
else if(act==2) {//2.검색
System.out.println("===2. 멤버검색===");
System.out.print("멤버이름 검색");
String name = sc.next();
MemberVO vo = new MemberVO();
vo.setName(name);
MemberDAO dao = new MemberDAO();
dao.selectAll(vo);
ArrayList<MemberVO> datas = dao.selectAll(vo);
if(datas.size()==0) {
System.out.println("로그: 해당데이터 없음!");
continue;
}
Iterator itr = datas.iterator();
while(itr.hasNext()) {
System.out.println(itr.next());
}
}
else if(act==3) {//3.회원1명출력
System.out.println("===3. 학생 1명 검색===");
System.out.print("멤버 아이디검색>> ");
int id = sc.nextInt();
MemberVO vo = new MemberVO();
vo.setId(id);
MemberDAO dao = new MemberDAO();
dao.selectOne(vo);
if(dao.selectOne(vo)==null) {
System.out.println("해당 멤버가 없습니다.");
continue;
}else {
System.out.println(dao.selectOne(vo));
}
}
else if(act==4) {//4. 포인트추가
System.out.println("===4. 포인트 추가===");
System.out.print("멤버 아이디 검색>>");
int id = sc.nextInt();
System.out.print("추가할 포인트 입력>>");
int point = sc.nextInt();
MemberVO vo = new MemberVO();
vo.setId(id);
vo.setPoint(point);
MemberDAO dao = new MemberDAO();
if(dao.update(vo)) {
System.out.println("로그: update완료");
}else {
System.out.println("로그: update실패");
}
}
else if(act==5) {//5. 탈퇴
System.out.println("===5. 탈퇴===");
System.out.print("멤버 아이디 검색>>");
int id = sc.nextInt();
MemberVO vo = new MemberVO();
vo.setId(id);
MemberDAO dao = new MemberDAO();
if(dao.delete(vo)) {
System.out.println("로그: delete 완료");
}
else {
System.out.println("로그: delete 대상없음!");
}
}
else if(act==6) {//6. 프로그램 종료
break;
}
}
}
}
'JAVA' 카테고리의 다른 글
day21) Java를 이용한 웹 크롤링1 - 기본 개념 (0) | 2022.01.25 |
---|---|
day20) 트랜잭션1 (0) | 2022.01.23 |
day18) JDBC를 이용한 DB, Eclipse 연동 (0) | 2022.01.20 |
day17) [용어 정리 ] 컴포넌트, DBMS, JDBC (0) | 2022.01.19 |
day15) MVC패턴 기본구조 (0) | 2022.01.14 |
댓글