Skip to content

Commit 06aab7d

Browse files
authored
Merge pull request #4 from taichihub/03-my-asynchronous
20240909 非同期処理(JavaScript)
2 parents 0eac738 + f92b465 commit 06aab7d

File tree

9 files changed

+1655
-20
lines changed

9 files changed

+1655
-20
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#!/usr/bin/env node
2+
3+
import { createDatabase, run, all, close } from "../db_operations.js";
4+
5+
let db = await createDatabase(":memory:");
6+
console.log("メモリ内のSQLiteデータベースに接続しました。");
7+
8+
try {
9+
await run(
10+
db,
11+
"CREATE TABLE books (id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL UNIQUE)",
12+
);
13+
console.log("テーブルが作成されました。");
14+
15+
const title = "Node.js入門";
16+
try {
17+
const result = await run(db, "INSERT INTO books (title) VALUES (?)", [
18+
title,
19+
]);
20+
console.log(`行が追加されました。id: ${result.lastID}`);
21+
await run(db, "INSERT INTO books (title) VALUES (?)", [title]);
22+
} catch (err) {
23+
if (
24+
err instanceof Error &&
25+
err.code === "SQLITE_CONSTRAINT" &&
26+
err.message.includes("UNIQUE constraint failed")
27+
) {
28+
console.error(`エラーが発生しました: ${err.message}`);
29+
} else {
30+
throw err;
31+
}
32+
}
33+
34+
try {
35+
await all(db, "SELECT * FROM nonexistent_table WHERE id = ?", [-1]);
36+
} catch (err) {
37+
if (
38+
err instanceof Error &&
39+
err.code === "SQLITE_ERROR" &&
40+
err.message.includes("no such table")
41+
) {
42+
console.error(`エラーが発生しました: ${err.message}`);
43+
} else {
44+
throw err;
45+
}
46+
}
47+
48+
await run(db, "DROP TABLE books");
49+
console.log("テーブルが削除されました。");
50+
} finally {
51+
await close(db);
52+
console.log("データベース接続を閉じました。");
53+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#!/usr/bin/env node
2+
3+
import { createDatabase, run, all, close } from "../db_operations.js";
4+
5+
const db = await createDatabase(":memory:");
6+
console.log("メモリ内のSQLiteデータベースに接続しました。");
7+
8+
try {
9+
await run(
10+
db,
11+
"CREATE TABLE books (id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL UNIQUE)",
12+
);
13+
console.log("テーブルが作成されました。");
14+
15+
const result = await run(db, "INSERT INTO books (title) VALUES (?)", [
16+
"Node.js入門",
17+
]);
18+
console.log(`行が追加されました。id: ${result.lastID}`);
19+
20+
const rows = await all(db, "SELECT * FROM books");
21+
rows.forEach((row) => {
22+
console.log(`${row.id}: ${row.title}`);
23+
});
24+
25+
await run(db, "DROP TABLE books");
26+
console.log("テーブルが削除されました。");
27+
} finally {
28+
await close(db);
29+
console.log("データベース接続を閉じました。");
30+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#!/usr/bin/env node
2+
3+
import sqlite3 from "sqlite3";
4+
5+
const db = new sqlite3.Database(":memory:", () => {
6+
console.log("メモリ内のSQLiteデータベースに接続しました。");
7+
8+
db.run(
9+
"CREATE TABLE books (id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL UNIQUE)",
10+
() => {
11+
console.log("テーブルが作成されました。");
12+
13+
db.run(
14+
"INSERT INTO books (title) VALUES (?)",
15+
["Node.js入門"],
16+
function () {
17+
console.log(`行が追加されました。id: ${this.lastID}`);
18+
19+
db.run(
20+
"INSERT INTO books (title) VALUES (?)",
21+
["Node.js入門"],
22+
(err) => {
23+
if (err) {
24+
console.error(`エラーが発生しました: ${err.message}`);
25+
}
26+
27+
db.all("SELECT content FROM books", (err) => {
28+
if (err) {
29+
console.error(`エラーが発生しました: ${err.message}`);
30+
}
31+
32+
db.run("DROP TABLE books", () => {
33+
console.log("テーブルが削除されました。");
34+
35+
db.close(() => {
36+
console.log("データベース接続を閉じました。");
37+
});
38+
});
39+
});
40+
},
41+
);
42+
},
43+
);
44+
},
45+
);
46+
});
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#!/usr/bin/env node
2+
3+
import sqlite3 from "sqlite3";
4+
5+
const db = new sqlite3.Database(":memory:", () => {
6+
console.log("メモリ内のSQLiteデータベースに接続しました。");
7+
8+
db.run(
9+
"CREATE TABLE books (id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL UNIQUE)",
10+
() => {
11+
console.log("テーブルが作成されました。");
12+
13+
db.run(
14+
"INSERT INTO books (title) VALUES (?)",
15+
["Node.js入門"],
16+
function () {
17+
console.log(`行が追加されました。id: ${this.lastID}`);
18+
19+
db.all("SELECT * FROM books", (_, rows) => {
20+
rows.forEach((row) => {
21+
console.log(`${row.id}: ${row.title}`);
22+
});
23+
24+
db.run("DROP TABLE books", () => {
25+
console.log("テーブルが削除されました。");
26+
27+
db.close(() => {
28+
console.log("データベース接続を閉じました。");
29+
});
30+
});
31+
});
32+
},
33+
);
34+
},
35+
);
36+
});

03.asynchronous/db_operations.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import sqlite3 from "sqlite3";
2+
3+
export function createDatabase(filename) {
4+
return new Promise((resolve, reject) => {
5+
const db = new sqlite3.Database(filename, (err) => {
6+
if (err) {
7+
reject(err);
8+
} else {
9+
resolve(db);
10+
}
11+
});
12+
});
13+
}
14+
15+
export function run(db, sql, params) {
16+
return new Promise((resolve, reject) => {
17+
db.run(sql, params, function (err) {
18+
if (err) {
19+
reject(err);
20+
} else {
21+
resolve(this);
22+
}
23+
});
24+
});
25+
}
26+
27+
export function all(db, sql, params) {
28+
return new Promise((resolve, reject) => {
29+
db.all(sql, params, (err, rows) => {
30+
if (err) {
31+
reject(err);
32+
} else {
33+
resolve(rows);
34+
}
35+
});
36+
});
37+
}
38+
39+
export function close(db) {
40+
return new Promise((resolve, reject) => {
41+
db.close((err) => {
42+
if (err) {
43+
reject(err);
44+
} else {
45+
resolve();
46+
}
47+
});
48+
});
49+
}

0 commit comments

Comments
 (0)