Kotlin에서의 var 개념 도입 switch문의 Null 처리switch(object) { case null -> {} // object가 null일 경우 case null, default -> {} // object가 null이거나 선택되지 않은 경우} switch문의 Instance 확인String data = switch(obj) { case Integer i -> String.valueOf(i); case String s -> "\" + s + "\"; case null, default -> "unknow";};// 이런식으로 obj의 타입을 확인해서 case에 있는 해당 변수로 return할 수 있음 가상 스레드
전체 글
외운다기 보다 이 흐름을 생각하면 더 좋을 것 같다Connection으로 부터 conn을 받아온다이때 DriverManager의 도움을 받아 사용하고자 하는 DB와 Connection을 생성한다Connection이 생겼으면 하고자 하는 동작에 대한 것이 필요해진다PreparedStatement를 준비하고 원하는 동작(SQL)문을 등록해준다PreparedStatement(pstmt)에 필요한 것들을 setXXX를 통해 세팅해준다이후 execute를 해주면 된다 public class Main4 { public static void main(String[] args) throws IOException { String SQL; PreparedStatement pstmt = nu..
INDEXIndex는 테이블에서 특정 찾기 작업을 빠르게 수행하기 위해서 MySQL이 별도로 만드는 데이터 구조를 말함컬럼별로 만들어짐PK나 FK로 지정된 컬럼은 기본적으로 Index를 갖게됌특정 컬럼을 바탕으로 자주 검색시 Index 생성은 큰 도움이 될 수 있음SELECT / DELETE / JOIN 빠르게 하고 INSERT / UPDATE는 느리게 함테이블에 너무 많은 INDEX를 추가하면 인덱스의 로딩으로 인한 오버헤드로 인해 시스템이 전체적으로 느려질 수 있음CREATE TABLE ryu_index ( id int NOT NULL auto_increment, user_id int not NULL, created timestamp not NULL default CURRENT_TIMESTAMP, c..
Stored ProcedureStored ProcedureDROP PROCEDURE IF EXISTS return_ryu;DELIMITER //CREATE PROCEDURE return_ryuBEGIN SELECT * FROM ryu;END //DELIMITER ;-- 띄어쓰기 중요하고 //는 $$도 상관없음 IN 파라미터 (입력 전용)DELIMITER //CREATE PROCEDURE return_ryu(IN channelName varchar(64))BEGIN SELECT * FROM ryu WHERE channel = channelName;END //DELIMITER ;CALL return_ryu('Facebook');-- 데이터를 직접 집어넣어서 프로시저를 돌릴 수 있음 INOUT 파라..
아래의 select를 자주 쓴다면SELECT s.id, s.user_idFROM session sJOIN channel c ON c.id = s.channel_id;아래처럼 등록 가능CREATE OR REPLACE VIEW test.session_details ASSELECT s.id, s.user_idFROM session sJOIN channel c ON c.id = s.channel_id;SELECT * FROM test.session_details; View에 값 대입view에 값을 대입했는데 대입이 된다면 원래 테이블에 null 조건이 안걸려서 대입 된거원본 테이블을 확인하면 id만 들어가 있고 나머지 것들은 null이 들어감즉, 접근을 못하게 하거나 not null 형식 등등 제약을 해주어야 함
INNER JOIN양쪽 테이블에서 매치가 되는 레코드들만 리턴함양쪽 테이블의 필드가 모두 채워진 상태로 리턴됨대부분의 조인은 INNER JOIN LEFT JOIN왼쪽 테이블의 모든 레코들을 리턴함오른쪽 테이블의 필드는 왼쪽 레코드와 매칭되는 경우에만 채워진 상태로 리턴됨 FULL JOIN왼쪽 테이블과 오른쪽 테이블의 모든 레코드들을 리턴함매칭되는 경우에만 양쪽 테이블들의 모든 필드들이 채워진 상태로 리턴됨LEFT JOIN(UNION VS UNION ALL) => 중복제거 / 중복 포함RIGHT JOIN CROSS JOIN왼쪽 테이블과 오른쪽 테이블의 모든 레코드들의 조합을 리턴함 SELF JOIN동일한 테이블을 alias를 달리해서 자기 자신과 조인함 -- InnerJoinSELECT * FROM vit..
String FunctionsLEFT(str, N)REPLACE(str, exp1, exp2)UPPER(str)LOWER(str)LENGTH(str)LPAD, RPAD // STRING의 길이가 짧을 경우 부족한 공간을 채워줌SUBSTRINGCONCAT Type Castingcast(category as float)convert(expression, float) GROUP BY와 함께 쓰이는 Aggregate 함수GROUP BY & Aggregate 함수[Aggregate 함수] COUNT, SUM, AVG, MIN, MAX, GROUP_CONCAT...SELECT LEFT(created, 7) AS mon, COUNT(1) AS session_countFROM prod.sessionGROUP ..
기초 문법SELECT 테이블들에서 레코드들을 읽어오는데 사용SELECT 필드이름1, 필드이름2FROM 테이블 이름WHERE 선택조건GROUP BY 필드일므1, 필드이름2 ORDER BY 피들이름 [ASC|DESC]LIMIT N CASE WHENCASE WHEN 조건1 THEN 값1 WHEN 조건2 THEN 값2 ELSE 값3END 필드 이름 COUNT의 이해Null 1 1 0 0 4 3 value가 이와 같을 때COUNT(1) -> 7COUNT(0) -> 7COUNT(NULL) -> 0COUNT(value) -> 6COUNT(DISTINCT value) -> 4 DELETE FROM vs TRUNCATEDELETE FROM vs TRUNCATETRUNCATE 는 조건없이 모든 레코드 삭제, 속도가..
https://hangbok-archive.com/data/rdbms/%EC%84%9C%EB%B8%8C%EC%BF%BC%EB%A6%AC-vs-join/ SQL 성능 비교 : 서브쿼리 vs JOIN - H-A서브쿼리 vs JOIN : 서브쿼리와 JOIN 문은 데이터베이스에서 정보를 추출하는 두 가지 주요 방법입니다. 성능 차이는 데이터 양, 인덱스의 존재 여부, 데이터베이스 종류 등에 따라 다를 수 있습니hangbok-archive.com 해당 글을 보면 성능차이를 이해할 수 있습니다
클래스의 멤버로 선언된 인터페이스\해당 클래스와 긴밀한 관계를 맺는 구현 객체를 만들기 위함public class Button { public static interface ClickListener{ void OnClick(); } private ClickListener clickListener; public void setClickListener(ClickListener clickListener) { this.clickListener = clickListener; } public void click() { this.clickListener.onClick(); }}(main)Button btnOk = new Button();cla..
public class A { void method1(int arg) { // final int arg //로컬 변수 int var = 1; // final int var = 1 //로컬 클래스 class B { static int field = 1; // 정적 필드(Java 17) (B 생성자) static void method2() { sout(arg); // 읽기 가능 // arg = 1; // 불가능 } // 정적 메소드(Java 17) } // 로..
// sealed 키워드를 사용하면 permits 뒤에 상속 가능한 자식 클래스를 지정해야 함public sealed class Person permits Employee, Manager {}// sealed 처리된 Person 을 상속하는 Employee, Manager는// final 또는 non-sealed 키워드를 쓰거나 sealed 키워드를 사용해서 또 다른 봉인 클래스로 선언해야함public final class Employee extends Person {}public non-sealed class Manager extends Person{}