java (9) jdbc

ysh·2023년 7월 13일
0

Spring Boot

목록 보기
24/53

연동법

jdbc

자바와 데이터베이스를 연결시켜주는 라이브러리

정석

package ch13;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class S01 {
    public static void main(String[] args) {
        // 자바와 DB를 연결하는 객체
        Connection connection = null;

        // 3306까지가 데이터베이스 시스템 / hr 위치가 데이터베이스
        String url = "jdbc:mariadb://localhost:3306/hr";

        // 데이터베이스 연결
        try {
            connection = DriverManager.getConnection(
                url,
                "root",
                "1234"
            );
        } catch (SQLException e) {
            System.out.println("디비 연결 오류");
            return;
        }

        // 쿼리문 날리기
        String sql = "SELECT first_name FROM employees WHERE employee_id = ?";
        PreparedStatement preparedStatement = null;

        try {
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setInt(1, 100);
        } catch (SQLException e) {
            System.out.println("디비 사용 중 오류");
        }

        ResultSet resultSet = null;

        try {
            resultSet = preparedStatement.executeQuery();
        } catch (SQLException e) {
            System.out.println("쿼리 실행 중 오류 발생");
            System.out.println(e.getMessage());
            return;
        }

        // 데이터 자바로 변환
        try {
            if(resultSet.next()){
                System.out.println(resultSet.getString("first_name"));
            }
        } catch (Exception e) {
            System.out.println("데이터 변환 중 오류");
        };
       
        try {
            // connection은 무조건 닫아줘야 함
            // null 체크
            if(connection != null){
                connection.close();
            }
            if(preparedStatement != null){
                preparedStatement.close();
            }
            if(resultSet != null){
                resultSet.close();
            }
        } catch (Exception e) {
            System.out.println("연결 종류 중 오류가 발생");
        }
    }
}

실습

// Emp.java
package ch13;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

// employee 클래스
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Emp {
    private int employee_id;
    private String firstName;
    private int salary;
}


// S02.java
package ch13;

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 S02 {
    public static void main(String[] args) throws SQLException {
        // try 밖에서도 쓸 수 있게 선언만 
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        
        try {
            // db 연결 주소
            String url = "jdbc:mariadb://localhost:3306/hr";

            // db 연결
            connection = DriverManager.getConnection(url, "root", "1234");

            // 쿼리문 준비
            String sql = "SELECT * FROM employees WHERE salary > 10000";
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setInt(1, 100);

            // 쿼리문 실행
            resultSet = preparedStatement.executeQuery();
            // 결과값 확인
            List<Emp> list = new ArrayList<>();
            while(resultSet.next()){
                Emp emp = new Emp(
                    resultSet.getInt("employee_id"),
                    resultSet.getString("first_name"),
                    resultSet.getInt("salary")
                );
                list.add(emp);
            }
            System.out.println(list);
            // if(resultSet.next()){
            //     Emp emp = new Emp(
            //         resultSet.getInt("employee_id"),
            //         resultSet.getString("first_name"),
            //         resultSet.getInt("salary")
            //     );
            //     System.out.println(emp);
            // }

        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            // connection은 무조건 닫아줘야 함
            // null 체크
            if(connection != null){
                connection.close();
            }
            if(preparedStatement != null){
                preparedStatement.close();
            }
            if(resultSet != null){
                resultSet.close();
            }
        }
    }
}

추가 실습

public class NaverDTO {
    private String userId;
    private String userPw;
    private String userName;
    private String Email;

    public String getUserPw() {
        return userPw;
    }
    public void setUserPw(String userPw) {
        this.userPw = userPw;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getEmail() {
        return Email;
    }
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public void setEmail(String email) {
        Email = email;
    }
    // setter getter
    // 데이터값 세팅

}

DBClass

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 DBClass {
    private static final String DB_DRIVER_CLASS = "org.mariadb.jdbc.Driver";
    private static final String DB_URL = "jdbc:mariadb://127.0.0.1:3306/hello";
    private static final String DB_USERNAME = "hello";
    private static final String DB_PASSWORD = "hello1";
    private static Connection conn;

    PreparedStatement pstmt = null;
    // DB 연결
    public static void connectDB() {
        try {
            Class.forName(DB_DRIVER_CLASS);
            conn = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD);
            System.out.println("연결성공");
        } catch (ClassNotFoundException e) {
            System.out.println("실 패");
        } catch (SQLException e) {
            System.out.println("DB 연결 실패");
        }
    }

    public static void saveDB(NaverDTO dto) {
		PreparedStatement pstmt = null;

		try {
			// Insert문 ?부분은 아래의 입력값이 자동으로 변환이 됩니다.
			String sql = "INSERT INTO `naver` (`userid`, `userpw`, `name`, `email`) VALUES (?, ?, ?, ?); ";
			pstmt = conn.prepareStatement(sql);

			int index = 1;
			// Insert 데이터값
			pstmt.setString(index++, dto.getUserId());
			pstmt.setString(index++, dto.getUserPw());
			pstmt.setString(index++, dto.getUserName());
			pstmt.setString(index++, dto.getEmail());

			// SQL실행
			int count = pstmt.executeUpdate();

			if (count == 0) {
				System.out.println("데이터값에 이상이 있습니다.");
			} else {
				System.out.println("데이터 Insert 성공!");
			}
		} catch (SQLException e) {
			System.out.println("Database 연결중 에러가 발생 했습니다.");
		} finally {
			try {
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	public static List<NaverDTO> selectDB() {
		PreparedStatement pstmt = null;
    	ResultSet rs = null;
		List<NaverDTO> list = new ArrayList<>();
		try {
			// Select 쿼리문
			String sql = "SELECT * FROM naver";
			// 객체 생성
			pstmt = conn.prepareStatement(sql);
			// SQL실행
			rs = pstmt.executeQuery();

			// 결과값 출력
			while (rs.next()) {
				NaverDTO dto = new NaverDTO();
				String userid = rs.getString("userid");
				String userpw = rs.getString("userpw");
				String name = rs.getString("name");
				String email = rs.getString("email");

				dto.setUserId(userid);
				dto.setUserPw(userpw);
				dto.setUserName(name);
				dto.setEmail(email);
				list.add(dto);
			}
		} catch (SQLException e) {
			System.out.println("Database 연결중 에러가 발생 했습니다.");
			System.out.println(e.getMessage());
		} finally {
			try {
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return list;
	}
}

App(메인)

import java.util.List;
import java.util.Scanner;

public class App {

    public static void main(String[] args) throws Exception {
        System.out.println("Hello, World!");
        // 사용자에게 id, pw, 이름, 이메일
        Scanner sc = new Scanner(System.in);
        NaverDTO dto = new NaverDTO();
        System.out.println("ID");
        dto.setUserId(sc.nextLine());
        System.out.println("PW");
        dto.setUserPw(sc.nextLine());
        System.out.println("이름");
        dto.setUserName(sc.nextLine());
        System.out.println("이메일");
        dto.setEmail(sc.nextLine());
        
        // db 연결
        DBClass.connectDB();
        // 데이터 저장
        // DBClass.saveDB(dto);
        // 데이터 조회
        List<NaverDTO> resultDto = DBClass.selectDB();
        for(NaverDTO item : resultDto){
            System.out.println("아이디 : " + item.getUserId());
            System.out.println("비밀번호 : " + item.getUserPw());
            System.out.println("이름 : " + item.getUserName());
            System.out.println("이메일 : " + item.getEmail());
            System.out.println();
        }
        // 데이터 수정
        // 데이터 삭제
    }
}
profile
유승한

0개의 댓글