重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Rubyでパケットの情報をDBに入れるプログラムを動かしております。

以下のサイトにあるプログラムを実行しました。
http://www.db.is.kyushu-u.ac.jp/rinkou/libpcap/r …

エラーメッセージで、以下のように出力されました。
$ sudo ruby packet.rb
drop table tcppackets...
define table tcppackets...
/var/lib/gems/1.8/gems/sqlite3-ruby-1.3.1/lib/sqlite3/database.rb:85:in `initialize': table tcppackets already exists (SQLite3::SQLException)
from /var/lib/gems/1.8/gems/sqlite3-ruby-1.3.1/lib/sqlite3/database.rb:85:in `new'
from /var/lib/gems/1.8/gems/sqlite3-ruby-1.3.1/lib/sqlite3/database.rb:85:in `prepare'
from /var/lib/gems/1.8/gems/sqlite3-ruby-1.3.1/lib/sqlite3/database.rb:220:in `execute_batch'
from packet.rb:51

どうしたら良いか教えて頂けないでしょうか。

A 回答 (1件)

table tcppackets already existsとなっていますので、


同じテーブルを再定義しようとしてエラーが発生しているように思われます。

テーブル作成は初回だけ行えばいいので、CREATE TABLEを消して
再度実行されてみてはいかがでしょうか?

(SQLを作成している部分のコードをよく読まれることをお勧めします。)

この回答への補足

回答ありがとうございます。

CreateTableのところをコメントアウトして実行したところ、以下のように出力されました。

実際に読み込んでいるpcapファイルの読み込みに失敗して、nilが返されたという理解でいいのでしょうか?pcapファイルの不備ですかね。Wiresharkではパケットがきちんと見ることが出来ます。

$ sudo ruby packet.rb

drop table tcppackets...
insert values...
packet.rb:59 is calling SQLite3::Database#execute with nil or multiple bind params
without using an array. Please switch to passing bind parameters as an array.

/var/lib/gems/1.8/gems/sqlite3-ruby-1.3.1/lib/sqlite3/database.rb:85:in `initialize': no such table: udppackets (SQLite3::SQLException)
from /var/lib/gems/1.8/gems/sqlite3-ruby-1.3.1/lib/sqlite3/database.rb:85:in `new'
from /var/lib/gems/1.8/gems/sqlite3-ruby-1.3.1/lib/sqlite3/database.rb:85:in `prepare'
from /var/lib/gems/1.8/gems/sqlite3-ruby-1.3.1/lib/sqlite3/database.rb:127:in `execute'
from packet.rb:59
from packet.rb:54:in `loop'
from packet.rb:54

補足日時:2010/08/14 12:47
    • good
    • 0
この回答へのお礼

>nekomikekamoさん

問題解決しました。
恥ずかしいことに、プログラムの転送モードをバイナリーにしており文字化けした改行コードが入っていました。Asciで転送したらうまくいきました。

コメントありがとうございました。

お礼日時:2010/08/14 13:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!