메모장

JDBC 본문

DB/개념정리

JDBC

Itchild 2024. 4. 10. 22:16
728x90
반응형

 

JAVA와 DATABASE 를 Connection 한다 ~! ----> JDBC 라고 부른다.

 

JDBC의 4가지 순서에 대해 알아보자

 

1. JAVA와 DB를 연결해줄 자원(resouce)을 가진 클래스

// (== 드라이버 : 서로 다른 시스템, 이종기기 간의 연결을 위해 필요한 객체 ) 를

메모리로 불러와야한다 == 이것을 load(적재)한다고 한다. ex)로딩중 할때 그 로딩 !

package class01;

import java.sql.Connection; // 자바에서 기본제공은 되어있으나 
							// 어떤 패키지 안에 저장이 되서 실행되고 있는데 그 패키지가 sql 
import java.sql.DriverManager; // 처음시작이 java. 가 아니면 외부에서 가져온것 이다. 
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

import class04.StudentVO;

public class Test01 {

	public static void main(String[] args) {
		
		final String driverName_MySQL = "com.mysql.cj.jdbc.Driver";
		// final String driverName_Oracle = "oracle.jdbc.driver.OracleDriver";
		
		try { 
			Class.forName(driverName_MySQL); 
			
		} catch (ClassNotFoundException e) { 
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
 
1. JAVA와 DB를 연결해줄 자원(resouce)을 가진 클래스를 메모리로 불러오기. // (== 드라이버 : 서로 다른 시스템, 이종기기 간의 연결을 위해 필요한 객체 )

2. DB와 연결 ------> Connection 객체가 필요하다 !

        // 2. DB와 연결 
		
		final String url_MySQL="jdbc:mysql://localhost/hong"; 
		//final String url_Oracle="jdbc:oracle:thin:@localhost:1521:xe";
		final String userName="root";
		final String passwd="1234";
		Connection conn=null;

		try {
			  // DriverManager.getConnection(url, userName, passWord);
			conn=DriverManager.getConnection(url_MySQL, userName, passwd);
		
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
 

- conn 객체는 DB와의 연결통로 역할 ! // getConnection의 인자 3가지

1. url(데이터베이스에 직접적으로 연결할 수 있는 역할을 한다.) ---> "jdbc:mysql://localhost/DB명"

// "jdbc:oracle:thin:@localhost:1521:xe" -> 이건 오라클 url

2. userName ---> "root"

3. passWord ---> 1234

DB와의 연결 ---> Connection 객체가 필요하다.

3. DB에 데이터를 작성하거나(write), DB의 데이터를 받아오거나(read) 할수 있음

----> Statement 객체를 생성하고, 사용하는것이 목표 ! 3번이 중요

이부분에서 INSERT,SELECTALL,SELECTONE, UPDATE, DELETE 다 해볼 수 있다.

        // 작성
		Statement stmt=null;
		
		/// ---------- VIEW 시작
		Scanner sc=new Scanner(System.in);
		System.out.println("학생의 이름을 입력하세요.");
		String studentName=sc.next();
		System.out.println("학생의 점수를 입력하세요.");
		int studentScore=sc.nextInt();
		/// ---------- VIEW 끝
		
		
		/// ---------- CONTROLLER 시작
		// CTRL 입장 : "M의 DAO의 CRUD 메서드의 인자는 VO인데 ,,, 나도 VO로 주면 좋을거 같다 ..."
		StudentVO sVO = new StudentVO(0,studentName,studentScore);
		/// ---------- CONTROLLER 끝
		
		
		/// ---------- MODEL 시작
//		final String sql_INSERT="INSERT INTO STUDENT (NAME,SCORE) VALUES('"+studentName+"',"+studentScore+");";
		final String sql_INSERT="INSERT INTO STUDENT (NAME,SCORE) VALUES('"+sVO.getName()+"',"+sVO.getScore()+");";
		
		// 보통 WHERE 절 뒤에는 PK를 많이 쓴다 조건으로 
		
		
		try {
			stmt=conn.createStatement(); // 만들고 // statement 가 read,write를 제공해주는 것 
			stmt.executeUpdate(sql_INSERT); // 사용
			// Query -> SELECT // 테이블에 영향을 주는 쿼리문 
			// Update -> INSERT,UPDATE,DELETE // 테이블에 영향을 주지 않는 쿼리문
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
Statement 객체를 이용해 read, write가 가능한데 insert 문법을 사용해 보았다.

3. 이번엔 SELECT 를 사용 해보자 . READ 읽어오기

     	// 읽어오자

		Statement stmt=null;
		// VIEW랑 CTRL는 insert를 위해 있었던 친구라 없어도 된다. 
         
         ResultSet rs=null;
	     final String sql_SELECTALL="SELECT NUM,NAME,SCORE FROM STUDENT;";
        // 보통 WHERE 절 뒤에는 PK를 많이 쓴다 조건으로 

       try {
			stmt=conn.createStatement();  
			rs=stmt.executeQuery(sql_SELECTALL); 
			
			while(rs.next()) {
				
				// ---- ctrl 시작
		StudentVO sVO=new StudentVO(rs.getInt("NUM"),rs.getString("NAME"),rs.getInt("SCORE"));
				 // 학생정보줘 
				// ---- ctrl 끝

				// ---- VIEW 시작
				//RS는 M꺼라 V가 가지고 있으면 안된다 그것을 C가 해야된다 . 
//				System.out.println(rs.getInt("NUM"));
//				System.out.println(rs.getString("NAME"));
//				System.out.println(rs.getInt("SCORE"));
				System.out.println(sVO);
				System.out.println();
			}

		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
3. SELECT 문법을 사용하여 목록 읽어오기

4. DB와 연결해제 ★ (컴퓨터가 메모리를 계속 계속 잡아먹어서 갑자기 꺼진다. 반드시 연결해제를 해준다. )

   try {
			stmt.close(); // 만든거 역순으로  
			conn.close(); // 닫고 다시 닫고 나와야 함 
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		System.out.println(" 로그: 프로그램 종료");
 

주의 ! close 를 깜빡하지 말고 해줘야 하는데 close하는 순서는 방문을 여는 순서라고 생각하면 된다 .

방문 1 을 열고 -> 방문 2를 열었을때 !! 닫을 때는 역순으로 방문2를 닫고 나오고 그다음 방문1을 닫는다.

 
 
4. DB와의 연결해제 꼭 해주기 !
 

JDBC 순서 4가지에 대해 배워보았다

 

 

 

728x90
반응형

'DB > 개념정리' 카테고리의 다른 글

JDBC - 임시 멤버 변수 구현  (0) 2024.04.10
JDBC PrepareStatement  (0) 2024.04.10
MySQL 날짜 , 날짜함수  (0) 2024.04.10
JDBC - MVC패턴으로 만들기(웹크롤링)  (0) 2024.04.10
DB ,DBMS  (0) 2024.04.10