jdbc

서지우·2023년 7월 19일
0

JAVA

목록 보기
28/28

jdbc

- 자바 프로그램이 데이터베이스와 연결되어 데이터를 주고 받을 수 있게 해주는 프로그래밍 인터페이스입니다.

JDBC 표준 인터페이스는 다음 3가지 기능을 표준 인터페이스로 정의해서 제공한다.

java.sql.Connection : 연결
java.sql.Statement : SQL을 담은 내용
java.sql.ResultSet : SQL 요청 응답


MariaDB연결하기

구글창에 검색해서 maven 사이트에 들어가준다.

MariaDB를 검색해 jar을 다운로드 한다.

그 후 vscode에 들어가 lib폴더 안에 drag해서 넣어준다.

DBeaver를 실행해 localhost에서 우클릭해서 아래의 그림과 같이 들어간다.

들어간 후 url을 클릭해서 복붙한다.

DBConnection할 때 사용한다.


실습

실습 파일들로 보자!!

실습 - ch13 / Emp.java

데이터베이스의 employee테이블을 클래스로 만든다.
컬럼도 데이터 타입에 맞게 작성해준다.
(아래와 같이 하면 됨)

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 employeeId;
    private String firstName;
    private int salary;

}

실습 - ch13 / S01.java

아까 위에서 복붙한 url을 붙여주고 뒤에 /데이터베이스 이름을 적어준다.(여기선 /hr)

package ch13;

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

import java.sql.Connection;

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("디비 연결 중 오류가 발생했습니다.");
        }

        // 쿼리문 날리기
        String sql = "select first_name from employees where employee_id = ?";

        PreparedStatement prepareStatement = null;

        try {
            prepareStatement = connection.prepareStatement(sql);  
            prepareStatement.setInt(1, 100);  
        } catch (Exception e) {
            System.out.println("디비 사용중 오류가 발생했습니다.");
        }

        ResultSet resultSet = null;

        try {
            resultSet = prepareStatement.executeQuery();
        } catch (Exception 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 (prepareStatement != null) {
                prepareStatement.close();
            }
            if (resultSet != null) {
                resultSet.close();
            }
        } catch (Exception e) {
            System.out.println("연결 종료 중 오류가 발생했습니다.");
        }
    }
}

실행결과

System.out.println(resultSet.getString("first_name"));

위의 println이 나온 것!


실습 - ch13 / 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();
            }
        }

    }
}

실행결과


요약

교수님이 필살 요약을 알려주심..ㅋㅋ
코드만 올릴 예정

실습 - hellodb / App.java

main실행파일

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);
        System.out.print("ID입력: ");
        String id = sc.next();
        System.out.print("PW입력: ");
        String pw = sc.next();
        System.out.print("이름 입력: ");
        String name = sc.next();
        System.out.print("이메일 입력: ");
        String email = sc.next();
        NaverDTO dto = new NaverDTO();
        dto.setUserId(id);
        dto.setUserPw(pw);
        dto.setName(name);
        dto.setEmail(email);
        // 디비 연결
        DBClass.connectDB();
        // 데이터 저장
        // DBClass.save(dto);
        // 데이터 찾기
        NaverDTO naverDto = DBClass.select();
        System.out.println("아이디: " + naverDto.getUserId());
        // 데이터 수정
        // 데이터 삭제
    }
}

실습 - hellodb / DBClass.java

mgr같은 파일

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://localhost:3306/hello";
	private static final String DB_USERNAME = "hello";
	private static final String DB_PASSWORD = "hello1";
	private static Connection conn;
	PreparedStatement pstmt = null;
	
	// 디비 연결
	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) {
 			// TODO Auto-generated catch block
 			System.out.println("드라이브 로딩 실패");
            e.printStackTrace();
 		} catch (SQLException e) {
 			// TODO Auto-generated catch block
 			System.out.println("DB 연결 실패");
 		}
 
	}

	// 데이터 저장
	public static void save(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.getName());
			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 NaverDTO select() {
		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();

			// 결과값 출력
			// List<NaverDTO> list = new ArrayList<>();
			
			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.setName(name);
				dto.setEmail(email);

				// System.out.println("아이디 : " + userid);
				// System.out.println("패스워드 : " + userpw);
				// System.out.println("이름 : " + name);
				// System.out.println("이메일 : " + email);
			}
		} catch (SQLException e) {
			System.out.println("Database 연결중 에러가 발생 했습니다.");
			e.printStackTrace();
		} finally {
			try {
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return dto;
	}
}

실습 - hellodb / NaverDTO.java

DTO파일

public class NaverDTO {
    private String userId;
    private String userPw;
    private String name;
    private String email;
    
    // setter getter
    // 데이터값을 세팅
    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getUserId() {
        return userId;
    }

    public String getUserPw() {
        return userPw;
    }

    public void setUserPw(String userPw) {
        this.userPw = userPw;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }


    

}
profile
미래가 기대되는 풀스택개발자 공부 이야기~~

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

소중한 정보 감사드립니다!

답글 달기