MySQL에서 GROUP BY가 반환한 행 수를 기준으로 그룹화하는 방법MySQL에서 각 이름이 몇 번 등장했는지 세고, 그 등장 횟수(행 수)를 기준으로 다시 그룹화하고 싶을 때가 있습니다. 이럴 때 GROUP_CONCAT() 함수를 활용하면 손쉽게 해결할 수 있습니다.개념을 이해하기 위해 먼저 예제 테이블을 만들어 보겠습니다.1. 테이블 생성아래 쿼리로 groupByDemo 테이블을 생성합니다.mysql> create table groupByDemo -> ( -> Id int NOT NULL AUT
MySQL에서 현재 설정된 구분 기호(delimiter)를 확인하려면 \s 명령어를 사용하면 됩니다. 이 명령은 현재 구분 기호뿐만 아니라 연결 상태, 서버 버전, 문자셋 등 다양한 세션 정보를 한눈에 보여줍니다.현재 구분 기호 확인하기MySQL 클라이언트에서 다음과 같이 입력합니다.mysql> \s실행 결과는 아래와 같습니다.-------------- C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe Ver 8.0.12 for Win64 on x86_64 (MySQL Commun
BLOB(Binary Large Object)은 최대 65535자(바이트)까지 가변 길이의 데이터를 저장할 수 있는 바이너리 대형 객체입니다. 주로 이미지나 각종 파일처럼 용량이 큰 이진 데이터를 데이터베이스에 저장할 때 사용됩니다.TEXT 필드 역시 대용량 데이터를 저장할 수 있습니다. 두 타입의 차이점은, BLOB에 저장된 데이터는 정렬·비교 시 대소문자를 구분하는 반면 TEXT 필드는 대소문자를 구분하지 않는다는 점입니다. 또한 BLOB과 TEXT 컬럼을 정의할 때는 별도의 길이를 지정하지 않습니다.데이터베이스에 BLOB 저장
CLOB(Character Large Object)은 SQL의 내장 데이터 타입 중 하나로, 대용량 텍스트 데이터를 저장하기 위해 사용됩니다. 이 데이터 타입을 활용하면 최대 2,147,483,647자(약 21억 자)에 달하는 문자 데이터를 저장할 수 있습니다.JDBC API의 java.sql.Clob 인터페이스가 바로 이 CLOB 데이터 타입을 나타냅니다. JDBC에서 Clob 객체는 SQL 로케이터(locator)를 기반으로 구현되기 때문에, 실제 데이터 자체가 아니라 SQL CLOB을 가리키는 논리적 포인터를 보유하게 됩니다.
JDBC 프로그래밍에서 대용량 텍스트 데이터를 다룰 때는 CLOB(Character Large Object) 데이터 타입을 사용합니다. 이 글에서는 JDBC의 PreparedStatement 인터페이스를 활용해 CLOB 타입 컬럼에 값을 삽입하는 방법을 단계별로 살펴보겠습니다.예제용 테이블 준비먼저 데이터베이스에 다음과 같은 구조의 MyData 테이블이 이미 생성되어 있다고 가정합니다.+---------+--------------+------+-----+---------+-------+ | Field | Type
ResultSet 인터페이스는 데이터베이스 테이블에서 CLOB 타입의 값을 가져오기 위해 getClob() 메서드를 제공합니다. 여기에 더해, CLOB 값을 문자 스트림 형태로 읽을 수 있는 getCharacterStream() 메서드도 함께 제공됩니다. getClob()과 getCharacterStream()의 차이점 getCharacterStream() 메서드는 getClob()과 마찬가지로 컬럼의 인덱스를 나타내는 정수 값 또는 컬럼 이름을 나타내는 문자열을 매개변수로 받아 해당 컬럼의 값을 조회합니다. 두 메서드의 차이점은
개요일반적으로 파일의 내용은 MySQL 데이터베이스에서 Clob(TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT) 데이터 타입으로 저장됩니다.JDBC는 Clob 데이터 타입을 기본적으로 지원하므로, 이를 활용하면 파일의 내용을 데이터베이스 테이블에 손쉽게 저장할 수 있습니다.PreparedStatement 인터페이스의 setCharacterStream() 메서드는 매개변수의 인덱스를 나타내는 정수와 Reader 객체를 인자로 받습니다.이 메서드는 지정된 인덱스의 매개변수(플레이스홀더)에 해당 Reader 객체(파일
JDBC에서 ResultSet 인터페이스는 getClob()과 getCharacterStream()이라는 두 가지 메서드를 제공하여 Clob 타입의 데이터를 조회할 수 있습니다. 일반적으로 파일의 내용은 이 Clob 타입으로 데이터베이스에 저장됩니다.두 메서드 모두 컬럼의 인덱스를 나타내는 정수 값 또는 컬럼 이름을 나타내는 문자열 값을 인자로 받아, 해당 컬럼의 값을 반환합니다.두 메서드의 차이점은 다음과 같습니다. getClob()은 Clob 객체를 반환하고, getCharacterStream()은 Clob 타입의 내용을 담고
BLOB과 CLOB 데이터 유형의 차이점BLOB(Binary Large Object)과 CLOB(Character Large Object)은 함께 LOB(Large Object, 대용량 객체) 유형이라고 불립니다. 두 데이터 유형 모두 대용량 데이터를 저장하기 위해 사용되지만, 저장하는 데이터의 성격이 다릅니다. 아래 표에서 BLOB과 CLOB의 주요 차이점을 확인해 보세요.BLOBCLOBBLOB은 Binary Large Object(바이너리 대형 객체)의 약자입니다.CLOB은 Character Large Object(문자 대형 객
LOB(Large Object) 데이터 타입 개요데이터베이스에서 대용량 데이터를 저장해야 할 때 사용하는 것이 바로 LOB(Large Object) 데이터 타입입니다. LOB는 크게 두 가지로 나뉩니다.BLOB(Binary Large Object)BLOB는 바이너리 대형 객체를 의미하며, 최대 65,535바이트(문자)까지 가변 길이의 데이터를 저장할 수 있습니다. 주로 이미지, 오디오, 비디오 등 다양한 형태의 바이너리 파일을 저장하는 데 활용됩니다.CLOB(Character Large Object)CLOB는 문자 대형 객체를 뜻하
SQL에서 날짜 값을 저장하려면 DATE 데이터 타입을 사용하면 되며, 자바에서는 java.sql.Date 클래스가 SQL의 DATE 타입과 매핑됩니다.setDate() 메서드로 날짜 값 삽입하기PreparedStatement 인터페이스는 setDate()라는 메서드를 제공합니다. 이 메서드를 활용하면 테이블에 손쉽게 날짜 값을 삽입할 수 있습니다. setDate() 메서드는 두 개의 매개변수를 받습니다.매개변수 인덱스(int): 날짜 값을 설정할 플레이스홀더(?)의 위치를 나타내는 정수입니다.Date 객체: 전달할 날짜 값을 담고
MySQL에서 AND와 OR의 우선순위MySQL SELECT 쿼리에서는 OR 연산자보다 AND 연산자가 더 높은 우선순위를 가집니다. 즉, 조건식에 AND와 OR가 함께 사용되면 MySQL은 항상 AND 조건부터 먼저 평가합니다.간단한 예제를 통해 MySQL이 AND 연산자에 어떻게 높은 우선순위를 부여하는지 확인해 보겠습니다.예제 쿼리mysql> select 0 AND 0 OR 1 as Result;실행 결과는 다음과 같습니다.+--------+| Result |+--------+| 1 |+--------+1 row
JDBC의 이스케이프 구문(escape syntax)은 표준 JDBC 메서드와 속성만으로는 접근할 수 없는 데이터베이스 고유 기능을 사용할 수 있도록 유연성을 제공합니다. DBMS마다 문법이 다르더라도 이스케이프 구문을 활용하면 드라이버가 각 데이터베이스에 맞는 형식으로 자동 변환해 주기 때문에 코드의 이식성을 높일 수 있습니다.기본 이스케이프 구문 형식JDBC SQL 이스케이프 구문의 일반적인 형식은 다음과 같습니다.{keyword parameters}이제 JDBC에서 제공하는 주요 이스케이프 구문들을 하나씩 살펴보겠습니다.d,
JDBC ResultSet의 두 가지 유형JDBC에서 ResultSet 객체는 크게 순방향 전용(forward-only)과 양방향(bi-directional) 두 가지 유형으로 나뉩니다. 이름 그대로 순방향 전용 ResultSet은 앞쪽 방향으로만 포인터를 이동할 수 있고, 양방향 ResultSet은 포인터를 앞뒤 양쪽 방향으로 자유롭게 이동할 수 있습니다.ResultSet 인터페이스는 이러한 두 유형의 객체를 탐색할 수 있도록 다양한 메소드를 제공합니다.ResultSet 탐색 메소드 목록아래 표는 ResultSet 객체를 탐색할
JDBC 세이브포인트(Savepoint)란?세이브포인트(Savepoint) 인터페이스는 트랜잭션에 대한 추가적인 제어 기능을 제공합니다. 대부분의 최신 DBMS는 Oracle의 PL/SQL처럼 자체 환경 안에서 세이브포인트를 지원합니다.세이브포인트를 설정하면 트랜잭션 내부에 논리적인 롤백 지점을 정의하게 됩니다. 따라서 세이브포인트 이후에 오류가 발생했을 때, rollback 메서드를 사용하여 모든 변경 사항을 되돌릴 수도 있고, 세이브포인트 이후의 변경 사항만 선택적으로 되돌릴 수도 있습니다.세이브포인트 관리 주요 메서드Conne
자바 애플리케이션을 개발하다 보면 로고, 사진 같은 이미지 파일을 데이터베이스에 직접 저장해야 하는 경우가 있습니다. 이 글에서는 JDBC(Java Database Connectivity)를 사용해 이미지를 데이터베이스에 삽입하는 방법을 단계별로 살펴보겠습니다.setBinaryStream() 메서드란?PreparedStatement 인터페이스의 setBinaryStream() 메서드는 매개변수의 인덱스를 나타내는 정수값과 InputStream 객체를 인자로 받아, 해당 매개변수를 지정된 InputStream 객체로 설정합니다.일반적
데이터베이스에 다음과 같은 구조를 가진 MyTable 테이블이 이미 존재한다고 가정해 보겠습니다.+-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | Name | varchar(255) | YES | | NULL | | | image | blob
Oracle 데이터베이스에 이미지를 저장하려면 일반적으로 BLOB(Binary Large Object) 타입을 사용합니다. 따라서 이미지 삽입 작업을 시작하기 전에 아래와 같이 BLOB 타입의 컬럼을 포함한 테이블이 생성되어 있는지 먼저 확인해야 합니다.Name Null? Type ----------------------------------------- -------- ---------------------------- NAME VARCHAR2(255) IMAGE BLOBJava 프로그램을 사용하여 Oracle 데이터베이스에 이미
MySQL 데이터베이스에 이미지를 저장할 때는 일반적으로 BLOB(Binary Large Object) 타입을 사용합니다. 따라서 이미지를 삽입하기 전에 아래와 같이 BLOB 타입의 컬럼을 포함하는 테이블이 미리 준비되어 있어야 합니다.+-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+
JDBC setBlob() 메서드란? setBlob() 메서드는 PreparedStatement를 통해 데이터베이스의 BLOB(Binary Large Object) 타입 컬럼에 값을 설정할 때 사용하는 메서드입니다. 이 메서드는 용도에 따라 세 가지 형태로 오버로딩되어 제공됩니다. void setBlob(int parameterIndex, Blob x): 지정된 인덱스의 매개변수에 주어진 Blob 객체의 값을 설정합니다. void setBlob(int parameterIndex, InputStream inputStream): 지정