DB/JDBC

JDBC(JAVA DataBase Connectivity) JAVA Eclipse SQL

Ayel 2023. 4. 25. 09:19

 

 

JAVABean(자바빈)

 

: 데이터를 표현하는 목적으로 사용되는 자바 클래스

 

 

DB의 데이터 처리를 위해서 만들어지는 클래스

뷰페이지와 로직페이지를 서로 분리하기 위해 만들어지기 시작했다

하나의 테이블에서는 하나의 DTO(VO)와 DAO가 세트로 이루어진다

 

 

DTO(Data Transfer Object), VO(Value Object)

데이터를 DB로 보내거나 DB로부터 레코드를 가져올 때 하나의 덩어리 즉 객체로 만드는 클래스

 

DAO(Data Access Object)

객체화된 DTO를 가지고 DB에 접속 시 사용되는 메소드들을 정의한 클래스

 

 

규칙

클래스는 반드시 특정 패키지 소속이어야 한다

DTO의 멤버변수는 Property(프로퍼티)라고 부른다

Property명은 반드시 테이블의 컬럼명과 동일해야 한다

Property의 접근 지정자는 반드시 private이어야 한다

Property마다 getter와 setter는 존재하여야 한다

디폴트 생성자는 반드시 존재해야 한다 (디폴트 생성자만 있어야 한다? x / 최소한 디폴트 생성자 외 존재해야 한다)

 

* property == input 태그의 name == 컬럼명 ; 자동연결 설정을 위해 일치해주는 것이 좋다

** dbtest.dbtestdao.DBTestDAO : 이런 구조는 상급자 수준에서 짜는 거다

dao.DBTestDAO;




 

 

Exercise 1

 

DBMS를 생성해 입력/검색/수정/삭제 진행

 

// DTO Class

import java.sql.Date;

public class DBTestDTO {

 

// 이름, 나이, 키, 로그타임

private String name;

private int age;

private double height;

private Date logtime;

 

public DBTestDTO () {

}

 

public DBTestDTO (String name, int age, double height) {

this.name = name;

this.age = age;

this.height = height;

}

 

public DBTestDTO (String name, int age, double height, Date logtime) {

this.name = name;

this.age = age;

this.height = height;

this.logtime = logtime;

}

 

 

// setter

public void setName (String name) {

this.name = name;

}

 

public void setAge (int age) {

this.age = age;

}

 

public void setHeight (double height) {

this.height = height;

}

 

public void setLogtime (Date logtime) {

this.logtime = logtime;

}

 

 

// getter

public String getName () {

return name;

}

 

public int getAge () {

return age;

}

 

public double getHeight () {

return height;

}

 

public Date getLogtime () {

return logtime;

}

}

 

DTO를 생성해 DB로 데이터를 주고받는 객체 생성

 

 

// DAO Class

import java.sql.Connection;

import java.sql.Date;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

