✅ CRUD

C create : insert 사용자 입력을 저장할 수 있는가
R Retrieve : select 값을 꺼내는 것
U : update 값 수정
D : delete 값 삭제

👉 기본적인 질의문을 알았으니 데이터를 자바에서 받고 자바스크립트에서 이용하는 흐름을 알아보기

 

 

 

 


 

 

자바 JDBC API

#️⃣ JDBC 용도

  • 각 DBMS마다 불러오는 환경이 다른데 하나의 UI로 모아서 폼을 제공해줘야함.  (사용자는 SQL을 모르고 UI폼만 보고 작성)
  • 개발자는 사용자의 입력내용을 뽑아서 다시 SQL문을 만들어서 저장하도록 해야 함.

👉 쿼리를 자바코드로써 사용할 수 있도록 해야 함 ▶ 언어에서 이용할 수 있는 도구는 api밖에 없음 ▶ api를 누가 제공하느냐? ▶ 플랫폼을 이용할 수 있도록 각 DB업체에서 api를 제공했으나 서로 다른 DB API를 사용하는데 문제가 있음

 

👉 통합할 수 있는 API를 만들도록 함 == jDBC driver (api를 사용하는 부분을 단일화)

(* driver : 구동시켜주는 코드를 갖고있는 것. 즉 JDBC를 실행시켜주는 코드를 갖고 있는 드라이버를 이용)

 

 

1. 드라이버 로드하기 DriverManager

2. 연결 생성하기  Connection

3. 문장 실행하기 Statement

4. 결과 집합 사용하기 Resultset

 

👉 위 내용은 기본 api 원리

👉 나중에는 MyBatis같은 api 라이브러리를 이용하여 이 과정을 직접쓰지 않고 줄일 수 있음.

 


#️⃣ MyBatis
 란 객체지향 언어인 Java 와 SQL Based 인 관계형 데이터베이스(RDBMS) 사이의 데이터를 다루는 방식의 괴리를 해결하기 위해 만들어진 Persistence Framework 의 일종

 

 

#️⃣ JDBC 코드의 이해

BoF ~ EoF 까지 서버를 쭉 훑어내려간다

 

1. Class.forName

  • 드라이버가 메모리에 올라감
  • id, pw, 서버 정보넣음

2. Conneciton 

  • 인증해서 DBMS와 연결

3. Statement

  • 레코드 단위 생성

4. ResultSet

  • 문장실행
  • ResultSet은 받은 레코드를 저장할 수 있는 공간을 가지고 있음

5.rs.next();

  • 서버에서 레코드 한줄 가져오기. ResultSet통에 담기
  • EoF를 만나면 false반환

6. String title = rs.getString("title");

  • 컬럼명 "title"을 문자열로 넘겨서 String 타입 title변수에 담는다.

 

public static void main(String[] args) throws ClassNotFoundException, SQLException {
		String url = "jdbc:oracle:thin:@db.newlecture.com:1521/xepdb1"; //약속된 사용문장
//		String url = "jdbc:oracle:thin:@localhost:1521"; 내 컴퓨터에서 꺼내쓸때의 코드
		String sql = "SELECT * FROM MEMBER ORDER BY ID";
		
		Class.forName("oracle.jdbc.driver.OracleDriver");
		Connection con = DriverManager.getConnection(url,"ID","PW");
		Statement st = con.createStatement();
		ResultSet rs = st.executeQuery(sql);

// (자바 연습용)속성명을 다 받아서 SPLIT으로 나누고 대입해서 데이터 읽어보기...!
//		String tuples = "id,"+"name,"+"phone,"+"age,"+"address,"+"pwd";
//		String[] tuple = tuples.split(",");
//		
//		while(rs.next()) {
//			
//			for(int i=0;i<tuple.length; i++) {
//				String t = tuple[i];
//				String name = rs.getString(t);
//			System.out.printf("%s\t",name);
//				
//			if(i!=0 && i%5==0) //줄바꿈용 조건문
//				System.out.println();
//			}
//		}
		
		while (rs.next()) {
			String id = rs.getString("id");// 컬럼명은 소대문자를 구분하지 않는다. sql문이 전체조회여도 속성명이 name이면 name만 출력
			String name = rs.getString("name");
			String pwd = rs.getString("pwd");
			System.out.printf("%s\t",id);
			System.out.printf("%s\t",name);
			System.out.println(pwd);
		}

		rs.close();
		st.close();
		con.close();
	}

 

 

 

