🌍ansi 표준, ansi sql
미국국가표준협회(ansi)가 정한 sql 표준이다.

🤔왜?

호환성
mysql에서 작성한 구문이 sqlserver, oracle에서 돌아가야 한다.

주요 ansi 함수

집계 함수
count()
sum()
avg()
max()/min()

-- 집계함수
select avg(salary) as avg_salary
from new_employees;

-- round 반올림 소수점 n 자리까지
select round(avg(salary),2) as avg_salary
from new_employees;

select count(*)as d_count
from new_employees;

-- select count(*)as d_count, name
-- from new_employees;
-- 버전에 따라 안되는 쿼리들이 있다. (논리적, 물리적)

샘플데이터
사원 5명의 평균급여
평균값을 소수점 2번째에서 반올림(round)했다.
전체 사원의 숫자를 셈(count)했다.


문자열 함수
concat()
upper()/lower()
trim()
substring()

-- 문자열 결합, 대문자 처리

select concat('Mr/Ms ', name) as formal_name
from new_employees;

select concat(upper('Mr/Ms '), name) as formal_name
from new_employees;

select concat(lower('Mr/Ms '), name) as formal_name
from new_employees;

-- 문자열
-- 문자열 추출
select*, substring(name, 1, 2)
from new_employees;

-- 문자열 추출, 문자열 결합
select*, concat( substring(name, 1, 2), '*') as formal_name
from new_employees;

name 칼럼의 값에 임의의 문자열을 결합(concat)했다.
name 칼럼에서 1~2번째까지 글자를 추출하고 임의의 문자열을 결합했다.


논리 조건 함수
case
coalesce()

-- 논리 조건
-- case when then else
select*,
	case when employees.gender = 'M' then '남자' else '여자' end as formal_gender
from employees.employees;
-- 다른 db의 table을 불러올 수 있다.

조건문(case)을 통해 gender 칼럼의 값을 한글로 보여주는 새 칼럼을 만든 모습


날짜
current_date
current_time
current_timestamp
extrat()

-- 날짜 시간
select current_date as today;
select current_time as now;

-- 날짜 차이 계산
-- datediff 두 날짜 차이 계산
select*,
	datediff(current_date, hire_date)/365 as years_working
from new_employees;

-- floor 소수점 버림
select*,
	floor(datediff(current_date, hire_date)/365) as years_working
from new_employees;

select 문을 통해 오늘 날짜(current_date)를 나타냈다.
current_date와 hire_date의 차이(datddiff)를 구하고, 그 값을 연도로 표시한뒤, 소수점 값을 버렸다(floor).


형변환
cast()

-- 형 변환
-- dicimal => 형변환 => 문자열 (char) 고정길이
select*, cast( floor(salary) as char) as salary_text
from new_employees;

select*, concat( cast( floor(salary) as char),'원' ) as salary_text
from new_employees;

select*, concat( cast( floor(salary) as char),'원' ) as formal_salary
from new_employees;

select*, concat( substring(cast( floor(salary) as char),1,3),'만원' ) as salary_text
from new_employees;

salay 칼럼의 값에서 소수점을 버리고(floor), 문자열(char)로 형변환(cast)했다. 그 다음 1~3번째 글자만 추출(substring)하고, 임의의 문자열을 결합(concat)했다.



👍sql 함수를 잘 조합해서 정제된 정보를 만들 수 있다면
☕java 단의 코딩이 간결해질 수 있다.


⭐ join
두 개 이상의 테이블에서 데이터를 결합

크게 2가지로 구분
inner join, outer join

outer join 은 다시 2가지로 구분
outer join (left join, right join)

⭐ inner join
on 조건 없이 사용할때 inner join 을 cross join이라고 부른다.
즉, cross join은 inner join의 한 형태다. 잘 쓰이지는 않는다.

inner join을 쓸때
on이라는 조건을 설정한다.
on tb_student.no = tb_grade.no


이렇게 매번 칼럼명을 작성하는 것은 불편하다.
이때는 별칭을 사용하면 된다.

 

