DB

    Mybatis에서 null값 허용하기

    기능 구현을 하다보면 , mybatis에서 insert나 update시 , 컬럼에 null값이 들어가게 해야 할 때도 있는데, 이때 그냥 쿼리문을 작성하면 NullPointException 에러가 뜬다. insert 문의 values 에 #{property , jdbcType=int } #{property , jdbcType=varchar2} 이런식으로 , 파라미터 뒤에 해당 컬럼의 데이터타입을 선언해준다 ! 대소문자 구분 주의 그럼 insert시 null값이 들어간다.

    [오라클]CASCADE 제약조건 추가하기

    게시글과 댓글을 구현하면서 , 댓글테이블에 외래키로 게시글테이블의 BNO를 설정했다. 그 후, 게시글을 삭제하려고 하니 무결성 제약조건 위배로 삭제가 안되고 500에러가 나왔다. 찾아보니 delete cascade 제약조건을 설정해놔야 부모테이블 삭제시 자식테이블도 같이 삭제되는 방법을 찾았다. alter table 자식테이블명 add constraint 설정할제약조건명 foreign key (외래키로 설정할 키) references 부모테이블명(외래키로 설정할 키) on delete cascade; alter table MP_FILE add constraint MP_FILE_DELETE foreign key (BNO) references MP_BOARD(BNO) on delete cascade; alt..

    MYSQL에서 Enum이란?

    MySQL 서브쿼리는 버전 4.1.x 대부터 지원하고 있다. MySQL Enum 타입은 Java enum 타입과 비슷한 유형이다. 컬럼 정의 시 다음과 같이 enum 컬럼에 들어갈 수 있는 항목들을 정의한다. ENUM(value1, value2, value3...) value는 최대 65535 개까지 가능하다. ENUM 데이터 타입은 캐릭터형 데이터 타입이며, 해당 칼럼에 들어올 수 있는 값을 지정해 줄 수 있다. 테이블 생성 시 주어진 list안의 데이터만 값을 입력 받고, 잘못 된 데이터는 "값으로 처리하는 데이터타입이다. 체크 제약조건이라고 볼 수 도 있다. 값으로도 조회가 가능하지만 index값으로도 제어가 가능하다. index는 1부터 시작하고 다음과 같이 index값을 가지고 올 수 있다. i..

    select key의 사용 ex)게시판 첨부파일 작성

    DB작업을 하다보면 먼저 사전에 어떤 키값을 가져와서 증가시켜서 입력하거나 혹은 입력후에 증가된 키값을 가져올 필요가 있다. 이럴때 mybatis에서 제공하는 selectKey를 이용하면 별도의 쿼리로직을 등록할 필요없이 해당 메소드에서 일괄처리할 수가 있다. 입력하기전에 특정키값을 가져온 다음 그 값을 이용해서 처리하고 싶다. 게시판 테이블인 MP_BOARD에 기본키인 bno가 1씩 증가하는 시퀸스이다. (MP_BOARD_SEQ.NEXTVAL는 기본키 최대값에서 +1) //게시글 작성 SELECT MP_BOARD_SEQ.NEXTVAL FROM DUAL INSERT INTO MP_BOARD( BNO , TITLE , CONTENT , WRITER ) VALUES( #{bno} , #{title} , #{..

    오라클 시퀸스란?

    시퀸스란, 자동으로 순차적으로 증가하는 순번을 반환하는 데이터베이스 객체이다. 보통 PK값에 중복값을 방지하기위해 사용한다. 예를들어 게시판에 글이 하나 추가될때마다 글번호(PK)가 생겨야할때, 기존 글번호 중 가장 큰값에 1을 하는 로직을 넣어야하는데, 시퀸스를 사용하면 로직이 필요없이 DB에 글이 하나씩 생성될때마다 자동으로 +1을 시켜주어 매우 편리하다. --문법 CREATE SEQUENCE [시퀀스명] INCREMENT BY [증감숫자] --증감숫자가 양수면 증가 음수면 감소 디폴트는 1 START WITH [시작숫자] -- 시작숫자의 디폴트값은 증가일때 MINVALUE 감소일때 MAXVALUE NOMINVALUE OR MINVALUE [최솟값] -- NOMINVALUE : 디폴트값 설정, 증가일..

    MYBATIS에서 include문 사용법

    SELECT BNO, TITLE, CONTENT, WRITER, REGDATE FROM ( SELECT BNO, TITLE, CONTENT, WRITER, REGDATE, ROW_NUMBER() OVER(ORDER BY BNO DESC) AS RNUM FROM MP_BOARD WHERE 1=1 ) MP WHERE RNUM BETWEEN #{rowStart} AND #{rowEnd} ORDER BY BNO DESC SELECT COUNT(BNO) FROM MP_BOARD WHERE 1=1 AND BNO > 0 AND TITLE LIKE '%' || #{keyword} || '%' AND CONTENT LIKE '%' || #{keyword} || '%' AND WRITER LIKE '%' || #{keyw..

    페이징- 서브쿼리,ROW-NUMBER()를 이용한 쿼리작성

    SELECT BNO, TITLE, CONTENT, WRITER, REGDATE FROM ( SELECT BNO, TITLE, CONTENT, WRITER, REGDATE, ROW_NUMBER() OVER(ORDER BY BNO DESC) AS RNUM FROM MP_BOARD ) WHERE RNUM BETWEEN #{rowStart} AND #{rowEnd} ORDER BY BNO DESC 서브쿼리를 이용해서 페이징을 하는 부분의 쿼리이다. BNO(기본키) , 제목 , 내용 , 작성자 , 작성일 을 검색해오는 쿼리 SELECT BNO, TITLE, CONTENT, WRITER, REGDATE FROM 에서 다음부분의 ( SELECT BNO, TITLE, CONTENT, WRITER, REGDATE, RO..

    [MYBATIS]selectList와 selectOne

    스프링에서 게시판 목록구현과 게시판의 제목을 누르면 내용을 볼 수 있는 상세보기 기능을 구현하는데에 사용하는 selectList와 selectOne, List selectList(query_id) id에 대한 select문을 실행한 후 레코드를 List로 반환한다. List selectList(query_id, '조건') id에 대한 select문을 실행하면서 조건(쿼리문에서 사용할 인자)를 전달한다. selectOne(query_id) id에 대한 select문을 실행한 후 한개의 레코드를 지정한 타입으로 반환한다. selectOne(query_id, '조건') id에 대한 select문을 실행하면서 조건(쿼리문에서 사용할 인자)를 전달한다. selectOne 예제 (게시판 상세보기) boardMapp..

    오라클 계정만들기,sid 확인

    계정만들기 1.cmd 창에서 sqlplus "/as sysdba"라고 입력한다 2.create user 계정명 identified by 비밀번호 입력 2! 공통사용자 또는 롤 이름이 부적합 합니다가 나오면 계정명 앞에 C##을 붙여준다오라클 12c버전 이후로는 이렇게 네이밍 하도록 바뀜 3. grant connect, resource, dba to 계정명생성한 계정에 dba 권한 부여(관리자 권한) 4.sql plus에서 로그인해보면 계정이 생성된 것을 알 수 있다 sid 확인 1.오라클 데이타베이스명을 확인하는 방법 SELECT NAME, DB_UNIQUE_NAME FROM v$database; 2. 오라클 SID를 확인하는 방법 SELECT instance FROM v$thread; (스프링)JDBC..

    ORA-12514, TNS:listener does not currently know of service requested in connect descriptor 오류해결

    실행중인 프로세서를 둘러보는중, 키지도 않은 오라클이 메모리를 500MB씩 먹으면서 실행중이였던걸 발견하고 종료했다. 이게 문제였던건지 잘 되던 프로젝트를 RUN시키니 인덱스는 잘 나왔지만 데이터베이스를 사용하는 부분(LIST)으로 진입하니 갑자기 ORA-12514 오류가 생겼다. 재부팅을 해도 소용이 없다. 오라클 SQL로 직접 들어가서 로그인을 하려고하니 ORA-12514 오류가 오라클SQL상에서 아예 출력됨. 일단 방화벽 문제가 있을 수 있다고 해서 제어판 - 시스템 및 보안 - Windows Defender 방화벽 - 고급설정 - 인바운드규칙 - [새규칙..] 을 눌러서 포트- 특정로컬포트에 내가 사용하는 포트번호인 1521을 입력하고 재부팅 - 실패 작업관리자(ctrl+alt+delete) - ..