❎ DELETE 문에 SET을 쓸 수 있을까?

더보기

DELETE 문은 행을 삭제하는 데 사용되고, SET 문은 열의 값을 수정하는 데 사용. 두 문장은 서로 다른 용도를 가지며, 특정 상황에 맞게 사용 

 

DELETE 문: DELETE 문은 데이터베이스 테이블에서 특정 레코드(행)를 삭제하는 데 사용됩니다. 일반적으로 WHERE 절을 사용하여 어떤 레코드를 삭제할지 지정합니다. DELETE 문은 데이터베이스에서 실제로 행을 제거하는 작업입니다.

 

SET 문: SET 문은 주로 UPDATE 문에서 사용됩니다. UPDATE 문은 테이블 내의 기존 레코드를 수정하는 데 사용되며, SET 절은 어떤 열의 값을 변경할지 지정합니다. UPDATE 문은 데이터의 수정에 사용되지만, 테이블의 행을 삭제하지는 않습니다.

 

 

 

 

⏩ 조건문은 어디에 걸어야할까?

▶ 자바에서 데이터를 분류하는게 아닌, SQL에서 데이터를 셀렉하여 넘겨준다

 

Q. 200살 이하의 리스트만 뽑는다면?

public static void main(String[] args) throws ClassNotFoundException, SQLException {
		String url = "jdbc:oracle:thin:@db.newlecture.com:1521/xepdb1";
		String sql = "SELECT * FROM MEMBER WHERE AGE <200 ORDER BY ID"; //SQL에서 데이터 셀렉

// API문장 생략

		int count =0; //인원수 세는 용
		while (rs.next()) {
			String id = rs.getString("id");
			String name = rs.getString("name");
			int age = rs.getInt("age");
			String pwd = rs.getString("pwd");

			//null값을 0으로 받아오는것도 제외함
//			if (age < 200 && age!=0) { -- 자바에서 필터링하기보다 SQL문 (데이터관리)으로 필터링하여 출력한다
				System.out.printf("%s\t", id);
				System.out.printf("%s\t", age);
				System.out.printf("%s\t", name);
				System.out.println(pwd);
				count++;
//			}
		}
		System.out.println(count);

		rs.close();
		st.close();
		con.close();
	}

 

 

 

✅ 매핑하는 법

#️⃣ 연산자 - 문자열 더하기

: 덧셈은 무조건 숫자만 연산

: 따라서 SELECT AGE+'100' AGE FROM MEMBER; // 더할수있는 숫자로 전환해서 연산함

SELECT 'age is '|| AGE ADDED_AGE FROM MEMBER WHERE AGE IS NOT NULL;

SELECT NAME ||'('||ID||')' FROM MEMBER; -- 문자열 더하기 연산자
SELECT NAME ||'('||ID||')'||'_'|| AGE FROM MEMBER; -- AGE는 연산불가
SELECT AGE+1 ||'('||ID||')'||'_'||NAME FROM MEMBER; -- 연산자 앞에서 나와야 +1 가능

: ||연산자가 시작되는 순간부터 뒤는 문자열이 된다고 보면 된다.

: from member은 테이블이므로 그 앞까지만 쿼리문이라 생각하면 이해하기 쉬움. 문장 전체를 +로 잇는게 아니라 셀렉문 자체를 from table에서 뽑아오는 것이므로 || from table로 할 필요가 없다!

 

 

 

SELECT NAME,AGE FROM MEMBER WHERE AGE IS NULL;
SELECT NAME,AGE ||'THIS AGE IS NULL' FROM MEMBER WHERE AGE IS NULL;

 

null에 문자열을 더하게되면 null값은 사라지고 더해진 문자열만 출력됨

 

 

 

 

#️⃣ 연산자 - 비교연산자

 

 

*** null은 특수한 의미의 키워드이므로 IS NULL, IS NOT NULL로 비교해야 한다.

 

 

 

 

 

 

 

+ Recent posts