본문 바로가기
코딩/JAVA

겨울방학 JAVA 3일차

by sonysame 2017. 12. 28.

jdbc 연결하기

package database;


import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;


public class BookSearch {


public static void main(String[] args) {

// TODO Auto-generated method stub

//데이터베이스 사용은 상당히 간단.(JDBC)

//-MYSQL JDBC Driver를 사용하기 위해서 Build Path에 등록

Connection con=null;

PreparedStatement pstmt=null;

ResultSet rs=null;

//1.드라이버 로딩

try{

//1. 드라이버 로딩

Class.forName("com.mysql.jdbc.Driver");

System.out.println("드라이버 로딩 성공");

//2. 데이터베이스에 접속

//접속하기 위해 3가지 정보가 필요하다

String jdbcUrl="jdbc:mysql://localhost:8888/library";

String id="java";

String pw="java";

con = DriverManager.getConnection(jdbcUrl, id, pw);

System.out.println("접속성공!!");

//3.SQL 문장을 만든다.

//Statement를 생성한다.

String msg="select btitle,bauthor from book where btitle like '%java%'";

pstmt=con.prepareStatement(msg);

//4. Statement 실행

// - 만약 SQL이 select 계열이면 사용하는 method=>executeQuery();

rs=pstmt.executeQuery();

//5. 결과처리

while(rs.next()) {

String title=rs.getString("btitle");

String author=rs.getString("bauthor");

System.out.println(title+" : "+author);

}


}catch(ClassNotFoundException e) {

System.out.println("뭔가 이상해요!!");

e.printStackTrace();

}

catch(SQLException e){

System.out.println("접속이 안되요!!");

}finally {

try {

//6.사용한 리소스를 해제

if(rs!=null)rs.close();

if(pstmt!=null)pstmt.close();

if(con!=null)con.close();

}catch (Exception e2) {

}

}

}


}




MVC pattern으로 도서검색 프로그램을 작성


=> Layered Model

-Presentation Layer

(클라이언트와 대면하는 계층)
(사용자가 입력과 출력을 처리하는 계층)

-Business Logic Layer

(로직 처리를 담당하는 계층)

-Persistence Layer

(데이터베이스 처리를 담당하는 계층)


=> 객체지향 설계의 원칙

Single Responsibility Principle(단일 책임의 원칙)


=>MVC pattern을 이용해서 코드를 작성해보자

M:Model

V:View

C:Controller



도서검색프로그램


bookSearch패키지

-dao 패키지->BookDAO.java

-dto 패키지->BookDTO.java

-service 패키지->BookService.java

Main.java





<BookDAO>

package bookSearch.dao;


import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.ArrayList;

import java.util.List;


import bookSearch.dto.BookDTO;


