⭐DML
데이터 조작 언어
Data Manupulation Language


데이터를 추가 조회 수정 삭제(CRUD)한다.

주요명령어
INSERT
SELECT
UPDATE
DELETE

-- DML에 대해 알아보자.
-- INSERT, SELECT, UPDATE, DELETE

-- drop database school;
-- 혹시 모를 사고예방을 위해 drop 같은 민감한 명령어는 주석처리

create database school;
use school;

create table student(
	id int primary key,
    name varchar(50),
    age int
);

-- DML의 사용
-- 데이터 추가
insert into student(id, name, age) values(1, '김철수', 20);
insert into student(id, name, age) values(2, '김영희', 22);

-- 데이터 조회
select id, name, age from student;
select * from student;
select name from student;

-- 데이터 수정
update student set age = 21;

-- 데이터 수정시에는 가능한 조건절을 명시해서 사용하자.
update student set age = 25 where id = 1;

-- 데이터 삭제
delete from student;

-- 데이터 삭제시에도 조건절 명시
delete from student where id = 2;
delete from student where name = '김영희'

student 테이블을 생성한 뒤 구조 확인
2건의 자료를 입력한 뒤 select 명령어를 통해 조회했다.

⭐SQL은 다양한 질의어(쿼리)로 구성돼있다.

 

이 질의어들은 크게 3갈래로 나눌 수 있다.

DDL, DML, DCL

 

DDL
데이터 정의 언어
Data Definition Language


db구조를 만드는 명령어
도서관의 책장을 설계하는 단계

주요명령어
CREATE
ALTER
DROP

-- DDL에 대해 알아보자.
-- db의 구조를 만드는 명령어다.
-- create, alter, drop

-- school 데이터베이스 생성
create database school;

-- 해당 db를 사용하겠다 use
use school;

-- 테이블 생성 create
-- name char(50) 고정길이의 공간을 배분한다. 문자열 50개
-- name varchar(50) 가변길이의 공간을 배분한다. 최대 50개
create table student(
	id int primary key,
    name varchar(50),
    age int 
);

-- 테이블 구조 확인 명령어 desc
desc student;

-- 테이블 구조 수정 alter
-- 추가로 칼럼을 넣고 싶을때

-- 칼럼 추가
alter table student add column phone varchar(15);

-- 칼럼 삭제
alter table student drop column phone;

-- 테이블
drop table student;

student 테이블 구조 확인(desc)
student 테이블에 phone 칼럼을 추가한 모습

 

예제2)

-- 직접 데이터 베이스 생성
create database bookstore;

use bookstore;

-- 테이블 생성
create table book(
	id int primary key,
    title varchar(20),
    author varchar(20),
    stock int
);

desc book;

-- 칼럼 추가
alter table book add column rating int;

-- 칼럼 삭제
alter table book drop column rating;

-- 테이블 삭제
drop table book;

drop database bookstore;

book 테이블에 rating 칼럼을 추가하고 구조확인(desc)한 모습

⭐래퍼 클래스
wrapper class

 

기본 자료형(Primitive Type)을 객체로 다루기 위해서 사용하는 클래스

👍 기본 자료형을 객체로 감싼다(Boxing)고 생각하면 된다.

프로그래밍을 하다 보면
기본 타입 데이터를
객체로 표현해야 할 때가 있다.

byte       Byte
short      Short
int        Integer
long       Long
float      Float
double     Double
char       Character
boolean    Boolean


⭐박싱
Boxing
기본 > 래퍼
기본 데이터를 래퍼 클래스 객체로 변환하는 과정

⭐언박싱
Unboxing
래퍼 > 기본
래퍼 클래스 객체를 기본 타입 데이터로 변환하는 과정

이들은 많이 사용되기에 자바 5부터 간소화 기능이 마련돼있다.
자동박싱
Auto-boxing
자동언박싱
Auto-unboxing

래퍼클래스는 컬렉션 프레임워크에서 많이 사용된다.
컬렉션에는 객체만 저장할 수 있기 때문이다.
이에 래퍼클래스 사용이 강제된다.

주의사항
래퍼클래스는 객체이므로 기본타입보다 메모리 사용량이 많다.
가능하다면 기본 타입 사용이 권장된다.

또한 래퍼클래스를 활용할때 NumberFormatException이 발생할 수 있다.
예외처리코드를 작성해주는 것이 좋다.

 

예문)

박싱, 언박싱, 자동박싱, 자동언박싱 방법 연습

