JAVA

JAVA 8주차

Zㅣ존수빈zz 2022. 12. 23. 17:30

# MySQL과 연결하여 DB 편집하고 출력하기

- MySQL 다운로드

- 프로젝트 우클릭 -> Properties -> Java Build Path -> Classpath -> Add External JARs...-> mysql-connector-j-8.0.xx.jar 선택

- 데이터 보존과 관리를 유용하게 하기 위해 DB사용

 

- DB라이브러리 접속 및 실행

class MyDB1 {
	private Connection conn;
	private static final String USERNAME = "root";
	private static final String PASSWORD = "root";
	private static final String URL = "jdbc:mysql://localhost:3306/company";	// 스키마명
	
	// DB라이브러리 실행
	public MyDB1() {
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	// DB 접속
	public void connect() {
		try {
			conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

 

- 간단한 쿼리문 작성

  • C(Create) -> insert (INSERT INTO 테이블명 (데이터명, 데이터명) VALUES (삽입할 데이터, 삽입할 데이터)
  • R(Read) -> select (SELECT * FROM 테이블명)
  • U(Update) -> update (UPDATE 테이블명 SET 데이터명 = '삽입할데이터' WHERE id='바꿀 아이디번호')
  • D(Delete) -> delete (DELETE FROM 테이블명 WHERE id='삭제할 아이디번호')

 

- Statement: Connection으로 연결한 객체에게 Query 작업을 실행하기 위한 객체.

- executeQuery(): sql에 저장한 문자열을 쿼리로 실행. 조회문(select, show 등)에 사용

- excuteUpdate(); 조회문을 제외한 creat, insert, update, delete 등을 처리할 때 사용

// select: 검색
public void select() {
    Statement stmt = null;
    ResultSet rs = null;

    try {
        stmt = conn.createStatement();
        String sql = "SELECT * FROM worker";		// select All
        rs = stmt.executeQuery(sql);	//sql에 저장한 문자열을 쿼리로 실행
        while(rs.next()) {		// 위에서부터 한 행씩 반복문
            int id = rs.getInt(1);		// 첫번째 열의 값을 가져오겠다.
            String name = rs.getString(2);	// 두번째 열의 값을 가져오겠다
            String gender = rs.getString(3);	// 세번째 열의 값을 가져오겠다

            System.out.println(id + " " + name + " " + gender);		// 한 행씩 실행할 때마다 출력
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            stmt.close();
            conn.close();
            rs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

// insert: 입력
public void insert() {
    Statement stmt = null;
    try {
        stmt = conn.createStatement();
        String sql = "INSERT INTO worker (name, gender) VALUES ('yellow', 'woman')";
        int result = stmt.executeUpdate(sql);
        if(result > 0) {
            System.out.println("입력 성공");
        } else {
            System.out.println("입력 실패");
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            stmt.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

// update: 수정
public void update() {
    Statement stmt = null;
    try {
        stmt = conn.createStatement();
        String sql = "UPDATE worker SET gender ='woman' WHERE id='3'";
        int result = stmt.executeUpdate(sql);
        if(result > 0) {
            System.out.println("수정 성공");
        } else {
            System.out.println("수정 실패");
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            stmt.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

// delete: 삭제
public void delete () {
    Statement stmt = null;
    try {
        stmt = conn.createStatement();
        String sql = "DELETE FROM worker WHERE id='4'";
        int result = stmt.executeUpdate(sql);
        if(result > 0) {
            System.out.println("삭제 성공");
        } else {
            System.out.println("삭제 실패");
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            stmt.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

 

- PreparedStatement를 이용한 쿼리문 실행

  sql문을 미리 선언해놓고 사용하며 createStatement가 아닌 prepareStatement를 사용한다

  sql의 ?에 해당하는 값은 setString(물음표 순서, 넣을 값)으로 값을 지정한다

// select: 전체보기
public void select() {
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    String sql = "SELECT * FROM worker";

    try {
        pstmt = conn.prepareStatement(sql);
        rs = pstmt.executeQuery(sql);	// sql에 저장한 문자열을 쿼리로 실행
        while(rs.next()) {
            int id = rs.getInt("id");
            String name = rs.getString(2);
            String gender = rs.getString("gender");

            System.out.println(id + " " + name + " " + gender);		// 한 행씩 실행할 때마다 출력
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            pstmt.close();
            rs.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

// insert: 삽입
public void insert() {
    PreparedStatement pstmt = null;
    String sql = "INSERT INTO worker (name, gender) VAlUES(?, ?)";

    try {
        pstmt = conn.prepareStatement(sql);		// ?에 해당하는 값을 채워줌(pstmt는 뒤늦게 ?를 채워줘도 된다)
        pstmt.setString(1, "pink");		// 첫번째 ?에 문자열 채워넣기
        pstmt.setString(2, "woman");	// 두번째 ?에 문자열 채워넣기

        int result = pstmt.executeUpdate();
        if(result > 0) {
            System.out.println("입력 성공");
        } else {
            System.out.println("입력 실패");
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            pstmt.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

// update: 수정
public void update() {
    PreparedStatement pstmt = null;
    String sql = "UPDATE worker SET gender=? WHERE id=?";

    try {
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, "man");
        pstmt.setInt(2, 8);

        int result = pstmt.executeUpdate();
        if(result > 0) {
            System.out.println("수정 성공");
        } else {
            System.out.println("수정 실패");
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            pstmt.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

// delete: 삭제
public void delete() {
    PreparedStatement pstmt = null;
    String sql = "DELETE FROM worker WHERE id=?";

    try {
        pstmt = conn.prepareStatement(sql);
        pstmt.setInt(1, 8);
        int result = pstmt.executeUpdate();
        if(result > 0) {
            System.out.println("삭제 성공");
        } else {
            System.out.println("삭제 실패");
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            pstmt.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }	
}