JDBC 기초 PreparedStatement

유광진·2023년 8월 1일
3

1. PreparedStatement란

선처리 방식으로 미리 컴파일된 SQL문을 가지고 있다가 동적으로 칼럼값을 채워 질의문을 수행할 수 있어 효율적인 SQL문을 구사할 수 있다.

웹 개발에서는 보안문제(SQL injection) 때문에 PreparedStatement를 사용한다.

PreparedStatement 이용해서 DB데이터 수정 해보자

2. DB데이터 수정하기

먼저 MariaDB CMD창을 열어 테이블을 조회하자.

자바로 돌아와서 데이터베이스와의 연결 및 데이터 처리를 위해 사용되는 변수들을 선언해주자.

	private Connection conn;
	private PreparedStatement pstmt;
	private ResultSet rs;

메인 메서드에 생성자명과 동일하게 객체를 생성하고 class에 생성자를 호출하자.

	public 생성자명() {
		dbLoading();
		accessdb();
	}

생성자 안에 dbLoading(); accessdb(); 메서드를 호출하는 식으로 코드를 작성하였다.

먼저 dbLoading() 메서드를 호출하여 DB와 드라이버를 로드하는 코드를 작성하자.

	private void dbLoading() {
		try {
			Class.forName("org.mariadb.jdbc.Driver");
		} catch (Exception e) {
			System.out.println("로딩 실패: "  + e);
			System.exit(0);
		}	
	}

try ~ catch문을 사용하고 jdbc 드라이버를 통해 MariaDB와 로드하였고 예외상황의 발생을 대비해서 catch구절에 메세지 출력하는것도 추가하였다.

	private void accessdb() {
		try {
			conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:포트번호/test", "root", "DB비밀번호");
			
			// 자료 수정
			String updatesql = "update sangdata set sang = ?, su = ?, dan = ? where code = ?";
			pstmt = conn.prepareStatement(updatesql);
	         pstmt.setString(1, "아디다스");
	         pstmt.setString(2, "5");
	         pstmt.setInt(3, 1100);
	         pstmt.setString(4, "4");
	         pstmt.executeUpdate()
             
		} catch (Exception e) {
			System.out.println("연결 실패 : " + e);
			System.exit(0);
		} finally {
			try {
				if(rs != null) rs.close();
				if(pstmt != null) pstmt.close();
				if(conn != null) conn.close();
			} catch (Exception e2) {
				
			}			
		}
	}

자료 수정을 위해 문자열의 updatesql 참조명을 주었고, update sangdata set sang = ?, su = ?, dan = ? where code = ? 이라는 조건을 부여하였다.

여기서 ?라는 매개변수를 사용한 이유는

SQL 쿼리 문자열 안에 파라미터를 직접 포함하지 않고, 대신 ?를 사용하여 파라미터를 나타낸다. 이로 인해 쿼리 문자열이 더 간결해지며, 쿼리를 이해하고 유지보수하기가 더 쉬워지기 때문이다.

pstmt.setString(1, "나이키");
pstmt.setString(2, "4");
pstmt.setInt(3, 1200);
pstmt.setString(4, "4");	  
pstmt.executeUpdate()

sangdata 테이블에 저장되어 있는 데이터 타입에 따라 알맞게 수정해주면 된다.

데이터값이 아디다스에서 나이키로 바뀐걸 확인할 수 있다.

profile
백엔드 개발자 유광진 입니다.

0개의 댓글