블로그

JDBC 본문

개발자 준비과정/Spring, SpringBoot, JSP

JDBC

하늘바람a 2024. 4. 16. 17:56

JDBC

  • 자바에서 데이터베이스와 관련된 작업을 처리할 때 사용하는 API
  • 한번 익혀두면 모든 DBMS에 대해서 동일한 방식으로 데이터베이스 작업을 처리할 수 있다.

 

@Controller
@RequestMapping("/main23/sub2")
public class Controller23{
    public void method2(Model model) throws Exception {
        var list = new ArrayList<String>();
        String sql="SELECT CustomerName FROM Customers";

        // 1. db 연결
        String url = "jdbc:mariadb://localhost:3306/w3schools";
        String user = "root";
        String password = "1234";
        Connection con = DriverManager.getConnection(url, user, password);
        // 2. 실행 준비
        Statement statement = con.createStatement();
        // 3. 쿼리 실행
        ResultSet resultSet = statement.executeQuery(sql);
        // 4. 결과 가공
        try(resultSet; statement; con) {
            while (resultSet.next()) {
                String name = resultSet.getString(1);
                list.add(name);
            }
        }
        model.addAttribute("nameList",list);
        // (5. 자원 닫기 - try-with-resources)
        // 6. 모델에 attribute로 결과 넣기
        // 7. view로 forward
    }
}

 

데이터를 가져오는 SELECT 문일 경우에는 executeQuery() 메소드를 호출해야 한다. 

executeQuery() 메소드는 가져온 데이터를 ResultSet에 저장하고 리턴한다.

ResultSet rs = pstmt.executeQuery();

 

executeQuery() 메소드로 SELECT 문을 실행해서 ResultSet을 얻는다.

 

 

✅ResultSet

ResultSet의 내부 구조

 

 

ResultSet의 특징은 커서가 있는 행의 데이터만 읽을 수 있다는 것이다. 여기서 커서는 행을 가리키는 포인터를 말한다.

 

조건에 맞는 행은 n개이므로 while문을 이용해서 next()메소드가 false를 리턴할 때까지 반복해서 데이터 행을 읽는다.

 

ResultSet을 getString() 메소드를 사용하였다.

 

 

ResultSet의 getString 메소드

getString()

 

 

이 메소드는 ResultSet 객체의 현재 행에서 지정된 열의 값을 문자열 형태로 가져옵니다.

  • columnIndex: 열의 인덱스를 나타냅니다. 첫 번째 열은 1로 시작합니다.
  • 반환 값: 지정된 열의 값이 문자열로 반환됩니다. 값이 SQL NULL인 경우 null이 반환됩니다.
  • 예외: columnIndex가 유효하지 않은 경우 또는 데이터베이스 액세스 오류가 발생한 경우 SQLException이 발생합니다. 또한 이 메소드가 닫힌 결과 집합에 대해 호출된 경우에도 SQLException이 발생합니다.

즉, 이 메소드는 ResultSet 객체에서 지정된 열의 값을 문자열로 가져옵니다. 그러나 유효하지 않은 columnIndex를 제공하거나 결과 집합이 이미 닫혔을 경우에는 SQLException이 발생합니다.

 

 

※ column의 값이 숫자일 경우, getInt() 혹은 getDouble()을 사용해도 된다.

    getString()이 엄격하지 않아서, 숫자도 getString()으로 모두 사용할 수 있다.