본문 바로가기
Java

[JDBC] 자바에서 sql 문 처리하기

by 오늘도 깨달았다 2021. 12. 22.
반응형

JDBC Connection 연결 먼저 진행해주세요 

 

잘 모르시면 해당 글 보면 정리되어있습니다.

http://realizetoday.tistory.com/1

 

[Java]JDBC로 Mysql 접속 - 에러해결

내가 겪은 문제 Communication Link Failure 라는 에러와 time_out이 발생하면서 JDBC 와 Mysql 연결이 안됐음 환경 DBMS : Mysql 8.0.27 Server : Ubuntu 20.04 Client : Windows 10 IDE : Intellij ( Java 17 ve..

realizetoday.tistory.com

 

1. Statement 객체를 먼저 생성해야합니다.

 

- Statment 객체란 ? 

실제 데이터베이스에 SQL 쿼리문을 보내기 위해 필요한 객체이다.

 

- Statment 객체에서 자주 사용되는 메소드

메소드 설명
executeQuery(String sql) SELECT문을 실행할 때 사용한다 (ResultSet 객체 반환)
executeUpdate(String sql) 삽입, 수정, 삭제와관련된 SQL문 실행에 사용한다.
close() Statement 객체를 반환할 때 사용한다 (연결종료)

 

- 객체생성 방법

JDBC 연결인 Connection 안의 메소드인 createStatement() 로 생성 가능

 

Statement stmt = conn.createStatement();

 

2. 필요한 쿼리문 작성 

주의 : Connection에서 접속한 DB에 있는 테이블에 관한 내용들에만 쿼리문을 작성할 것

 

stmt.executeQuery("SELECT * from user_tbl");

 

3. 쿼리문을 작성한 결과값을 ResultSet에 저장한다. 

ResultSet은 Statement를 통해 받아온 값을 저장 할 수 있다.

public class ConnectionTest {
	public static Statement stmt;

	public static void main(String[] args) {
 	       Connection conn = null;

 	       ResultSet resultSet = null;
        
  	       try {
        
        		//connection 생략
                 stmt = conn.createStatement();

                 resultSet = stmt.executeQuery("SELECT * from user_tbl");
                
                
                
           }catch (Exception e) {
            System.err.println("Cannot connect to database server");
            System.err.println(e.getMessage());
            e.printStackTrace();
     	   }
           
     }
           
}

 

4. 저장한 값을 출력 - resultset.getXXX() 메소드 사용

1) ResultSet은 행 단위로 데이터를 처리한다.

 

2) 한 행이 끝나고 다음 행으로 넘어가려면 next() 메소드를 사용해야한다. 

-> 다음 행이 있으면 true를 반환하고 없으면 false를 반환한다.

 

 

3) getXXX() 메소드 설명

-> getXXX에는 DB의 컬럼 타입(int String Date 등등)이 들어가게 된다.

-> () 안에는 인자값으로 컬럼의 위치나, 컬럼 이름을 넣으면 된다. 

 

 

전체 코드

import java.sql.*;

public class ConnectionTest {
    private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
    private static final String URL = "jdbc:mysql://내 서버 ip:포트번호/users";
    private static final String USER = "유저아이디";
    private static final String PW = "유저비번";

    public static Statement stmt;


    public static void main(String[] args) {
        Connection conn = null;

        ResultSet resultSet = null;

        try {
            //드라이버는 연결이 됐다. 17버전으로 했을 때
            Class.forName(DRIVER);

            conn = DriverManager.getConnection(URL, USER, PW);
            stmt = conn.createStatement();

            resultSet = stmt.executeQuery("SELECT * from user_tbl");

            //rs.next()를 통해 다음행을 내려갈 수 있으면 true를 반환하고, 커서를 한칸 내린다. 다음행이 없으면 false를 반환한다.
            while(resultSet.next()) {

                //getInt(1)은 컬럼의 1번째 값을 Int형으로 가져온다. / getString(2)는 컬럼의 2번째 값을 String형으로 가져온다.

                System.out.println(resultSet.getInt(1) + "\t" + resultSet.getString(2));
            }


            System.out.println("Database connection established");
        } catch (Exception e) {
            System.err.println("Cannot connect to database server");
            System.err.println(e.getMessage());
            e.printStackTrace();
        }
        finally {
            if (conn != null) {
                try {
                    conn.close();
                    resultSet.close();
                    stmt.close();

                    System.out.println("Database Connection Terminated");
                } catch (Exception e) {}
            }
        }
    }
}

 

 

결과값 

반응형

댓글