質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

939閲覧

dbi SQLite3に2回目のデータ登録時にエラーになります

kurokoSin

総合スコア133

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2018/08/21 16:41

環境

  • ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu]
  • gem list
    dbd-sqlite3 (1.2.5)
    dbi (0.4.5)
  • sqlite3 3.22.0

質問事項

rubyにて以下のようなSQLを実行したところ2回目のループのexecuteでエラーが発生します。

ruby

1#データ登録 2usrdb = DBI.connect ( "DBI:SQLite3:/Path/to/sample.sqlite3" ) 3id = 1 4usrh = usrdb.prepare( "insert into Records ( Col1, Col2, Col3, Col4, created_at, updated_at ) 5 values (?, ?, ?, ?, ?, ? )") 6dataList.each { |d| 7 usrh.execute( d["Col1"], d["Col2"], d["Col3"] , d["Col4"], Time.now.to_s ,Time.now.to_s ) 8}

実行時のエラーは以下の通りです。

text:エラー内容

1Traceback (most recent call last): 2 8: from Parser.rb:33:in `<main>' 3 7: from Parser.rb:33:in `each' 4 6: from Parser.rb:34:in `block in <main>' 5 5: from /var/lib/gems/2.5.0/gems/dbi-0.4.5/lib/dbi/handles/statement.rb:115:in `execute' 6 4: from /var/lib/gems/2.5.0/gems/dbd-sqlite3-1.2.5/lib/dbd/sqlite3/statement.rb:71:in `bind_params' 7 3: from /var/lib/gems/2.5.0/gems/sqlite3-1.3.13/lib/sqlite3/statement.rb:37:in `bind_params' 8 2: from /var/lib/gems/2.5.0/gems/sqlite3-1.3.13/lib/sqlite3/statement.rb:37:in `each' 9 1: from /var/lib/gems/2.5.0/gems/sqlite3-1.3.13/lib/sqlite3/statement.rb:41:in `block in bind_params' 10/var/lib/gems/2.5.0/gems/sqlite3-1.3.13/lib/sqlite3/statement.rb:41:in `bind_param': bad parameter or other API misuse (SQLite3::MisuseException)

1件目は正常に登録できているので、2回目のusrh.executeを実行する前になにかリフレッシュするような
処理が必要なのでしょうか?

以上、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

なぜ、これならうまくできるかわかりませんが、
処理順序を入れ替えて対応しました。

ruby

1#データ登録 2usrdb = DBI.connect ( "DBI:SQLite3:/Path/to/sample.sqlite3" ) 3id = 1 4 values (?, ?, ?, ?, ?, ? )") 5dataList.each { |d| 6 usrh = usrdb.prepare( "insert into Records ( Col1, Col2, Col3, Col4, created_at, updated_at ) 7 usrh.execute( d["Col1"], d["Col2"], d["Col3"] , d["Col4"], Time.now.to_s ,Time.now.to_s ) 8}

投稿2018/08/22 16:47

kurokoSin

総合スコア133

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問