👍대부분의 경우 join(inner join) 과 left join 만을 사용한다.

 

💀 join 활용시 주의사항

1.on 지정 필수
2.외래키와 기본키를 매핑해야 무결성 보장
3.성능저하를 고려해 인덱스 생성 권장

-- inner join 사용법
select*
from tb_grade;
select*
from tb_student;

select*
from tb_student
join tb_grade;
-- on 조건이 없어서 크로스 조인이 됐고 레코드가 30개나 뽑혀버렸다.

select*
from tb_student
inner join tb_grade
on tb_student.grade = tb_grade.grade;
-- 2개 테이블을 결합해 의미있는 결과값을 뽑아냈다.

select tb_student.no, tb_student.name, tb_student.grade, tb_grade.score
from tb_student
inner join tb_grade
on tb_student.grade = tb_grade.grade;
-- 중복 칼럼을 없애고 필요한 칼럼만을 취사선택했다.

select s.no, s.name, s.grade, g.score
from tb_student as s
inner join tb_grade as g
on s.grade = g.grade;
-- 별칭을 사용해서 코드량을 줄였다.

조건(on)을 설정하지 않으면 무의미한 데이터 범벅이 나온다.
올바른 조건을 입력하면 간결하고 의미있는 결과값을 뽑아낼 수 있다.


⭐ outer join
아우터조인에는 2가지 left join 과 right join 이 있다.

left join (left outer join)
left join은 조건에 맞지 않는 데이터도 포함한다.

right join (right outer join)
right join은 조건에 맞지 않는 데이터가 없으면 왼쪽 테이블은 null 처리

-- outer join 연습
use shcool;

-- 레프트 조인
select s.no, s.name, s.grade, g.score
from tb_student as s
left join tb_grade as g on s.grade = g.grade;

-- 라이트 조인
select s.no, s.name, s.grade, g.score
from tb_student as s
right join tb_grade as g on s.grade = g.grade;

left join 결과창
right join 결과창


⭐union
두 테이블의 모든 데이터를 포함
조건이 맞지 않은 경우 null 처리

how?
left join과 right join을 union으로 결합

use school;

select s.no, s.name, s.gender, g.score, g.grade
from tb_student as s
left join tb_grade as g
on s.grade = g.grade
union
select s.no, s.name, s.gender, g.score, g.grade
from tb_student as s
right join tb_grade as g
on s.grade = g.grade
where s.grade is null;
-- 유니온 결과값 기본

select s.no, s.name, s.gender, g.score, g.grade
from tb_student as s
left join tb_grade as g
on s.grade = g.grade
union
select s.no, s.name, s.gender, g.score, g.grade
from tb_student as s
right join tb_grade as g
on s.grade = g.grade
where s.grade is not null;
-- 유니온 결과값 null값 제거

union 결과창
null값이 나오지 않도록 설정한 결과창



⭐Java.time 패키지
시간과 관련된 클래스들을 모아뒀다.

java1.1때 만들어진 Date, Calendar 클래스는
여러 문제점을 안고 있었다.

이에 따라 java8에서 새로운 클래스들이 만들어졌다.

java.time의 주요 클래스


LocalDate 날짜만

LocalTime 시간만
LocalDateTime 날짜 + 시간
Period 날짜 간격
Duration 시간 간격

 

예제)

구버전 시간 클래스

Date now = new Date();
System.out.println("현재시간" + now);

//Calendar cal = new Calendar(); //new 못때리게 개발자가 막아놨다.
Calendar cal = Calendar.getInstance();
cal.set(2025,4,14); //0부터 시작(4= 5월)
System.out.println("설정날짜"+ cal.getTime());

 

예제2)

특정날짜의 요일 확인

//2000년 5월13일이 무슨 요일일까?
LocalDate birthday = LocalDate.of(2000, 5, 13);
System.out.println("00-05-13요일"+birthday.getDayOfWeek());

 

예제3)

100일 후 날짜 계산

