[D] D언어로 SQLite3 사용하기 D



SQLite3를 D언어에서 사용하기 위한 제 3자 라이브러리가 여러개 있긴 합니다만.
실제로 쓸 수 있을 지 의심이 들 정도로 개발이 중단된 지 오래된 것들도 있고 해서 아무 라이브러리나 가져다 쓰기 좀 그렇죠.
D언어가 나온 지 좀 되긴 했는데 중간에 1.x버전과 2.x버전으로 나뉘었고, 실제 쓸 수 있는 2.x의 릴리즈 기간으로만 봐선 짧은 역사라고 할 수 있겠네요.
1.x버전으로 작성한 라이브러리는 dsoucre.org에 저장되어 있고 , 지금의 D(2.x 버전) 라이브러리는 code.dlang.org에 게시되고 있습니다.

2020년 3월 기준으로 가장 최근 릴리즈 이력이 1년 미만인 라이브러리 중 d2sqlite3를 소개 합니다.
D언어 자체가 윈도우보다는 맥과 리눅스에 좀 더 신경을 많이 쓰기 때문에 라이브러리 생태계도 비슷하게 흘러갑니다.
리눅스는 apt나 pcman, yum 커맨드 몇번 치면 해결될 일이 윈도우에서는 어렵거나 많이 번거롭거나...
위 라이브러리는 다행이 윈도우에 쓰기에도 적합하네요. 아래의 DUB 설정 가이드 내용을 참고해보면 됩니다.

윈도우의 경우 subConfigurations에 "d2sqlite3":"all-included" 쌍을 추가해주고,
레퍼지토리 내 lib에서 64비트 빌드는 win64, 32비트 빌드는 win32 디렉토리 내 def, lib, dll파일을 본인의 DUB 프로젝트 디렉토리 최상단에 복사해줍니다.

샘플 코드는 아래와 같습니다.

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import d2sqlite3;
import std.stdio;

void main(){
// Open a database in memory.
auto db = Database("test.db");
db.run(
"DROP TABLE IF EXISTS person;
CREATE TABLE person(
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
score FLOAT
)");


// INSERT
Statement stat = db.prepare(
"INSERT INTO person (name, score)
VALUES (:name, :score)"
);
stat.bind(":name", "Jhon");
stat.bind(2, 95);

writef("Before: %d\n", db.totalChanges); // 변경 전
stat.execute();
writef("After: %d\n", db.totalChanges); // 변경 후

// 풀스캔
ResultRange results = db.execute("SELECT * FROM person");
foreach (Row row; results)
{
// 컬럼 인덱스가 0인 id 가져오기
auto id = row.peek!long(0);
writeln(id);

// 이름가져오기
auto name = row["name"].as!string;
writeln(name);
}
}

생성자로 넘겨주는 문자열이 :memory:인 경우 메모리로(당연히 프로그램 종료 시 날아감) 작업하고,
파일명.확장자 형태로 넘겨주면 작업 내용은 파일로 저장 됩니다.

샘플 프로젝트: d-sqlite3.7z

1 2 3 4 5 6 7 8 9 10 다음