본문 바로가기
👨‍💻Computer Science/데이터베이스

[Database] 프로그램과 MYSQL 연동 시 필요한 SQL

by 코푸는 개발자 2022. 4. 6.
728x90

1. JDBC 드라이버 (Java DataBase Connectivity 드라이버)

  • 자바에서 데이터에비스를 사용할 때에는 JDBC API를 이용해서 프로그래밍 한다.
  • JDBC 드라이버는 DBMS와 통신을 담당하는 자바 클래스
  • 자바는 DBMS의 종류에 상관없이 하나의 JDBC API를 사용해서 데이터데이스 작업을 처리할 수 있기 때문에 익혀두면 모든 DBMS에서 이용이 가능하다.

 

JDBC의 구조

 

 

  • 위에 언급했듯 자바 기반 어플리케이션에서 데이터베이스를 사용할 때에는 데이터베이스 종류에 상관없이 JDBC API를 이용해서 데이터베이스에 접근하게 된다.
  • 각각의 DBMS는 자신에 알맞는 JDBC 드라이버를 제공하며, JDBC API는 JDBC 드라이버를 거쳐 데이터베이스와 통신한다.

 

ex. java 기반 어플리케이션 내용 - JDBC 드라이버 로딩 , 데이터베이스와 프로그래밍 연결

Class.forName("com.mysql.jdbc.Driver");
String jdbcDriver = "jdbc::mysql://localhost:3306/[사용할 데이터베이스]";
Connection conn = DriverManager.getConnection(jdbcDriver);

 

JDBC 프로그래밍의 코딩 스타일

1. JDBC 드라이버 로딩 - Class.forName("com.mysql.jdbc.Driver"); // MySQL은 com.mysql.jdbc.Driver 사용

2. 데이터 베이스 커넥션 구하기 - Connection conn = DriverManager.getConnection();

3. 퀴리 실행을 위한 Statement 객체 생성 - Statement stmt = conn.createStatement();

4. 퀴리 실행 - ResultSet rs = stmt.executeQuery("쿼리내용");

5. 퀴리 실행 결과 사용 - rs.next();

6. Statement 종료 - stmt.close();

7. 데이터베이스 커넥션 종료 - conn.close();

 

데이터베이스 커넥션

  • DB와 연결을 위해서 커넥션을 해야 하는데, java.sql.Connection 클래스가 데이터 커넥션을 나타내며, 커넥션은 java.sql.DriverManager클래스가 제공하는 getConnection()메소드를 사용해서 구할 수 있다.

 

생성

DriverManager.getConnection(String jdbcURL);
DriverManager.getConnection(String jdbcURL, String userID, String userPass);

 

  • jdbcURL : 자신의 PC의 MySQL 이용 시 jdbc:mysql://localhost:3306/[사용할 DB]
  • userID, userPass : DB관리자가 설정한 아이디와 비밀번호

 

Statement를 사용한 퀴리 실행

  • Connection 객체 생성 후 Connection의 createStatement()으로부터 Statement를 생성한 뒤에 퀴리를 실행 할 수 있다.

 

생성

Statement stmt = conn.createStatement();
  • Statement 클래스 생성 이후 사용 가능한 두 메소드가 있다.

 

ResultSet executeQuery(String query) : SELECT 퀴리를 실행

int executeUpdate(String query) : INSERT, UPDATE, DELETE 퀴리를 실행

 

  • executeQuery() 메소드는 SELECT퀴리의 결과값을 java.sql.ResultSet객체에 저장해서 리턴
  • executeUpdate() 메소드는 INSERT, UPDATE, DELETE 퀴리를 실행하고 그 결과로 변경된 레코드의 개수를 리턴

 

ResultSet에서 값 읽어오기

 

  • Statement의 executeQuery()메소드를 통해 가져온 실행 결과(레코드)를 ResultSet객체에 담아서 리턴한다.
    • ResultSet 클래스가 제공하는 메소드를 사용해서 결과값을 읽어올 수 있다.

 

ResultSet의 next() : SELECT 결과값(레코드)의 존재 여부를 확인할 수 있다.

  • 첫줄에 레코드가 있으면 true 리턴 없으면 false 리턴. 다음 next() 사용 시 그 다음 줄 레코드 있으면 true 리턴 없으면 false 리턴  
  • next()는 레코드의 커서를 넣는 것과 같은 역할은 한다. 처음 next() 통해서 첫줄 레코드에 커서를 두는 것이다.

 

ResultSet 클래스의 next()를 통한 위치에서 데이터 읽어 올 수 있는 메소드

 

 

※ getInt()가 가능하듯 Double, float, Long 위와 같은 형태 가능

 

  • next()를 통해 레코드 위치에 대한 커서를 이동해서 위와 같은 메소드를 통해서 값을 가져온다.

 

ex.

String jdbcDriver = "jdbc::mysql//localhost:3306/[사용할 DB]";
String dbUser = "root";
String dbPass = "1234";
String id = "[검색할 아이디]";
String query = "select * from MEMBER Where id = '"+id+"'";
Connection conn = (Connection) DriverManager.getConnection(jdbcDriver, dbUser, dbPass);
Statement stmt = conn.createStatement();

rs = stmt.executeQuery(query);
if(rs.next){
String pass = rs.getString("PASSWORD");
}

 

PreparedStatement를 사용한 퀴리 실행

  • java.sql.PreparedStatement는 java.sql.Statement와 동일한 기능을 제공한다.

※ 차이점 : PreparedStatement는 SQL 퀴리의 틀을 미리 생성해 놓고 값을 나중에 지정하는 것

 

PreparedStatement 사용 순서

1. Connection.prepareStatement()메소드를 사용하여 PreparedStatement 생성

2. PreparedStatement의 set메소드를 사용해서 필요한 값 지정

3. PreparedStatement의 executeQuery() 또는 executeUpdate() 메소드를 사용하여 쿼리를 실행

4. finally 블록에서 사용한 PreparedStatement 를 닫음 - close()메소드 실행

 

ex. 값을 채울 자리를 물음표(?)를 통해서 지정한다.

 

PreparedStatement pstmt = null;

pstmt = conn.prepareStatement("Insert into MEMBER (MEMBERID,NAME) values (?, ?)");

 

  • PreparedStatement가 제공하는 set 계열의 메소드를 사용하여 물음표를 대체할 값을 지정해 준다.

 

ex. set 계열 메소드로 값 지정해 주지

pstmt.setString(1, "gjworud"); // 첫 번째 물음표의 값 지정
pstmt.setString(2, "허재경"); // 두 번째 물음표의 값 지정
pstmt.executeQuery();

 

PreparedStatement 클래스가 제공하는 set계열 메소드

 

 

PreparedStatement 퀴리를 사용하는 이유

 

1. 반복해서 실행되는 동일 퀴리의 속도를 증가 시키기 위해

2. 값 변환을 자동으로 하기 위해

3. 간결한 코드를 위해 

728x90

댓글