본문 바로가기
JAVA + DB

DB와 JAVA 연동 및 Query실행

by pms93 2022. 8. 4.
package jdbc_concept1;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

public class ConnectionTest {

	public static void main(String[] args) {
		
		// DB Connection
		
		// 1. Driver 실행
		try {
			// OracleDrive 대소문자 정확히 입력해야 한다.
			Class.forName("oracle.jdbc.OracleDriver");
		} catch (ClassNotFoundException e) {
			System.out.println("드라이버 클래스를 찾지 못함.");
			e.printStackTrace();
			// 오류 발생시 경우의 수
			// - jar file이 준비가 안되어있다.
			// - 경로 입력이 잘못 되어있다.
		}
		
		
		// 2. DB연결
		// .getConnection(DB 위치, user ID, user PW)
		String user = "oracle";
		String password = "oracle";
		// localhost : DB Server('오라클 프로그램이 설치된 컴퓨터')의 IP주소(컴퓨터 주소)
		//           : 127.0.0.1(this(내 컴퓨터)와 같은 의미(LoopBack))
		// 1521 : DB port number
		// DNS가 없으면 컴퓨터의 IPv4 주소를 localhost대신 명시해야 한다.
		// xe : DB의 버전에 따라 달라질 수 있다.
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		Connection con = null;
		// connection : DB와 Client를 이어주는 연결고리
		try {
			con = DriverManager.getConnection(url, user, password);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		// 3. DB로 Query 전달
		Scanner sc = new Scanner(System.in);
		System.out.print("아이디 : ");
		String id = sc.next();
		// String sql = "SELECT * FROM test WHERE id = '" + id + "'";
		// String sql = "SELECT * FROM test WHERE id = ? and pw = ? and name = ?";
		String sql = "SELECT * FROM test WHERE id = ?";
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			// .prepareStatement(Query)
			// - 쿼리문 내에 명시해야 할 데이터를 ?로 명시한 후 쿼리의 행동을 대신해주는 객체(PrepareStatement)로 넘긴다.
			ps = con.prepareStatement(sql);
			
			// .set자료형(number, 데이터)
			// - number번째에 있는 ?에 데이터를 넣어준다.
			// - 배열과 다르게 1번부터 시작한다.
			ps.setString(1, id);
//			ps.setString(2, password);
//			ps.setString(3, "관리자");
			
			// SELECT
			// .executeQuery
			// - 해당하는 레코드가 없을시 null을 반환한다. 
			// - DB가 반환해주는 데이터가 .executeQuery를 통해 ResultSet에 담긴다.
			rs = ps.executeQuery();
			if (rs.next()) { // rs.next() -> next 메서드를 통해 rs에 있는 데이터에 접근이 가능하다. true, false를 반환한다.
				System.out.println("번호 : " + rs.getInt("num"));
				System.out.println("아이디 : " + rs.getString("id"));
				System.out.println("비밀번호 : " + rs.getString("pw"));
				System.out.println("번호 : " + rs.getString("name"));
			} else {
				System.out.println("검색한 아이디로 정보를 확인할 수 없습니다.");
			}
			
			// INSERT, UPDATE, DELETE
			// .executeUpdate
			// - 반영된 레코드의 건수를 반환해준다
			// - 반환값을 통해 DB에 Query문이 정상 작동 했는지 알 수 있다.
			// - CREATE / DROP 관련 구문에서는 -1을 반환한다 
			int row = ps.executeUpdate();
			System.out.println("반영된 레코드 건수 : " + row);
		} catch (SQLException e) {
			e.printStackTrace();
		}

		
		
		
	}
}

'JAVA + DB' 카테고리의 다른 글

JAVA + DB 실습 (3)(Class.View)  (0) 2022.08.09
JAVA + DB 실습 (3)(Class.run)  (0) 2022.08.09
JAVA + DB 실습(2)  (0) 2022.08.08
JAVA + DB 실습(1-2)  (0) 2022.08.06
JAVA + DB 실습(1-1)  (0) 2022.08.06