//현재 날짜로부터 100일 후의 날짜는?
LocalDate now = LocalDate.now();
LocalDate after100 = now.plusDays(100);
System.out.println("100일후"+after100);

 

예제4)

나이 계산

//나이계산하기
LocalDate birth = LocalDate.of(2000, 5, 13);
LocalDate today = LocalDate.now();

//기간계산
Period age = Period.between(birth, today);

//나이를 연도 단위로 추출
System.out.println("나이는" + age.getYears());

 

예제5)

시간 차이 계산

LocalTime start = LocalTime.of(9, 0); //오전 9시
LocalTime end = LocalTime.of(11, 30); //오전 11:30

Duration dr = Duration.between(start, end);
System.out.println("시차는" + dr.toHours()+"시간");
System.out.println("시차는" + dr.toMinutes()+"분");
System.out.println("시차는" + dr.toSeconds()+"초");

LocalDate election = LocalDate.of(2025, 6, 3);
System.out.println(election.getDayOfWeek());

 

예제6)

시간 표시방식 변경

LocalDateTime now = LocalDateTime.now();
System.out.println("현재일시"+now);
//2025-05-14T10:02:13
/*
이걸 한국식 날짜포맷으로 바꿀 수는 없을까?

2025년 05월 14일 12시 00분
이런 식으로 패턴을 지정할 수 있다.

yyyy 4자리 년
mm 2자리 월
dd 2자리 일
hh 2자리 시간
mm 2자리 분

DateTimeFormatter
 */
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy년 MM월dd일 HH시mm분");
now.format(dtf);
//내가 정의한 포맷으로 현재 시간을 표시해준다.
System.out.println("현재일시" + now.format(dtf));

 

⭐JDBC 구성 요소

Driver 특정 데이터베이스와의 연결을 처리하는 인터페이스 구현.
DriverManager JDBC 드라이버를 관리하고 데이터베이스 연결을 설정.
Connection 데이터베이스와의 세션을 나타냄.
Statement SQL 쿼리를 실행.
ResultSet 쿼리 결과를 저장하고 탐색.
SQLException JDBC 작업 중 발생하는 예외 처리.

⭐Driver (jdbc가 대체)
특정 데이터베이스와의 연결을 처리
데이터베이스 연결 설정, SQL 쿼리 실행 지원

⭐ DriverManager
JDBC 드라이버를 관리하고 데이터베이스 연결을 설정하는 클래스
url, user, password 기반으로 적절한 드라이버를 찾아 Connection 객체를 반환

⭐ Connection
데이터베이스와의 세션을 나타내는 객체

⭐ Statement
SQL 쿼리를 데이터베이스에 전송하는 데 사용
executeQuery()
executeUpdate()

⭐ ResultSet
쿼리 실행 결과를 저장하는 객체
데이터를 행 단위로 탐색하고 열 값을 읽음

⭐ SQLException
JDBC 작업 중 발생하는 예외를 처리

 

예제)

package ch02;
import java.sql.*;
/**
 5.14
 jdbc 활용
 */
public class JdbcExample {
    public static void main(String[] args) {

        //데이터베이스 접근 주소
        //String url = "jdbc:mysql://127.0.0.1";
        String url = "jdbc:mysql://localhost:3306/school?serverTimezone=Asia/Seoul";
        String user = "root";
        String pass = "asd1234";

        //jdbc를 쓰기 위해 필요한 클래스(구성요소)
        Connection conn = null;
        Statement stmt = null;
        ResultSet rsts = null;

        //실행
        try {
            //1.데이터베이스 연결 요청
            conn = DriverManager.getConnection(url,user,pass);
            System.out.println("mysql db 연결 성공");

            //2.스테이트먼트 생성
            stmt = conn.createStatement();

            //2-1.쿼리 실행해보기
            //rsts = stmt.executeQuery("select * from tb_student where no = 20170001");
            rsts = stmt.executeQuery("select * from tb_student");

            //3.결과 실행
            while (rsts.next()) {
                String no = rsts.getString("no");
                String name = rsts.getString("name");
                String gender = rsts.getString("gender");
                int age = rsts.getInt("age");
                System.out.print("no:"+no +"\t");
                System.out.print("name:"+name +"\t");
                System.out.print("gender:"+gender +"\t");
                System.out.print("age:"+age +"\n");
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //jdbc를 쓰면 db에서 자원을 얻기 위해 대기하는 문제가 생긴다.
            //4.자원 해제 - 역순으로
            try {
                //ResultSet 종료
                rsts.close();
                //Statement 종료
                stmt.close();
                //Connection 종료
                conn.close();

            } catch (SQLException e) {
                System.out.println("자원해제 중 오류:"+e.getMessage());
            }
        }

    }//main
}//class

학번,이름,성별,나이 출력

 

 

예제2)