public class DBTestDAO {

 

// 드라이버로딩

// 클래스 안에서 객체 생성할 때 단 한 번만 사용하는 메소드 생성자

public DBTestDAO () {

try {

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

System.out.println("로딩 성공");

} catch (ClassNotFoundException e) {

System.out.println("로딩 실패");

e.printStackTrace();

}

}

 

private Connection getConnection () {

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

String user = "c##jsp01";

String password = "oracle";

 

Connection con = null;

 

try {

con = DriverManager.getConnection(url, user, password);

System.out.println("연결 성공");

} catch (SQLException e) {

System.err.println("연결 실패");

e.printStackTrace();

}

 

return con;

}

 

// insert

public int insert(DBTestDTO dto) {

 

int su=0;

 

Connection con = null;

PreparedStatement ps =null;

 

String sql = "insert into dbtest values(?, ?, ?, sysdate)";

 

try {

con = this.getConnection();

ps = con.prepareStatement(sql);

ps.setString(1, dto.getName());

ps.setInt(2, dto.getAge());

ps.setDouble(3, dto.getHeight());

su = ps.executeUpdate();

 

} catch (SQLException e) {

e.printStackTrace();

} finally {

 

try {

if (ps != null) {

ps.close();

}

if (con !=null) {

con.close();

}

} catch (SQLException e) {

e.printStackTrace();

}

}

return su;

}

 

// update

public boolean update (DBTestDTO dto) {

// boolean으로 받을 수 있다

 

boolean check = false;

 

Connection con = null;

PreparedStatement ps =null;

 

String sql = "update dbtest set age=?, height=? where name=?";

 

try {

con = this.getConnection();

ps = con.prepareStatement(sql);

ps.setString(3, dto.getName());

ps.setInt(1, dto.getAge());

ps.setDouble(2, dto.getHeight());

 

int su = ps.executeUpdate();

if (su != 0) {

check =true;

}

 

} catch (SQLException e) {

e.printStackTrace();

} finally {

 

try {

if (ps != null) {

ps.close();

}

if (con !=null) {

con.close();

}

} catch (SQLException e) {

e.printStackTrace();

}

}

return check;

}

 

 

// delete : 이름을 통해 레코드 삭제

public int delete (String name) {

 

int su=0;

 

Connection con = null;

PreparedStatement ps =null;

 

String sql = "delete dbtest where name=?";

 

try {

con = this.getConnection();

ps = con.prepareStatement(sql);

ps.setString(1, name);

su = ps.executeUpdate();

 

} catch (SQLException e) {

e.printStackTrace();

} finally {

 

try {

if (ps != null) {

ps.close();

}

if (con !=null) {

con.close();

}

} catch (SQLException e) {

e.printStackTrace();

}

}

return su;

}

 

public void select () {

 

Connection con = null;

PreparedStatement ps = null;

ResultSet rs = null;

 

String sql = "select * from dbtest";

 

try {

con = this.getConnection();

ps = con.prepareStatement(sql);

rs = ps.executeQuery();

 

while (rs.next()) {

String name = rs.getString(1);

int age = rs.getInt(2);

double height = rs.getDouble(3);

Date logtime = rs.getDate(4);

 

System.out.println(name + '\t' + age + '\t' + height + '\t' + logtime);

}

 

} catch (SQLException e) {

e.printStackTrace();

} finally {

 

try {

if (rs !=null) {

rs.close();

}

if (ps !=null) {

rs.close();

}

if (con !=null) {

con.close();

}

 

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

 

DAO를 생성해 객체화된 DTO를 가지고

DB 접속 시 사용되는 메소드 정의

 

 

// 입력 Class

 

import java.util.Scanner;

import dbtest.dbtestdto.DBTestDAO;

import dbtest.dbtestdto.DBTestDTO;

public class Insert {

 

public static void main(String[] args) {

 

Scanner sc = new Scanner(System.in);

 

System.out.print("이름 입력 : ");

String name = sc.next();

System.out.print("나이 입력 : ");

int age = sc.nextInt();

System.out.print("키 입력 : ");

double height = sc.nextDouble();

 

sc.close();

 

DBTestDTO dto = new DBTestDTO(name, age, height);

DBTestDAO dao = new DBTestDAO();

 

int su = dao.insert(dto);

 

if (su != 0) {

System.out.println("정보가 입력되었습니다.");

} else {

System.out.println("정보 입력에 실패했습니다");

}

 

 

}

}

 

// 출력(조회) Class

import dbtest.dbtestdto.DBTestDAO;

public class Select {

public static void main(String[] args) {

 

DBTestDAO dao = new DBTestDAO();

 

dao.select();

 

}

}

 

// 수정 Class

import java.util.Scanner;

import dbtest.dbtestdto.DBTestDTO;

import dbtest.dbtestdto.DBTestDAO;

public class Update {

 

public static void main(String[] args) {

 

Scanner sc = new Scanner(System.in);

 

System.out.print("수정할 이름 입력 : ");

String name = sc.next();

System.out.print("나이 입력 : ");

int age = sc.nextInt();

System.out.print("키 입력 : ");

double height = sc.nextDouble();

 

sc.close();

 

DBTestDTO dto = new DBTestDTO(name, age, height);

DBTestDAO dao = new DBTestDAO();

 

boolean check = dao.update(dto);

 

if (check) {

System.out.println("정보가 수정었습니다.");

} else {

System.out.println("정보 수정에 실패했습니다");

}

}

}

 

// 삭제 class

import java.util.Scanner;

import dbtest.dbtestdto.DBTestDAO;

import dbtest.dbtestdto.DBTestDTO;

public class Delete {

 

public static void main(String[] args) {

 

Scanner sc = new Scanner(System.in);

 

System.out.print("삭제할 이름 입력 : ");

String name = sc.next();

 

sc.close();

 

 

DBTestDAO dao = new DBTestDAO();

 

int su = dao.delete(name);

 

if (su != 0) {

System.out.println(name + "님의 정보가 삭제되었습니다.");

} else {

System.out.println("정보 삭제에 실패했습니다");

}

 

 

}

}

 

 

'DB > JDBC' 카테고리의 다른 글

JDBC(JAVA DataBase Connectivity) JAVA Eclipse SQL 연동  (0) 2023.03.16