package java18_0129;


import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;


public class SingerDao implements SingerDB {

// 생성자를 private으로 만듭니다.

private SingerDao() {

}


// 자신의 클래스 타입으로 된 static 변수를 생성

private static SingerDao dao;


// 앞에서 만든 static 변수가 null 일 때만 객체를 생성하고

// 리턴하는 static 메소드를 생성

public static SingerDao sharedInstance() {

if (dao == null) {

dao = new SingerDao();

}

return dao;

}


// 데이터베이스 사용에 필요한 변수를 선언

private Connection con;

private PreparedStatement pstm;

private ResultSet rs;


// 데이터 베이스 연결 메소드

private void connect() {

try {

con = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.200:1521:xe", "scott", "tiger");

System.out.println("<★Connect Complete★>");

} catch (Exception e) {

System.out.println("예외(커넥트문제)" + e.getMessage());

e.printStackTrace();

}

}


private void close() {

try {

if (rs != null)

rs.close();

if (pstm != null)

pstm.close();

if (con != null)

con.close();

} catch (Exception e) {

System.out.println("예외(Close문제)" + e.getMessage());

e.printStackTrace();

}


}


// 전체보기 : Singer 테이블의 데이터를 전부 가져와서 리턴해주는 메소드

// 테이블의 데이터를 가져올 때는 매개변수 자리에 데이터가 필요가 없다.

// 세로로 여러개가 나올거 같으면, List

public List<Singer> getSingerlist() {

// 여러 개의 데이터를 저장할 List를 생성

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

// Singer 테이블의 전체 데이터를 가져오는 SQL

String sql = "select userid, username, age, birthday from singer order by userid";

try {

// 데이터베이스 연결

connect();

// SQL 실행 객체 생성

pstm = con.prepareStatement(sql);

// select 구문 실행

rs = pstm.executeQuery();

// 데이터 읽기

while (rs.next()) {


Singer singer = new Singer();

singer.setUserid(rs.getString("userid"));

// 공백제거를 위한 trim

singer.setUsername(rs.getString("username").trim());

singer.setAge(rs.getInt("age"));

singer.setBirthday(rs.getDate("birthday"));


list.add(singer);


}

} catch (Exception e) {


System.out.println("예외" + e.getMessage());

e.printStackTrace();

} finally {

close();

}

return list;


}


// 상세보기 : Singer 테이블에서 userid를 가지고

// 데이터를 찾아오는 메소드

// id를 가지고 하나의 데이터를 가져오는 메소드 

public Singer lookUserid(String userid) {

// 데이터를 못찾으면 null을 리턴하고 데이터를 찾으면

// 그 데이터를 리턴

Singer singer = null;

String sql = "select * from singer where userid=?";

try {

// 데이터베이스 연결

connect();

// SQL 실행 객체 생성

pstm = con.prepareStatement(sql);

// pstm에 값을 바인딩

pstm.setString(1, userid);

// SQL 실행

rs = pstm.executeQuery();

// 읽어온 데이터가 있으면 singer에 대입

while (rs.next()) {

// while문 밖에다가 만들면, 없어도 만들어버리기 때문에 null이 나온다

singer = new Singer();

singer.setUserid(rs.getString("userid"));

singer.setUsername(rs.getString("username").trim());

singer.setAge(rs.getInt("age"));

singer.setBirthday(rs.getDate("birthday"));

}


} catch (SQLException e) {

System.out.println("예외" + e.getMessage());

e.printStackTrace();

} finally {

close();

}

System.out.println(singer);

return singer;

}


/****************** 데이터를 삽입하는 메소드 ********************/

public int insertSinger(Singer singer) {

int result = -1;

String sql = "insert into singer (userid, username, age, birthday) values(?,?,?,?)";


try {

// 데이터베이스 연결

connect();

// 데이터 바인딩 데이터에 값을 집어 넣기

pstm = con.prepareStatement(sql);

pstm.setString(1, singer.getUserid());

pstm.setString(2, singer.getUsername());

pstm.setInt(3, singer.getAge());

pstm.setDate(4, singer.getBirthday());


// sql실행

result = pstm.executeUpdate();


} catch (Exception e) {

System.out.println("예외(삽입메소드)" + e.getMessage());

} finally {

close();

}

return result;

}

/****************** 데이터를 삭제하는 메소드 ********************/

public int deleteSinger(String userid) {

int result = -1;

String sql = "delete singer where userid=? ";

try {

connect();

Singer singer= new Singer();

// 데이터 바인딩해서 넣기 

pstm =con.prepareStatement(sql);

pstm.setString(1, userid);

result = pstm.executeUpdate();

} catch (Exception e) {

System.out.println("예외(삭제메소드)" + e.getMessage());

}finally {

close();

}

return result ;

}

/****************** 데이터를 수정하는 메소드 ********************/

public int UpdateSinger(Singer singer ) {

int result= -1;

//userid 인 데이터를 찾아서 username을 수정

String sql = "update singer set username =? where userid=? ";

try {

connect();

pstm = con.prepareStatement(sql);

pstm.setString(1, singer.getUsername());

pstm.setString(2, singer.getUserid());

result = pstm.executeUpdate();

} catch (SQLException e) {

System.out.println("예외(삭제메소드)" + e.getMessage());

e.printStackTrace();

}finally {

close();

}

return result;

}

}


'Java > 자바 공부' 카테고리의 다른 글

테이블  (0) 2018.02.06
main  (0) 2018.01.29
view  (0) 2018.01.29
스트링을 숫자로 바꾸기  (0) 2018.01.21
꼭공부) 로또번호  (0) 2018.01.21

+ Recent posts