[前][次][番号順一覧][スレッド一覧]

mysql:615

From: 民斗 <民斗 <tommy@xxxxxxxxxx>>
Date: Fri, 22 Jan 1999 11:15:39 +0900
Subject: [mysql 00615] Re: ruby

民斗です。

# やばい…風邪のひき始めっぽい。

[Subject: [mysql 00613] ruby]
[Date: Thu, 21 Jan 1999 23:15:52 +0900  From:takeshi@xxxxxxxxxx]

> ruby-mysql 2.1 上で Mysql.new() が失敗した場合、
> (サーバーが反応しないか、アクセスデナイドか)
> ruby が MysqlError で止まる(abortする)のですが、
> これをやめるにはどうすればよいでしょうか?
> 
> mysql-ruby のソースの
>   VALUE real_connect()
> を変えるしかないんでしょうか?
> 
> エラーなら、nilかなにかで返すにはどうすればよろしいでしょう?
> 
>   Raise(eMysql, "%s", mysql_error(&my));
> というのが、error 時に呼ばれていますが、(ruby の API でしょうが)、
> これがなんの働きをしているか?なので、
> 単純に return(NULL); でいいものかどうか、、、

Ruby では、エラーが発生した場合に、エラーを示すコードを返すのではなく、
例外を発生させる(C++ の例外と同じ)のが一般的なようなので、mysql-ruby 
でもそうしました。

Ruby の例外をキャッチするには、begin 〜 rescue 〜 end を使います。
例えば、Mysql.new() の例外をキャッチしたい場合は、

	begin
	  m=Mysql.new(host, user, passwd)
	rescue eMysql
	  print "Mysql.new() error occured\n"
	end

でできます。

# あ、今気がついたけど、これだとエラーの理由がプログラムから
# わからない…(^^;

例外を使う利点は、個々のメソッド呼び出しのレベルで、いちいちエラー
チェックを行なう必要がないことですが、逆に個々の呼び出しでエラー
チェックを行ないたい場合は、プログラムが煩雑になってしまうという面も
あると思います。

エラー時に例外をあげるかエラー値を返すかを選択できる機構も作ろうと
思ってましたが、忘れてました…(^^;

--
民斗 <tommy@xxxxxxxxxx>

[前][次][番号順一覧][スレッド一覧]

->     615 1999-01-22 11:15 [民斗 <tommy@xxxxxxxx] Re: ruby                                
       617 1999-01-22 12:12 ┣[民斗 <tommy@xxxxxxxx]                                       
       619 1999-01-22 13:21 ┃┗[<takeshi@xxxxxxxxxx>]                                     
       641 1999-01-25 00:26 ┗[民斗 <tommy@xxxxxxxx]