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 |