package _wrapper;
public class WrapperTest1 {
    public static void main(String[] args) {
        //박싱
        int num = 10;
        Integer wrapperedNum = Integer.valueOf(num);

        System.out.println(wrapperedNum); // 10
        System.out.println(wrapperedNum.toString()); // toString 자동호출

        //언박싱
        Integer wrapperdNum2 = Integer.valueOf(30);
        int num2 = wrapperdNum2.intValue();
        System.out.println(num2);

        //자동박싱 - 기본 데이터 값이 래퍼 클래스 객체에 바로 들어간다.
        Integer autoBoxed = 20;

        //자동언박싱
        int autoUnboxed = autoBoxed;

    }//main
}//class

 

예문2)

실수형 데이터에 박싱, 언박싱 연습

package _wrapper;
public class WrapperTest2 {
    public static void main(String[] args) {

        //double 데이터 타입을 래퍼 클래스로 변환
        double doubles = 1.234;
        Double doubleWrap = Double.valueOf(doubles);
        System.out.println("박싱:"+doubleWrap);
        System.out.println("박싱:"+doubleWrap.toString());

        Double doubleWrap2 = Double.valueOf(4.321);
        double doubles2 = doubleWrap2.doubleValue();
        System.out.println("언박싱:"+doubles2);
        System.out.println("===== ===== ");

        //자동 박싱 언박싱 예제코드
        Double doubleWrap3 = 3.333;
        System.out.println("자동박싱:"+doubleWrap3);

        double doubles3 = doubleWrap3;
        System.out.println("자동언박싱:"+doubles3);

    }//main
}//class

 

예문3)

정수형, 실수형, 논리형 등 여러 자료형에 박싱, 언박싱 연습

package _wrapper;
/**
 5.12
 래퍼 클래스의 활용
 String => 기본데이터

 래퍼클래스를 활용할때 NumberFormatException이 발생할 수 있다.
 예외처리코드를 작성해주는 것이 좋다.
 */
public class WrapperTest3 {

    public static void main(String[] args) {

        //String => 기본데이터
        String strNum = "123";
        String strDouble = "45.67";
        String strBool = "true";
        String badStr = "a123";

        int num = Integer.parseInt(strNum);
        System.out.println(num); //123

        double dNum = Double.parseDouble(strDouble);
        System.out.println(dNum); //45.67

        boolean bool = Boolean.parseBoolean(strBool);
        System.out.println(bool); //true

        //a123 => int 변환
        try {
            int intNum = Integer.parseInt(badStr);
        } catch (NumberFormatException e) {
            System.out.println(badStr + "변수를 정수값으로 변경할 수 없습니다.");
        }
        //가능하다면 예외처리코드를 작성해주는 것이 좋다.

    }//main
}//class

 

예문4)

래퍼클래스를 활용해 String 클래스와 여러 자료형 사이 형변환을 해봤다.

package _wrapper;
/**
 5.12
 기본데이터 타입을 문자열로 바꿔본다.
 int double boolean => String
 */
public class WrapperTest4 {
    public static void main(String[] args) {

        //가장 쉬운 방법
        System.out.println(10 + "asdf");
        String str1 = 10 + "asdf";
        System.out.println(str1);

        //String 클래스의 valueOf()
        int value = 5000;
        String strValue = String.valueOf(value);
        System.out.println("int => String:"+strValue); //5000

        Float value2 = 1.234F; //접미사
        Long value3 = 1000L;

        String strValue2 = String.valueOf(value2);
        System.out.println("Float => String:"+strValue2); //1.234

        String strValue3 = String.valueOf(value3);
        System.out.println("Long => String:"+strValue3); //1000

    }//main
}//class

 

예문5)

컬렉션 프레임워크에서 래퍼클래스 사용해보기

package _wrapper;
import java.util.ArrayList;
/**
 5.12
 컬렉션 프레임워크에서
 래퍼 클래스 사용해보기

 래퍼클래스는 컬렉션 프레임워크에서 많이 사용된다.

 컬렉션에는 객체만 저장할 수 있다.
 래퍼클래스 사용이 강제된다.
 Integer Double Boolean
 */
public class WrapperTest5 {

    public static void main(String[] args) {

        ArrayList<Integer> numbers = new ArrayList<>(); //정수값만

        numbers.add(Integer.valueOf(10));
        numbers.add(20); //자동박싱 (int > Integer)

        int sum = numbers.get(0) + numbers.get(1); //자동언박싱 (Integer > int)
        System.out.println("합:" + sum);

    }//main
}//class

+ Recent posts