package _my;
import java.sql.*;

public class MyJdbcTest {
    public static void main(String[] args) {

        //접근주소
        String url = "jdbc:mysql://localhost:3306/employees?serverTimezone=Asia/Seoul";
        String user = "root";
        String pass = "asd1234";

        //클래스
        Connection conn = null;
        Statement stmt = null;
        ResultSet rsts = null;

        //실행
        try {
            //1.커넥션
            conn = DriverManager.getConnection(url, user, pass);
            //2.스테이트먼트
            stmt = conn.createStatement();
            //3.리절트셋
            rsts = stmt.executeQuery("select e.emp_no, e.first_name, e.last_name, s.salary" +
                    " from employees as e" +
                    " join salaries as s on e.emp_no = s.emp_no" +
                    " where (e.hire_date - e.birth_date) < 210000 and s.to_date = '9999-01-01'");

            //결과 실행
            while (rsts.next()) {
                int emp_no = rsts.getInt("e.emp_no");
                String first_name = rsts.getString("e.first_name");
                String last_name = rsts.getString("e.last_name");
                int salary = rsts.getInt("s.salary");
                System.out.print(emp_no +"\t");
                System.out.print(first_name +"\t");
                System.out.print(last_name +"\t");
                System.out.print(salary +"\t");
                System.out.println();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //자원 해제 - 역순으로
            try {
                rsts.close();
                stmt.close();
                conn.close();
            } catch (SQLException e) {
                System.out.println("자원해제 중 오류:" + e.getMessage());
            }
        }

    }//main
}//class

20세 입사자 명단 1159명 명단(사번,이름,성,연봉) 출력

적절한 데이터 타입을 선택해야

데이터 무결성을 보장하고

저장 공간을 효율적으로 사용할 수 있다.

 

SQL의 자료형은 숫자, 문자, 날짜, 논리형의 4가지다.

 

숫자 INT, BIGINT, FLOAT, DOUBLE
문자 VARCHAR, CHAR, TEXT, BLOB
날짜 DATE, TIME, DATETIME, TIMESTAMP
논리 BOOLEAN, BOOL 등...

 

예제)

-- 대표적인 데이터 타입 사용해보기 
-- 테이블 생성 (DDL)

-- DROP database school;
-- create database school;
use school;

CREATE TABLE student(
	student_id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL, 
    grade TINYINT NOT NULL, 
    major VARCHAR(50), 
    admission_date DATE NOT NULL, 
    notes TEXT
);

desc student;

-- DML
SELECT * FROM student; 

INSERT INTO student(student_id, name, grade, major, admission_date, notes)
VALUES(1001, '김지영', 1, '컴퓨터공학', '2025-09-01', '프로그래밍에 뛰어남');
    
INSERT INTO student(student_id, name, grade, major, admission_date, notes)
VALUES(1002, '이민수', 2, '수학', '2025-12-05', NULL);
    
-- 테이블에 데이터 전체 삭제 
-- DELETE FROM student;
        
INSERT INTO student(student_id, name, grade, major, admission_date, notes)
VALUES (1001, '김지영', 1, '컴퓨터공학', '2025-09-01', '프로그래밍에 뛰어남'),
		   (1002, '이민수', 2, '수학', '2024-12-05', NULL),    
       (1003, '박소연', 3, '물리학', '2023-09-01', '양자역학에 관심이 많음');

