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;
}
}