-  SQLite DB Browser 에러 -


컴퓨터를 포맷해야하는 경우가 생겨


포맷을 하고나서 다시 환경을 잡는 도중에


SQLite DB Browser를 새롭게 설치하여 실행하는데 처음보는 에러가 발생했다

(같은 버전 3.11.2임에도 불구하고 예전에 설치한거에선 이러한 에러가 발생하지 않았다.)


사실 큰 이슈사항 없는 에러이다.

(그냥 일시적인 에러라 생각된다.)



기능 자체는 사용할 수 있는것으로 보아 그리 심각한 에러는 아닌듯 하지만


실행 시킬때마다 자꾸 떠서 거슬린다.


딱히 무슨 해결방안이 있는건 아니지만


 신기하게도 32bit의 DB Browser을 사용하면 해당 에러가 발생하지 않고 깔끔하게 실행된다.

(물론 모든 기능도 정상으로 돌아간다 PC는 64bit 임에도)


SQLite DB Browser 설치 )


누군가 해결방안을 알려주면 좋겠지만 아무리 구글링해도 안나온다.


결국 그냥 저 메시지만 무시하고 사용하거나


32bit용을 깔아서 사용하면된다 

(나는 언젠가 해결될 날을 기다리며 당연히 무시하면서 사용한다.)


반응형
  1. 2020.05.21 16:11

    비밀댓글입니다



- INSERT OR REPLACE INTO 구문 -


테이블에 데이터가 이미 있으면 업데이트 하고, 없으면 값을 넣어줘야 하는 경우가 있는데


오라클에서는 MERGE INTO 구문을 지원해 주기 때문에 편하지만 


SQLite지원을 안해줘서 없는줄 알았는데


찾아보니 비스무리한게 하나 있어 정리해둔다.


바로 


INSERT OR REPLACE INTO 구문이다.


해당 구문에 대해 알아보자


INSERT OR REPLACE INTO [TABLE]

( COLUMN1, COLUMN2, COLUMN3, ...)

VALUES

( VALUE1, VALUE2, VALUE3, ...)

...     -- WHERE 기타 등등


구문 자체는 기존 INSERT INTO 문과 동일하되 중간에 OR REPLACE가 추가된것이다.


예)


CREATE TABLE MINE(

id VARCHAR(10) PRIMARY KEY,

name VARCHAR(10),

age VARCHAR(5),

salary NUMBER

)


간단하게 MINE 이라는 테이블이 있다고 가정하자.


이 테이블에 이제 값을 넣어보자


INSERT INTO MINE VALUES ("CD2", "HAN", "20", 20000);


이러한 값을 넣었다 치고 


다시한번 값을 넣어보자


