前川です。 RubyでMySQLを操作するために、色々試していますが、テーブル名・データベース名 以外はエラーとなります。 テーブル名・データベース名が取得できているので、 何が原因で、[BUG] Segmentation faultが生じたのか、見当がつきません。 ご教示、よろしく、お願いします。 実施したのは、 SELECT * FROM テーブル名 SHOW COLUMNS FROM テーブル名 DESCRIBE テーブル名 です。 後述していますが、とみたさんのmysqlを使用したサンプルコードでは、 データは問題なく取得できています。 エラーの内容は、以下です。 D:/Ruby/lib/ruby/site_ruby/1.8/dbd/mysql/statement.rb:130: [BUG] Segmentation fault ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32] This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information. #<DBI::DatabaseHandle:0x2cd6a34> #←dbh(DBI.connectの結果) #<DBI::StatementHandle:0x2cd65c0> #←sth(dbh.prepare(SELECT * FROM テーブル 名)の結果 Complete(3) 'show databases'を実行した結果は正しく取れてます。 #<DBI::DatabaseHandle:0x2cd6a34> #<DBI::StatementHandle:0x2cd65c0> count=4 #←DB数 ["information_schema"] ["ユーザDB名"] ["mysql"] ["test"] increment count=4 #←DB数 Complete(0) サンプルコードは、 http://www.jiubao.org/ruby-dbi/ruby-dbi.html#TOC_3 を参考に作成し、以下で す。 #!D:/Ruby/bin/ruby.exe -Ks require "dbi" begin #dbh = DBI.connect('DBI:Mysql:fbsys:a28341', 'dbuser01', 'dbkey') dbh = DBI.connect("DBI:Mysql:fbsys:localhost", "root", "dbkey") #sth = dbh.prepare('SHOW TABLES') #←OK sth = dbh.prepare('SELECT * FROM aplist') #sth = dbh.prepare('SHOW COLUMNS FROM aplist') #sth = dbh.prepare('DESCRIBE aplist') #sth = dbh.prepare('show databases') #OK puts dbh puts sth sth.execute puts 'count='+sth.rows.to_s #テーブル数のみ有効? count = 0 sth.fetch { |row| p row count = count + 1 } sth.finish puts 'increment count='+count.to_s #DB例外発生時の処理 rescue DBI::DatabaseError => e p "An error occurred" p "Error code: #{e.err}" p "Error message: #{e.errstr}" #切断漏れしないようにensureでdisconnectします。 ensure dbh.disconnect if dbh end バージョンは、以下です。 C:\>ruby -v ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32] MySQL;;5.1 C:\>gem list --local *** LOCAL GEMS *** actionmailer (2.3.4) actionpack (2.3.4) activerecord (2.3.4) activeresource (2.3.4) activesupport (2.3.4) deprecated (2.0.1) linecache (0.43) mysql (2.8.1) rack (1.0.0) rails (2.3.4) rake (0.8.7) ruby-debug-base (0.10.3) ruby-debug-ide (0.4.5) sinatra (0.9.4) sqlite3-ruby (1.2.5) 別の手法(とみたさんのmysqlを使用した場合)のサンプルコード #!D:/Ruby/bin/ruby.exe # #MySQLへのアクセスサンプルプログラム # 2009/05/19 CODED BY E.MAEKAWA # # ################################################ require "mysql" #MySQLライブラリ require "rubygems" mydb = Mysql.new('サーバ名','ユーザ名','パスワード','DB名') puts 'mydbの結果は'+ mydb.to_s #接続確認 res = mydb.query('SELECT * from aplist') puts 'mydb.queryの結果は'+ res.to_s #結果確認 puts '【データダンプ】' res.each do |row| #puts row[0].to_s puts row.to_s puts row.length end #テーブル名 取得 res = mydb.list_tables() #テーブル名を返す puts res.length #テーブル名の数(返されたデータ数) puts res #list_tablesの結果(テーブル名 arcd 等) puts '【each doの出力】' res.each do |name| #テーブル名の格納 res→nemeへ puts name end puts '【flattenの出力】' resData = res.flatten #res を一次元の配列にする。 puts resData puts 'テーブルの数' puts resData.length # 一次元配列になったデータの数 puts 'テーブル名一覧' puts res.to_s #=begin res.each do |row| #puts row[0].to_s puts row.to_s puts row.length end 了 冗長ではありますが、ご指導のほど、よろしくお願いします。