質問編集履歴
10
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -4,7 +4,8 @@
|
|
4
4
|
**疑問点**
|
5
5
|
- INSERT INTO lorem VALUES (1, 'b1'), (2, 'b2'), (2, 'b3')のような複数レコードを一括で挿入したいとき、上の例では、'(?),'(?)','(?)'ですが、
|
6
6
|
'(?,?),'(?,?)','(?,?)'に対応するにはどうすればいいのでしょうか?
|
7
|
+
|
7
|
-
|
8
|
+
**例**
|
8
9
|
```javascript
|
9
10
|
let languages = ['C++', 'Python', 'Java', 'C#', 'Go'];
|
10
11
|
|
@@ -24,6 +25,7 @@
|
|
24
25
|
db.close();
|
25
26
|
```
|
26
27
|
|
28
|
+
**上の例をみて複数に対応してみようとしたもの**
|
27
29
|
```javascript
|
28
30
|
let languages = [[0, 'C++'], [1, 'Python'], [2, 'Java'], [3, 'C#'], [4, 'Go']];
|
29
31
|
ht = "(";
|
9
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -2,88 +2,47 @@
|
|
2
2
|
SQLite勉強中ですので、基本的なことかもしれないのですが、よろしくお願いいたします。
|
3
3
|
|
4
4
|
**疑問点**
|
5
|
-
- INSERT INTO lorem VALUES (1, 'b1'), (2, 'b2'), (2, 'b3')のような複数レコードを一括で挿入したいとき、
|
5
|
+
- INSERT INTO lorem VALUES (1, 'b1'), (2, 'b2'), (2, 'b3')のような複数レコードを一括で挿入したいとき、上の例では、'(?),'(?)','(?)'ですが、
|
6
|
+
'(?,?),'(?,?)','(?,?)'に対応するにはどうすればいいのでしょうか?
|
6
7
|
|
8
|
+
```javascript
|
9
|
+
let languages = ['C++', 'Python', 'Java', 'C#', 'Go'];
|
10
|
+
|
11
|
+
// construct the insert statement with multiple placeholders
|
12
|
+
// based on the number of rows
|
13
|
+
let placeholders = languages.map((language) => '(?)').join(',');
|
14
|
+
let sql = 'INSERT INTO langs(name) VALUES ' + placeholders;
|
7
15
|
|
8
|
-
|
9
|
-
``` javascript
|
10
|
-
const sqlite3 = require('sqlite3');
|
11
|
-
let db = null;
|
12
|
-
|
13
|
-
Test();
|
14
|
-
|
15
|
-
|
16
|
+
db.run(sql, languages, function(err) {
|
16
|
-
// SQL処理
|
17
|
-
db = await createDb();
|
18
|
-
await run("CREATE TABLE IF NOT EXISTS lorem (id INT, info TEXT)");
|
19
|
-
|
20
|
-
// 10万件のデータ
|
21
|
-
|
17
|
+
if (err) {
|
22
|
-
|
18
|
+
return console.error(err.message);
|
23
|
-
array.push([i, "Ipsum " + i]);
|
24
19
|
}
|
20
|
+
console.log(`Rows inserted ${this.changes}`);
|
21
|
+
});
|
22
|
+
|
23
|
+
// close the database connection
|
24
|
+
db.close();
|
25
|
+
```
|
25
26
|
|
26
|
-
|
27
|
+
```javascript
|
27
|
-
|
28
|
+
let languages = [[0, 'C++'], [1, 'Python'], [2, 'Java'], [3, 'C#'], [4, 'Go']];
|
28
|
-
|
29
|
-
|
29
|
+
ht = "(";
|
30
|
-
for (let i = 0, end=
|
30
|
+
for (let i = 0, end = languages [0].length; i < end; i++) {
|
31
|
-
|
31
|
+
if(i === end-1) ht += "?)";
|
32
|
-
|
32
|
+
else ht += "?,";
|
33
33
|
}
|
34
|
-
s = s.slice(0, -2);
|
35
|
-
await run("INSERT INTO lorem VALUES " + s);
|
36
34
|
|
37
|
-
|
35
|
+
// インサートされない
|
36
|
+
let placeholders = languages .map((languages) => ht).join(',');
|
37
|
+
let sql = 'INSERT INTO lorem VALUES ' + placeholders;
|
38
|
+
db.run(sql, languages, function(err) {
|
38
|
-
|
39
|
+
if (err) {
|
40
|
+
return console.error(err.message);
|
39
|
-
}
|
41
|
+
}
|
42
|
+
console.log(`Rows inserted ${this.changes}`);
|
43
|
+
});
|
44
|
+
|
45
|
+
// close the database connection
|
46
|
+
db.close();
|
40
47
|
|
41
|
-
// 関数
|
42
|
-
function createDb() {
|
43
|
-
return new Promise((resolve, reject) => {
|
44
|
-
let database = new sqlite3.Database('chain.db', function(err){
|
45
|
-
if(err){
|
46
|
-
return reject(err);
|
47
|
-
}
|
48
|
-
return resolve(database);
|
49
|
-
});
|
50
|
-
})
|
51
|
-
}
|
52
|
-
|
53
|
-
function closeDb() {
|
54
|
-
return new Promise((resolve, reject) => {
|
55
|
-
db.close(function(err){
|
56
|
-
if(err){
|
57
|
-
return reject(err);
|
58
|
-
}
|
59
|
-
return resolve(true);
|
60
|
-
});
|
61
|
-
})
|
62
|
-
}
|
63
|
-
|
64
|
-
function run(sql, param = []) {
|
65
|
-
return new Promise((resolve, reject) => {
|
66
|
-
db.run(sql, param, function(err){
|
67
|
-
if(err){
|
68
|
-
return reject(err);
|
69
|
-
}
|
70
|
-
return resolve(true);
|
71
|
-
});
|
72
|
-
})
|
73
|
-
}
|
74
|
-
|
75
|
-
function insert(sql, array) {
|
76
|
-
return new Promise((resolve, reject) => {
|
77
|
-
let stmt = db.prepare(sql, function(err){
|
78
|
-
if(err){
|
79
|
-
return reject(err);
|
80
|
-
}
|
81
|
-
for (let i = 0, end = array.length; i < end; i++) {
|
82
|
-
stmt.run.apply(this, array[i]);
|
83
|
-
}
|
84
|
-
stmt.finalize();
|
85
|
-
return resolve(true);
|
86
|
-
});
|
87
|
-
});
|
88
|
-
}
|
89
48
|
```
|
8
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,11 +1,7 @@
|
|
1
|
-
Node.jsでSQLite3を実行してみているのですが、
|
1
|
+
Node.jsでSQLite3を実行してみているのですが、疑問点があります。
|
2
2
|
SQLite勉強中ですので、基本的なことかもしれないのですが、よろしくお願いいたします。
|
3
3
|
|
4
4
|
**疑問点**
|
5
|
-
- insert後、dbをクローズするとdbファイルに書き込みが始まるのですが、そういうものでしょうか?
|
6
|
-
insert関数後に反映されるものではないのですか?
|
7
|
-
※実際動かすと、close後に反映されているのでそうなのだろうと思いますが確認させてください。
|
8
|
-
|
9
5
|
- INSERT INTO lorem VALUES (1, 'b1'), (2, 'b2'), (2, 'b3')のような複数レコードを一括で挿入したいとき、現在の文字列を作成するのではなく、もっとすっきり書く方法はあるでしょうか?[参考](https://www.gesource.jp/weblog/?p=6398)
|
10
6
|
|
11
7
|
|
7
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -6,18 +6,10 @@
|
|
6
6
|
insert関数後に反映されるものではないのですか?
|
7
7
|
※実際動かすと、close後に反映されているのでそうなのだろうと思いますが確認させてください。
|
8
8
|
|
9
|
-
- 1万個のデータをのinsertするととても遅いです。もっとはやい方法はありますか?
|
10
|
-
5分以上たっても終わりません。
|
11
|
-
|
9
|
+
- INSERT INTO lorem VALUES (1, 'b1'), (2, 'b2'), (2, 'b3')のような複数レコードを一括で挿入したいとき、現在の文字列を作成するのではなく、もっとすっきり書く方法はあるでしょうか?[参考](https://www.gesource.jp/weblog/?p=6398)
|
12
|
-
もっとすっきり書く方法はあるでしょうか?**
|
13
10
|
|
14
11
|
|
15
12
|
|
16
|
-
** 1万個のデータをのinsertするととても遅い件について考えたこと**
|
17
|
-
1万個のinsertを順次実行しているため遅い?
|
18
|
-
しかしデータベースというのは大きなデータを扱うのが普通?なのにこんなに遅くていいのだろうか。
|
19
|
-
|
20
|
-
|
21
13
|
``` javascript
|
22
14
|
const sqlite3 = require('sqlite3');
|
23
15
|
let db = null;
|
@@ -29,9 +21,9 @@
|
|
29
21
|
db = await createDb();
|
30
22
|
await run("CREATE TABLE IF NOT EXISTS lorem (id INT, info TEXT)");
|
31
23
|
|
32
|
-
//
|
24
|
+
// 10万件のデータ
|
33
25
|
let array = [];
|
34
|
-
for (let i = 0; i <
|
26
|
+
for (let i = 0; i < 1000000; i++) {
|
35
27
|
array.push([i, "Ipsum " + i]);
|
36
28
|
}
|
37
29
|
|
6
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -8,6 +8,9 @@
|
|
8
8
|
|
9
9
|
- 1万個のデータをのinsertするととても遅いです。もっとはやい方法はありますか?
|
10
10
|
5分以上たっても終わりません。
|
11
|
+
→ **自己解決しました。[参考](https://www.gesource.jp/weblog/?p=6398)、
|
12
|
+
もっとすっきり書く方法はあるでしょうか?**
|
13
|
+
|
11
14
|
|
12
15
|
|
13
16
|
** 1万個のデータをのinsertするととても遅い件について考えたこと**
|
@@ -31,8 +34,18 @@
|
|
31
34
|
for (let i = 0; i < 100000; i++) {
|
32
35
|
array.push([i, "Ipsum " + i]);
|
33
36
|
}
|
34
|
-
await insert("INSERT INTO lorem(id, info) VALUES (?, ?)", array);
|
35
37
|
|
38
|
+
// 以下のようなSQLを生成
|
39
|
+
// INSERT INTO lorem VALUES (1, 'b1'), (2, 'b2'), (2, 'b3')
|
40
|
+
|
41
|
+
let s = ""
|
42
|
+
for (let i = 0, end=array.length; i < end; i++) {
|
43
|
+
s += "(" + array[i][0] + ", ";
|
44
|
+
s += "\"" + array[i][1] + "\"), ";
|
45
|
+
}
|
46
|
+
s = s.slice(0, -2);
|
47
|
+
await run("INSERT INTO lorem VALUES " + s);
|
48
|
+
|
36
49
|
// クローズするとinsertが反映される??
|
37
50
|
await closeDb();
|
38
51
|
}
|
5
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -51,7 +51,7 @@
|
|
51
51
|
|
52
52
|
function closeDb() {
|
53
53
|
return new Promise((resolve, reject) => {
|
54
|
-
db.close(
|
54
|
+
db.close(function(err){
|
55
55
|
if(err){
|
56
56
|
return reject(err);
|
57
57
|
}
|
4
詳細追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -7,6 +7,7 @@
|
|
7
7
|
※実際動かすと、close後に反映されているのでそうなのだろうと思いますが確認させてください。
|
8
8
|
|
9
9
|
- 1万個のデータをのinsertするととても遅いです。もっとはやい方法はありますか?
|
10
|
+
5分以上たっても終わりません。
|
10
11
|
|
11
12
|
|
12
13
|
** 1万個のデータをのinsertするととても遅い件について考えたこと**
|
3
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
|
12
12
|
** 1万個のデータをのinsertするととても遅い件について考えたこと**
|
13
13
|
1万個のinsertを順次実行しているため遅い?
|
14
|
-
しかしデータベースというのは大きなデータを扱うのが普通なのにこんなに遅くていいのだろうか。
|
14
|
+
しかしデータベースというのは大きなデータを扱うのが普通?なのにこんなに遅くていいのだろうか。
|
15
15
|
|
16
16
|
|
17
17
|
``` javascript
|
2
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
Node.jsでSQLite3を実行してみているのですが、いくつか疑問点があります。
|
2
2
|
SQLite勉強中ですので、基本的なことかもしれないのですが、よろしくお願いいたします。
|
3
3
|
|
4
|
+
**疑問点**
|
4
5
|
- insert後、dbをクローズするとdbファイルに書き込みが始まるのですが、そういうものでしょうか?
|
5
6
|
insert関数後に反映されるものではないのですか?
|
6
7
|
※実際動かすと、close後に反映されているのでそうなのだろうと思いますが確認させてください。
|
@@ -8,6 +9,11 @@
|
|
8
9
|
- 1万個のデータをのinsertするととても遅いです。もっとはやい方法はありますか?
|
9
10
|
|
10
11
|
|
12
|
+
** 1万個のデータをのinsertするととても遅い件について考えたこと**
|
13
|
+
1万個のinsertを順次実行しているため遅い?
|
14
|
+
しかしデータベースというのは大きなデータを扱うのが普通なのにこんなに遅くていいのだろうか。
|
15
|
+
|
16
|
+
|
11
17
|
``` javascript
|
12
18
|
const sqlite3 = require('sqlite3');
|
13
19
|
let db = null;
|
1
修正
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
|
1
|
+
SQLiteについて
|
body
CHANGED
File without changes
|