public class BookDAO {


public List<BookDTO> select(String keyword) {

Connection con=null;

PreparedStatement pstmt=null;

ResultSet rs=null;

List<BookDTO> list= new ArrayList<BookDTO>();

try {

//1. Driver Loading

Class.forName("com.mysql.jdbc.Driver");

//2. jdbcURL, ID, PW가지고 실제 연결

String jdbcUrl="jdbc:mysql://localhost:8888/library?useUnicode=true&characterEncoding=UTF-8";

String id="java";

String pw="java";

con=DriverManager.getConnection(jdbcUrl, id, pw);

//2-1. Transaction을 설정.

//con.setAutoCommit(false);

//3. SQL 작성 후 Statement 생성

String sql="select bisbn, btitle, bauthor from book where btitle like ?";

// ? => IN parameter

pstmt=con.prepareStatement(sql);

pstmt.setString(1,"%"+keyword+"%");

// 4. 실행

rs=pstmt.executeQuery();

// 5. 결과처리

// 처리된 결과를 결국 Main까지 보내야 한다. 데이터 전달 객체가 필요

// DTO(Data Transfer Object)

// VO(Value Object), DO(Domain Object), Entity

// DTO는 어떻게 만드나요? =>Database Table에 근거해서 작성.

while(rs.next()) {

BookDTO dto=new BookDTO();

dto.setBisbn(rs.getString("bisbn"));

dto.setBtitle(rs.getString("btitle"));

dto.setBauthor(rs.getString("bauthor"));

list.add(dto);

}

//sql="delete from book";

//pstmt=con.prepareStatement(sql);

//pstmt.executeUpdate();

//con.commit(); transaction 종료- 처리 결과를 진짜 진행.

}

catch(Exception e) {

System.out.println("뭔가 이상해요!!");

//con.rollback();

}

finally {

try {

// 6. 사용한 resource 해제 

if(rs!=null)rs.close();

if(pstmt!=null)pstmt.close();

if(con!=null)con.close();

}

catch(Exception e2) {

}

}

return list;

}


public int delete(String text) {

Connection con=null;

PreparedStatement pstmt=null;

int count=0;

try {

//1. Driver Loading

Class.forName("com.mysql.jdbc.Driver");

//2. jdbcURL, ID, PW가지고 실제 연결

String jdbcUrl="jdbc:mysql://localhost:8888/library?useUnicode=true&characterEncoding=UTF-8";

String id="java";

String pw="java";

con=DriverManager.getConnection(jdbcUrl, id, pw);

//2-1. Transaction을 설정.

//con.setAutoCommit(false);

//3. SQL 작성 후 Statement 생성

String sql="delete from book where bisbn = ?";

// ? => IN parameter

pstmt=con.prepareStatement(sql);

pstmt.setString(1,text);

// 4. 실행

count=pstmt.executeUpdate();

}

catch(Exception e) {

System.out.println("뭔가 이상해요!!");

//con.rollback();

}

finally {

try {

// 6. 사용한 resource 해제 

if(pstmt!=null)pstmt.close();

if(con!=null)con.close();

}

catch(Exception e2) {

}

}

return count;

}

}




<BookDTO>

package bookSearch.dto;


// 이 클래스로부터 객체가 만들어지면 책 1권에 대ㅎ한 데이터를 저장 할 수 있도록 작서

// =>Database Table과 밀접한 연관이 있다.


public class BookDTO {

private String bisbn;

private String btitle;

private String bauthor;

private int bprice;

public BookDTO() {

// TODO Auto-generated constructor stub

}


public String getBisbn() {

return bisbn;

}


public void setBisbn(String bisbn) {

this.bisbn = bisbn;

}


public String getBtitle() {

return btitle;

}


public void setBtitle(String btitle) {

this.btitle = btitle;

}


public String getBauthor() {

return bauthor;

}


public void setBauthor(String bauthor) {

this.bauthor = bauthor;

}


public int getBprice() {

return bprice;

}


public void setBprice(int bprice) {

this.bprice = bprice;

}

}



<BookService>

package bookSearch.service;


import java.util.List;


import bookSearch.dao.BookDAO;

import bookSearch.dto.BookDTO;


//로직처리하는 service 객체를 만들기 위한 class

public class BookService {

//키워드로 책을 검색해서 책의 목록을 알아오는 역할

public List<BookDTO> findByKeyword(String keyword) {

//로직처리를 진행

//일반 로직 처리를 한다. 더하고 빼고 곱하고, if, while, for

//데이터베이스 처리를 해야 한다.

//DAO (data access object)

BookDAO dao = new BookDAO();

return dao.select(keyword);

}


public boolean deleteByIsbn(String text) {

boolean result=false;

BookDAO dao=new BookDAO();

int count=dao.delete(text);

if(count==1)result=true;

return result;

}

}



<Main>

package bookSearch.dao;


import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.ArrayList;

import java.util.List;


import bookSearch.dto.BookDTO;


