본문 바로가기
Back-End/Java

JDBC(2)

by newny 2023. 3. 28.
반응형

? (바인드 변수)

  • 쿼리의 value값 대신 바인드변수를 넣어 변수처리 할 수 있음
  • like에 바인드변수를 사용할 때는 작은따옴표를 떼고 사용해야함 (ex. ‘%나%’ → %나%)
  • 테이블명과 컬럼명은 bind 변수로 처리할 수 없음
import java.sql.*;
public class Test02_selectLike {
    public static void main(String[] args) {
        // like 연산자 연습
        // 이름에 '나' 문자가 있는 행을 조회하시오
        String col = "uname";
        String word = "나"; //ex) 검색어

        word = word.trim(); //공백 제거

        // 검색어 존재 유무 확인
        if (word.length() > 0) {
            //where uname like '%나%'
            word = "%" + word + "%";
        } else {
            System.out.println("검색어가 없습니다");
            return;
        }

        Connection conn = null;
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            conn = DriverManager.getConnection(
                    "jdbc:oracle:thin:@IP주소:포트번호/DB명",
                    "사용자",
                    "비밀번호"
            );
            System.out.println("오라클DB 서버 연결 성공");

            String sql = new StringBuilder()
                    .append("SELECT sno, uname, kor, eng, mat, tot, aver, addr, wdate ")
                    .append("FROM sungjuk ")
										//컬럼명은 바인드변수로 처리할 수 없어서 직접 변수처리 시킴
                    .append("WHERE " + col + " LIKE ? ")
                    .append(" ORDER BY sno DESC")
                    .toString();

            PreparedStatement pstmt = conn.prepareStatement(sql);
						pstmt.setString(1, word);

            ResultSet rs = pstmt.executeQuery();

                while (rs.next()) {
                    System.out.print(rs.getInt("sno") + " ");
                    System.out.print(rs.getString("uname") + " ");
                    System.out.print(rs.getInt("kor") + " ");
                    System.out.print(rs.getInt("eng") + " ");
                    System.out.print(rs.getInt("mat") + " ");
                    System.out.print(rs.getInt("tot") + " ");
                    System.out.print(rs.getInt("aver") + " ");
                    System.out.print(rs.getString("addr") + " ");
                    System.out.println(rs.getString("wdate"));
                }

            rs.close();
            pstmt.close();

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (conn != null) {
                try {
                    conn.close();
                    System.out.println("오라클DB 서버 연결 종료");
                } catch (SQLException e) {}
            }
        }
    }
}
반응형

'Back-End > Java' 카테고리의 다른 글

JDBC(1)  (0) 2023.03.27
Java 복습, 예습  (0) 2023.03.26
Java 과제 - 성적표 파일 입출력  (0) 2023.03.23

댓글