반응형

SQLite 7

SQLite 는 ALTER TABLE MODIFY 가 없단다.

stackoverflow 에서 확인한 내용이다. http://stackoverflow.com/questions/4007014/alter-column-in-sqlite 충격이다... 그래서 이전에 썼던 삽질에서 ALTER TABLE CHANGE 가 안먹었던걸지도. ( MODIFY 였나?? )어쨌던 stackoverflow의 답글들을 보면, ( Alter 에서 ) Add 만 있고 change 나 modify 가 없으니까, 만약 ALTER TABLE MODIFY 를 하려면1. 테이블 백업 2. 테이블 스키마를 변경된 Create 로 재선언 3. 백업(덤프) 했던 테이블 데이터를 새 테이블에 다시 복사.의 뻘짓을 하라고 한다. 그냥 답이 없다고 써있다. 일단, command line 말고 sqlite brows..

프로그램 2016.09.04

SQLite 에서 DateTime 을 사용하려면, TEXT 대신 Unixtime 사용을 추천한다

말 그대로다. 이건 http://ckbcorp.tistory.com/1027 하고도 이어지는 주제다. 너님이 SQLite 에서 DateTime 을 이용할 때 데이터 타입을 뭘 쓸 거냐?TEXT 쓰겠지? 왜냐면 SQLite 는 데이터 타입으로 DateTime 를 지원하지 않으니까.그런데, 내 경험으로는, TEXT 보다 INTEGER 나 NUMERIC 이 명확하다. 이야기하기가 조금 까다로운데, 최대한 알기쉽게 가보자. 1. SQLite 는 DateType 으로 DateTime 이 없다. 2. 그런데 쿼리로 기간 관련 검색을 하려면 , 보통 'yyyy-MM-dd HH:mm:ss' 로 검색을 할 거다.3. 기간 검색이라는 게, 결국은 문자열 검색이니, DateTime 이 없는 SQLite는 당연히 타입으로 T..

프로그램 2016.06.23

SQLite Manager 프로그램을 사용할 경우, Modify 메뉴는 ALTER TABLE 과 다르게 동작한다.

이거때문에 30분 썼다. 제기랄...SQLite 를 쓸 때, 처음 설계와 달라져서 TABLE 에 FIELD 를 추가/변경해야 한다면, 두 가지 방법으로 할 거다. 1. SQLITE Manager 프로그램을 열어서 어플리케이션으로 테이블 조작.2. ALTER TABLE 사용.나는 별 생각없이 1.번으로 작업했는데, 이게 좀 문제가 있었다. 상황 설명은 아래와 같다.11. 추가하려는 필드는 filename, datetime 의 2개12. 필드 속성은 filename = varchar(256), datetime = DateTime13. 그런데, 알다시피 SQLite 는 지원하는 DateType 이 5가지 밖에 없다. INTEGER, TEXT, REAL, NUMERIC, BLOB.( 자세한 건 아래의 링크 들어..

프로그램 2016.06.21

SQLite 에서, insert() 의 반환값은 lastInsertId() 와 같은 역할을 한다.

결론부터 말하면 그러하다. 자세한건 아래를 참고. https://www.sqlite.org/c3ref/last_insert_rowid.html 상황 설명을 하자면 이러하다.1. 안드로이드에서 SQLite 를 쓰는데, 2. insert 를 한 후에 last inserted id 가 필요했다. 많이 있는 패턴이잖아?3. 그런데, sqlite 는 lastInsertedID() 가 없...어서 만들어서 써야됨. 그런데, lastInsertedID() 를 뒤져보다 보니, sqlite 소스에서, db.insert() 후의 리턴값을 바로 lastInsertedID() 처럼 사용하는 코드를 봤다. 예를 들면 이런식. public int DBLayerFoo1(){....return db.insert();....} pub..

안드로이드에서 SQLite 를 사용할 때, SQLiteOpenHelper 의 onCreate()는, 앱 설치할 때 최초 한번만 실행된다.

[ 새로운 짤방이다. 신선하다. ] 한두시간 정도 별별 로그를 다 찍고 삽질을 하다가, 인터넷 찾아보고 알게 된 거다.그러니까... 보통 안드로이드에서 객체가 생성될때는, Constructor 나 onCreate() 를 거치잖아.그런데 SqLiteOpenHelper() 는 onCreate() 에 아무리 로그를 박아 넣어 봐도, 안 거치는 거다.이게 웃긴게... 혹시나 해서 생성자( Constructor ) 에 박아 넣은 로그는 잘 나오는데, onCreate() 에 넣은거만 안 나왔다. 맨첨엔 내가 무슨 코드를 잘 못 짠 줄 알고 엄청 고민했는데, 뭔가 이상해서 검토해 보니, onCreate() 가 실행되는 조건은 1. getWritableDatabase() 혹은 getWritableDatabase() 가..

안드로이드 + sqlite 에서, long 은 integer 로 동작한다.

그렇다네? 동적으로 byte를 할당하나 보다. 자세한건 언제나 진리인 stackoverflow 를 참고하자 -> http://stackoverflow.com/questions/8672473/is-there-type-long-in-android-sql 원래 하려고 했던게, 1. datetime 을 DB로 다뤄야 하는데2. sqlite 사용.3. sqlite 는 text base 이기 때문에 ASCII 타입 이외의 데이터가 좀 애매하지??4. datetime -> unixtime 으로 변경해 다루기로 결정.5. unixtime이 long 이 걸린다. 6. 검색7. stackoverflow 님께서 답변. 그러하다.

반응형