다양한 데이터타입을 적용해 테이블을 설계해봤다.
데이터를 입력해본 모습

 

DCL

데이터 제어 언어

Data Control Language

 

주요명령어

GRANT
REVOKE

-- DCL 데이터 제어 언어
-- 현재 root 계정 (최고관리자)

create database mydb2;
use mydb2;

-- 사용자 생성 및 비밀번호 설정
-- 로컬에서만 접근 가능한 계정 user1 생성
-- 버전 5와 8의 명령어가 다르다. 현재 8 사용중
create user 'user1'@'localhost' identified by 'password123';

-- user1에 조회 권한만 부여해보자.
grant select on school.student to 'user1'@'localhost';

-- user1 계정 조회 권한 회수
revoke select on school.student from 'user1'@'localhost';

-- 원격 및 로컬에서 접근 가능한 id 생성과 권한부여
create user 'user2'@'%' identified by 'password123';
create user 'user2'@'localhost' identified by 'password123';

-- 권한 부여
grant select, insert, update, delete on school.student to 'user2'@'%';
grant select, insert, update, delete on school.student to 'user2'@'localhost';

user1의 권한 조회 상태, 조회(select) 기능만 사용 가능하다.
mysql 워크벤츠 프로그램 홈에서 user1로 비밀번호를 입력하여 접속해봤다.
mydb2 데이터베이스의 users 테이블을 조회(select)해보는 모습

⭐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

⭐JDBC


Java
Database
Connectivity

 

애플리케이션이 데이터베이스와 대화할 수 있도록 도와주는 중간다리

💀대부분의 애플리케이션은 데이터베이스와 상호작용하는 구조다.
하지만 기업들이 사용하는 DBMS는 오라클, MySQL 등으로 다양하며 서로 다른 접근방식을 요구한다.

😎JDBC는 다양한 데이터베이스와 하나의 방식으로 대화할 수 있게 해준다.

 

이에 앞서 먼저 JDBC 라이브러리를 설치해야 한다.

https://notion6780.tistory.com/70

 

[인텔리제이] lombok, JDBC 라이브러리 추가 방법

확장자가 jar로 끝나는 파일들이 있다.이는 자바개발자들이 만들어 둔 xxx.class 파일들의 모음으로라이브러리라고도 한다. 특히 자바 언어 개발을 하다보면 기계적으로 작성해야 하는 코드들이

notion6780.tistory.com

JDBC 라이브러리를 설치했다면
JDBC가 제공하는 기능을 호출해 사용할 수 있다.

 

접속방법.
MySQL에서 접속하는 과정과 마찬가지로
접근경로, 아이디, 비번을 입력해야 한다.
jdbc:mysql://localhost:3306/school?serverTimezone=Asia/Seoul
root
password

접속 명령어는 Connection이다.
Connection 이라고 입력하면 java.sql 관련 기능이 호출된다.

아래와 같이 미리 입력해둔 경로와 아이디, 비번을 입력해주면 된다.
Connection conn = DriverManager.getConnection(url,user,password);

 

package ch01;
import java.sql.*;
/**
 5.11 자바로 db에 접근하는 방법을 배운다.
 DB 접근 기술
 MySQL 8 버전 기준

 DB 접근 기술은 정형화돼 있다.
 */
public class JdbcExample {
    public static void main(String[] args) {
//        String url = "jdbc:mysql://192.168.0.132:3306";
        String url = "jdbc:mysql://localhost:3306/school?serverTimezone=Asia/Seoul";
        String user = "root";
        String password = "password";
        /*
        커넥션 객체를 힙 메모리에 올리기 위해서는
        미리 약속된 드라이버 매니저
        Driver Manager 가 필요하다.
         */
        try {
            Connection conn = DriverManager.getConnection(url,user,password);
            System.out.println("데이터베이스에 성공적으로 연결됐어요");
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("데이터베이스 연결에 실패했어요");
        }
    }//main
}//class

+ Recent posts