INSERT INTO MINE  (id, name, age, salary

VALUES ("CD2", "KIM", "27", 512345);


일반적으로 이런식으로 같은 PK 값으로 값을 넣으면 


무결성 제약조건 에러가 발생한다


이미 고유키를 가진 값이 존재하는데 같은것을 또 넣을려해서 생기는 에러이다.


그럼 아래와 같은 경우는 어떨까?


INSERT OR REPLACE INTO MINE (id, name, age, salary)

VALUES ("CD2", "KIM", "27", 512345);


INSERT OR REPLACE INTO MINE (id, name, age, salary)

VALUES ("CD3", "HO", "37", 5245);


이런식으로 사용하게 되면 


값이 있어도 무결성 제약조건 에러가 발생하지 않고


해당 pk 값을 가진 데이터를 update 처리를 진행해주고 

(정확히는 update가 아니다. 아래에서 설명)


값이 없으면 insert 처리를 해준다.


<데이터 결과값>


id 

name 

age 

salary

CD2

KIM 

27 

512345 

CD3

HO 

37 

5245 





여기서 하나 주의할 점있는데


정확하게는 REPLACE INTO 라는 구문이


UPDATE 구문이 아니라는 점이다.


REPLACE INTO는 무결성 제약조건에 걸려버리면


중복되는 레코드를 지워버리고 새로운 레코드를 삽입해 버리기때문에


만약 자동 증가되는 PK가 있을경우 기존의 레코드가 삭제되어버리는 불상사가 발생하니


자동증가되는 고유값 (AUTO_INCREMENT) 이 없을때 사용하면 좋다.



 DUPLICATE ON KEY UPDATE 라는 구문이 있는데


해당 구문은 SQLite에서는 지원을 안하는것으로 파악된다.


반응형



- SQLite IFNULL -


SQLite 에서는 NULL값일때 처리하고 싶으면 IFNULL을 사용하는게 좋다.


이게 오라클같은곳에서는 ISNULL, NVL 등을 사용하지만


SQLite 는 mySql 과 마찬가지로 IFNULL을 사용해주어야 한다.


사용법은 동일하기에 어떤걸 쓰느냐만 알면 쉽게 사용할 수 있다.


SELECT IFNULL(MAX(SEQ),0) FROM testSql


SELECT IFNULL(A,B) FROM TABLE


A값이 NULL이면 B 값을 SELECT 해옵니다.


반응형




- SQLite 자료형 -



SQLite 를 다루던 도중 데이터타입이 생각보다 많이 다르다는것을 접하여


해당 데이터타입을 기록해 두자.


SQLite라는건 일반적으로 안드로이드를 개발할때 사용되는 로컬 DB 이다.


오라클을 쓰다 SQLite를 접하게 되면 명칭부터 좀 다른 데이터타입을 접하게 되는데


까먹지 않기위해 기록해두자..


1

NULL

  말 그대로 null 값이다.

2

INTEGER 

  1,2,3,4,6,8 bytes 의 정수 값이다.

3

REAL 

  8bytes의 부동소수점 값이다.

4

TEXT 

  UTF-8, UTF-16BE, UTF-16LE인코딩의 문자열이다.

5

BLOB 

  입력된 그대로 저장된다. (바이너리 파일 등, 일반적으로 이미지, 비디오, MP3와 같은 대형 멀티미디어 파일을 데이터베이스에 직접 저장하는 용도로 사용)


좀 더 자세한건

(https://www.tutorialspoint.com/sqlite/sqlite_data_types.htm)


여기에 기록되어있다.


추가적으로 해당 사이트에 팁 같은게 존재하는데


SQLite에는 Date 타입과 Boolean 타입이 존재하지 않기때문에 하나의 방법을 설명해주고 있다.


Boolean 타입 : Integer(정수)로 0(거짓)1(참)구별된다.


Date, Time 타입

- TEXT : YYYY-MM-DD HH:MM:SS.SSS 형태로 저장

- REAL : 율리우스력을 기준으로 하는 정보 저장 (ex 그리니치 정오 이후 일수??)

- INTEGER : UTC타입으로 저장


반응형

안드로이드 작업을 하다보면 DB를 직접 눈으로 확인하고 싶은데

어떻게 할지 고민하는 경우가 많은데

 

이럴때 쓰는게 DB Browser for SQLite(SQLite Browser) 툴이다.

 

.db 파일을 SQLite Browser 툴을 이용하여 확인이 가능하다

 

다운로드 및 설치에 대해 알아보자

 

https://sqlitebrowser.org/dl/

해당 사이트로 들어가

DB Browser for SQLite - Standard installer for 64-bit Windows

클릭해주자



위에 클릭을 했으면 설치파일이 다운로드 되었을것이다.

DB.Browser.for.SQLite-3.11.2-win64.msi

 

이제 설치를 진행해보자

Next를 누른다.



다음으로 넘어가 기본적으로 체크를 해주고

Next를 눌러주자



이부분은 솔직히 잘 모르겠는데

SQLiteDesktop체크해주고

Next를 눌러주었다.



다음으로 넘어가면

설치 경로를 지정하는곳이다

Browse... 을 눌러서 원하는 경로를 지정해주고

Next를 눌러주자



그리고 Install을 눌러 설치를 진행하자



설치가 진행중이다...



설치가 완료되었다 뜨고

Finish를 눌러서 닫아주자



이제 바탕화면에 보면 DB Browser(SQLite) 파일이 하나 보일텐데

그것을 실행시켜주어 사용하면 된다.

 

사용법은 그냥 SQLite로 이루어진 db 파일을 올려놓거나(열기)

거기서 이제 테이블을 수정 컬럼 수정 등의 기능을 수행할 수 있다.

 

보통 Android 를 개발할때 나는 꼭 함께 사용한다.


반응형