2009-10-23 4 views
0

Sqlite 백엔드가있는 Tcl TK 응용 프로그램이 있습니다. 문자열 데이터를 삽입, 조작 및 읽는 구문을 꽤 잘 알고 있습니다. 그러나, 나는 사진이나 파일을 Tcl로 Sqlite에 저장하는 방법을 이해하지 못한다.Tcl을 사용하여 Sqlite에 BLOB 데이터를 저장하는 방법

Sqlite에서 BLOB 데이터를 보유하는 열을 만들어야한다는 것을 알고 있습니다. 나는 Tcl 측에서 무엇을해야할지 모른다. 누구든지이 작업을 수행하는 방법을 알고 있거나 나에게 제안하기 좋은 참조를 가지고 있다면 정말 감사 할 것입니다.

당신이 원하는,

Damion incrblob 명령과 같은

답변

3

내 코드에서는 기본적으로 파일을 바이너리로 열고 Tcl 변수에 내용을로드하고 SQLite db에 저장합니다. 이것은 약속 같은데 - 그래서,

+0

감사합니다 제프 ...이 같은 ... 분명히

# load the file's contents set fileID [open $file RDONLY] fconfigure $fileID -translation binary set content [read $fileID} close $fileID # store the data in a blob field of the db $db eval {INSERT OR REPLACE INTO files (content) VALUES ($content)} 

, 당신은 맛 시즌에 할 것입니다, 당신은 테이블에 아마 추가 열을 포함 할 것입니다. 변수 $ 파일을 문서로 설정하는 방법은 무엇입니까? 나는 당신의 코드가 $ file을 받아서 sqlite에 삽입 할 수 있도록 이진 형식으로 바꾼다는 것을 이해한다. 그러나 문서 (파일, pdf, 텍스트 등)는 $ 파일로 인식되거나 $ 파일로 어떻게 설정됩니까? 감사합니다, DFM – DFM

+0

Damion, 내 위의 코드에서 는 "$ 파일은"당신이 DB에 저장할 파일의 * 이름 *을 유지하는 변수입니다. 따라서 파일이 실제로 무엇인지는 중요하지 않습니다. "file"변수에 파일 이름 만 지정하면됩니다. 그 질문에 대답합니까? –

0

감사 : http://sqlite.org/tclsqlite.html#incrblob

은 "incrblob"방법

이 방법은 TCL 채널을 오픈 수 데이터베이스의 기존 BLOB 인 을 읽고 쓰는 데 사용하십시오. 구문은 다음과 같다 :

dbcmd incrblob ?-readonly?? ?DB? TABLE COLUMN ROWID 

명령은 읽거나 BLOB에 쓰기위한 새로운 TCL 채널 를 반환합니다. 기본 sqlite3_blob_open() C 언어 인터페이스를 사용하여 채널을 엽니 다. TCL의 닫기 명령을 사용하여 채널을 닫습니다.

관련 문제