public class BookDAO {


public List<BookDTO> select(String keyword) {

Connection con=null;

PreparedStatement pstmt=null;

ResultSet rs=null;

List<BookDTO> list= new ArrayList<BookDTO>();

try {

//1. Driver Loading

Class.forName("com.mysql.jdbc.Driver");

//2. jdbcURL, ID, PW가지고 실제 연결

String jdbcUrl="jdbc:mysql://localhost:8888/library?useUnicode=true&characterEncoding=UTF-8";

String id="java";

String pw="java";

con=DriverManager.getConnection(jdbcUrl, id, pw);

//2-1. Transaction을 설정.

//con.setAutoCommit(false);

//3. SQL 작성 후 Statement 생성

String sql="select bisbn, btitle, bauthor from book where btitle like ?";

// ? => IN parameter

pstmt=con.prepareStatement(sql);

pstmt.setString(1,"%"+keyword+"%");

// 4. 실행

rs=pstmt.executeQuery();

// 5. 결과처리

// 처리된 결과를 결국 Main까지 보내야 한다. 데이터 전달 객체가 필요

// DTO(Data Transfer Object)

// VO(Value Object), DO(Domain Object), Entity

// DTO는 어떻게 만드나요? =>Database Table에 근거해서 작성.

while(rs.next()) {

BookDTO dto=new BookDTO();

dto.setBisbn(rs.getString("bisbn"));

dto.setBtitle(rs.getString("btitle"));

dto.setBauthor(rs.getString("bauthor"));

list.add(dto);

}

//sql="delete from book";

//pstmt=con.prepareStatement(sql);

//pstmt.executeUpdate();

//con.commit(); transaction 종료- 처리 결과를 진짜 진행.

}

catch(Exception e) {

System.out.println("뭔가 이상해요!!");

//con.rollback();

}

finally {

try {

// 6. 사용한 resource 해제 

if(rs!=null)rs.close();

if(pstmt!=null)pstmt.close();

if(con!=null)con.close();

}

catch(Exception e2) {

}

}

return list;

}


public int delete(String text) {

Connection con=null;

PreparedStatement pstmt=null;

int count=0;

try {

//1. Driver Loading

Class.forName("com.mysql.jdbc.Driver");

//2. jdbcURL, ID, PW가지고 실제 연결

String jdbcUrl="jdbc:mysql://localhost:8888/library?useUnicode=true&characterEncoding=UTF-8";

String id="java";

String pw="java";

con=DriverManager.getConnection(jdbcUrl, id, pw);

//2-1. Transaction을 설정.

//con.setAutoCommit(false);

//3. SQL 작성 후 Statement 생성

String sql="delete from book where bisbn = ?";

// ? => IN parameter

pstmt=con.prepareStatement(sql);

pstmt.setString(1,text);

// 4. 실행

count=pstmt.executeUpdate();

}

catch(Exception e) {

System.out.println("뭔가 이상해요!!");

//con.rollback();

}

finally {

try {

// 6. 사용한 resource 해제 

if(pstmt!=null)pstmt.close();

if(con!=null)con.close();

}

catch(Exception e2) {

}

}

return count;

}

}




결과



관계형 데이터베이스를 이용하면 ACID라는 특성을 부여받을 수 있어요

Atomicity-all or nothing

Consistency-데이터의 일치성, 일관성

Isolation-방해받지 않움

Durability-최종결과가 저장됨을 보장


Transaction

정의: 작업의 최소단위

쉽게 예를 들자면 이체라는 작업은 Transaction


JDBC에서 Transaction은 내가 임의로 설정

지금까지는 단일 Transaction을 이용


Transaction을 코드상으로 설정

=> JDBC에서는 transaction을 connection에 설정




'코딩 > JAVA' 카테고리의 다른 글

JAVA 겨울방학 6일차  (0) 2018.01.03
겨울방학 JAVA 4일차  (0) 2017.12.29
겨울방학 JAVA 1일차  (0) 2017.12.27
겨울방학 JAVA 2일차  (0) 2017.12.27
점프투자바를 참고했음을 알립니다!  (0) 2017.05.09