前回のSQLiteを使ってみようでなんとなくわかったので、Node.JSでsqlite3をつかって簡易掲示板のようなものをつくります。今回は準備編です。
とりあえず、名前と投稿文のふたつがあれば掲示板もどきはつくれます。
Contents
テーブルを作成してデータを新規登録する
コマンドラインからtable_posts_test1というテーブルを作成します。
1 2 |
sqlite3 test.db create table table_posts_test1(id integer primary key autoincrement, name text, body text); |
データを新規登録する
ためしになにか登録してみます。
1 2 |
insert into table_posts_test1(name, body) values('名無しさん', 'これは実験の投稿です'); insert into table_posts_test1(name, body) values('名無しのゴンベ', 'これも実験の投稿です'); |
実際にデータが追加されているか確認します。
1 |
select * from table_posts_test1; |
すると
出力結果
1 2 |
1|名無しさん|これは実験の投稿です 2|名無しのゴンベ|これも実験の投稿です |
登録されていることが確認できます。
投稿時刻と更新時刻も登録できるようにする
あと投稿時刻と更新時刻も表示できるようにしてしまいましょう。新しいテーブル table_posts_test2をつくります。
1 |
create table table_posts_test2(id integer primary key autoincrement, name text, body text, createtime datetime, updatetime datetime); |
現在時刻を取得して、これを日本時間に変換しなければなりません。UTCと日本時間は9時間のズレがあるので、datetime(‘now’, ‘+9 hours’)とやれば取得できます。
1 2 |
insert into table_posts_test2(name, body, createtime, updatetime) values('名無しさん', 'これは時刻付きの実験の投稿です', datetime('now', '+9 hours'), datetime('now', '+9 hours')); insert into table_posts_test2(name, body, createtime, updatetime) values('二人目の名無しさん', 'これは時刻付きの実験の投稿その2です', datetime('now', '+9 hours'), datetime('now', '+9 hours')); |
コマンドプロンプトで select * from table_posts_test2;を実行してデータが存在するか確認してみましょう。
出力結果
1 2 |
1|名無しさん|これは時刻付きの実験の投稿です|2021-09-26 04:00:13|2021-09-26 04:00:13 2|二人目の名無しさん|これは時刻付きの実験の投稿その2です|2021-09-26 04:00:38|2021-09-26 04:00:38 |
時刻も日本時間で登録されています。
データを更新する
また登録したデータを更新するには、以下のようにします。idが1のものを探して内容を更新しています。またidは1から始まります。
1 2 3 |
update table_posts_test2 set name = '更新された名無しさん' where id = 1; update table_posts_test2 set body = '更新時刻だけ変更します' where id = 1; update table_posts_test2 set updatetime = datetime('now', '+9 hours') where id = 1; |
これでもう一度、select * from table_posts_test2;を実行すると
出力結果
1 2 |
1|更新された名無しさん|更新時刻だけ変更します|2021-09-26 04:00:13|2021-09-26 04:11:30 2|二人目の名無しさん|これは時刻付きの実験の投稿その2です|2021-09-26 04:00:38|2021-09-26 04:00:38 |
内容が変更されていることがわかります。
Node.jsでsqlite3を使う
ではコマンドプロンプトではなくNode.jsをつかってデータを追加してみましょう。
まず以下のコマンドで新しいテーブルをつくります。
1 |
create table table_posts(id integer primary key autoincrement, name text, body text, createtime datetime, updatetime datetime); |
Node Package Managerでsqlite3をインストール
sqliteは一旦終了して以下のコマンドを実行します。
1 |
npm install sqlite3 |
データを新規登録する
index.jsというファイルを作成して、そのなかに以下を実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
const sqlite3 = require("sqlite3"); const db = new sqlite3.Database("./test.db"); db.run("insert into table_posts(name, body, createtime, updatetime) values(?,?,datetime('now', '+9 hours'),datetime('now', '+9 hours'))", '山田', '私の名前は山田です'); db.run("insert into table_posts(name, body, createtime, updatetime) values(?,?,datetime('now', '+9 hours'),datetime('now', '+9 hours'))", '田中', '私の名前は田中です'); db.all("select * from table_posts", (error, rows) => { rows.forEach(post => { console.log(post.name); console.log(post.body); console.log('初回 ' + createtime); console.log('最終更新 ' + updatetime); console.log(''); }); }); db.close(); |
実行してみると以下のように表示されます。
出力結果
1 2 3 4 5 6 7 8 9 |
田中 私の名前は田中です 初回 2021-09-26 04:39:14 最終更新 2021-09-26 04:39:14 山田 私の名前は山田です 初回 2021-09-26 04:39:14 最終更新 2021-09-26 04:39:14 |
余談ながら以下はダメです。Node.jsが「datetime(‘now’, ‘+9 hours’)って何だよ」とエラーを出します。
1 2 3 4 5 6 |
db.run( "insert into table_posts(name, body, createtime, updatetime) values(?,?,?,?)", '山田', '私の名前は山田です', datetime('now', '+9 hours'), datetime('now', '+9 hours')); |
データを更新する
更新するのであれば
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
const sqlite3 = require("sqlite3"); const db = new sqlite3.Database("./test.db"); db.run("update table_posts set body = ? where id = ?", "私の名前は山田でございます", 2); db.run("update table_posts set updatetime = datetime('now', '+9 hours') where id = ?", 2); db.all("select * from table_posts", (error, rows) => { rows.forEach(post => { console.log(post.name); console.log(post.body); console.log('初回 ' + createtime); console.log('最終更新 ' + updatetime); console.log(''); }); }); db.close(); |
実行してみると山田さんが丁寧な自己紹介をするようになりました。
出力結果
1 2 3 4 5 6 7 8 9 |
田中 私の名前は田中です 初回 2021-09-26 04:39:14 最終更新 2021-09-26 04:39:14 山田 私の名前は山田でございます 初回 2021-09-26 04:39:14 最終更新 2021-09-26 04:54:56 |
データを削除する
最後に削除する場合ですが、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
const sqlite3 = require("sqlite3"); const db = new sqlite3.Database("./test.db"); db.run("delete from table_posts where id = 2"); db.all("select * from table_posts", (error, rows) => { rows.forEach(post => { console.log(post.name); console.log(post.body); console.log('初回 ' + post.createtime); console.log('最終更新 ' + post.updatetime); console.log(''); }); }); db.close(); |
実行してみると山田さんがいなくなったことがわかります。
出力結果
1 2 3 4 |
田中 私の名前は田中です 初回 2021-09-26 04:39:14 最終更新 2021-09-26 04:39:14 |