蘇る失墜

日常の出来事をつらつらと

Eclipseで2つのプログラムを動かすには

2006年08月28日 22時01分54秒 | java
あるプログラムが動いている状態で別のプログラムを実行すると、最初に動いていたプログラムのコンソール画面が、後から動かすプログラムに上書きされてしまうそうです。それを解決するためにはまず新規コンソールビューを開き、そして先に動いているプログラムのコンソールを選択して、「コンソールのピン止め」をクリックするだけ。これをクリックするとコンソール画面を固定することができるので、もう片方のコンソール画面で別のプログラムを動かせば、コンソール画面が上書きされてしまうことを防ぐことができます。試してないけど2つだけでなく3,4つ動かすこともできるだろう。

Eclipseで気づいた便利なキーボードショートカット。
CTRL+D・・・1行削除。
EmacsのCTRL+Kと同じみたいに使える。ただEmacsと違って削除したものを貼り付けることができるかどうかは不明。

今日悩んだこと
Stringクラスのsplit(String hoge)を使ってで区切ろうとするとエラーがでる。はただそれだけでは文字とみなされないらしく、\\\\を直前に入れる必要があった。

メール

2006年08月28日 13時36分09秒 | 大学
先週MLに今後の予定について流したけど、
時間だけ書いて曜日を書くのを忘れていたようだ。
メールひとつまともに送れないなんて情けない。
以後気をつけたいと思う。

ここ2,3日のまとめ

2006年08月28日 01時02分38秒 | java
前々回の記事でついにプログラムが完成したと書いたけれど
実際はバグがあったのでここ2日くらいプログラムの修正をしていた。
出ていたバグはデータベースの接続にたまに失敗するというもの
エラーは↓のような感じのもの

com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

java.net.SocketException
MESSAGE: java.net.BindException: Address already in use: connect

STACKTRACE:

原因は結局よくわからなかったけど、おそらくデータベースに頻繁にアクセスしていたことが原因のような気がする。
今までは

insert into hoge values(1,hoge);
insert into hoge values(2,hoge2);

という感じで一行ずつデータベースに入れていた。
これでは100個のデータがあったら100個のSELECT文ができ100回データベースに接続するというひどいプログラムであった。
それを防ぐために

insert into hoge(id,name) values(1,hoge),(2,hoge2)・・・

という風にひとつのSELECT文にすることによってデータベースに接続する回数データ数に限らず1回にさせた。そうしたら上記のようなエラーは今のところ出ていない。

このような問題からデータベースに接続する回数はなるべく減らしたほうがいいだろうということで、今まではデータベースにいちいち接続してIDの最大値を取得していた部分を、mysqlのオートインクリメントを使うことにした。
mysqlのオートインクリメントはテーブル作成時に

create table hoge {
primary key(id),
id int not null auto_increment,
}
とすることで使用可能になる。

これに伴って今まではidをプログラムで保持していたが、オートインクリメントで入れるために、プログラムでは保持しなくった。そのため他のテーブルでidを外部キーにしているものはmysqlのlast_insert_id()をつかって取得するようにした。last_insert_id()は直前にDBに入れたidを取得してくれる関数である。