수업 때 not null 제약에 대해 배웠는데, not null 제약을 넣은 칼럼에 대해 insert 때 명시를 안했음에도 insert가 성공했다.
물론 값 자체는 문자열 형이다보니 empty값(빈 문자열)로 들어갔는데, insert 시 칼럼을 정의하지 않았는데도 값이 들어가는건 뭔가 탐탁지 않다고 생각했다.
찾아보니 아래와 같은 설정을 통해 엄격한 제약 모드를 설정할 수 있다고 한다.
SET sql_mode = 'STRICT_ALL_TABLES';
엄격한 제약 모드는 아래로 해제할 수 있다.
SET sql_mode = '';
엄격한 제약 모드를 활성화 하니 not null 항목의 값을 명시 안하고 insert 문을 시행하자 오류를 일으키며 값이 들어가지 않았다.
sts압축 푸는 법
sts jar 파일이 있는 곳에서 cmd를 실행하고 아래 명령어를 입력하면 압축을 풀 수 있다.
java -jar spring-tool-suite-4-4.21.0.RELEASE-e4.30.0-win32.win32.x86_64.self-extracting.jar
JDBC 는 자바랑 sql을 연동화 해주는 표준화된 방식이다.
maven repository에서 mysql의 드라이버를 받아주는데, jar형식으로 받아온다.


프로젝트에 폴더를 생성해, 받아온 jar 파일을 넣어주고, 우클릭해 Build Path에 등록해준다.


mysql 커넥션 연결
Class.forName("com.mysql.jdbc.Driver");

상기 Driver 클래스를 로드하고 정적(static) 초기화 블록이 실행되도록 하는 코드
private static String url = "jdbc:mysql://127.0.0.1:3306/onehour?useUnicode=true&characterEncoding=utf8&autoReconnect=true&serverTimezone=Asia/Seoul&useOldAliasMetadataBehavior=true&zeroDateTimeNehavior=convertToNull";
conn = DriverManager.getConnection(url, "root", "");
url의 각 부분
jdbc:mysql://: 이 부분은 사용 중인 데이터베이스의 JDBC 드라이버를 지정합니다. 여기서는 MySQL 데이터베이스를 사용하고 있음을 나타냅니다.
127.0.0.1:3306: 데이터베이스 서버의 주소와 포트 번호
/onehour: 연결하려는 실제 데이터베이스의 이름
useUnicode=true: 유니코드 사용 여부
characterEncoding=utf8: 문자 인코딩을 UTF-8로 설정
autoReconnect=true: 연결이 끊어졌을 때 자동으로 다시 연결을 시도.
serverTimezone=Asia/Seoul: 데이터베이스 서버의 타임존을 서울
useOldAliasMetadataBehavior=true: 이전에 사용되던 alias 메타데이터 동작(열이름을 별명등으로 가져오는 처리)을 사용할지 여부
zeroDateTimeBehavior=convertToNull: 0으로 표시된 날짜/시간 값이 발견되면 null로 변환할지 여부
getConnection의 각 인자는 (url, id, password)