データベースにアクセスし、マシンにリモート接続できるようにする最初の Java プログラムを書き終えました。
これは、自分のマシン (接続先のデータベースもホストしている) から実行すると問題なく動作します。ただし、別のマシンで使用してデータベースに接続すると、データベース タスクの実行中にプログラムがかなりハングします。
少し待つと思っていましたが、目の前のタスクが完了するまでに数分かかる場合があります。
これがハングアップするタスクの 1 つです。
public void ChangeSite() throws Exception{
ConnectionPoolS demo = new ConnectionPoolS();
DataSource dataSource = demo.setUp();
Connection conn = null;
PreparedStatement stmt = null;
String Site = (String)Sites.getSelectedItem();
jProgressBar.setIndeterminate(true);
jProgressBar.setStringPainted(true);
jProgressBar.setString("Searching...");
int sRecordNo;
sRecordNo = 0;
String IpAddress = null, IpRange = null, Atvisionpw = null, Port = null, Practice = null, Surgery = null;
try {
conn = dataSource.getConnection();
stmt = conn.prepareStatement("SELECT * FROM Customer WHERE Practice = '"+Site+"' and BRANCH = 'N'");
ResultSet rs = stmt.executeQuery( );
while (rs.next()) {
sRecordNo = sRecordNo + 1;
Surgery = rs.getString("SURGERY");
Practice = rs.getString("PRACTICE");
IpAddress = rs.getString("IPADDRESS");
Port = rs.getString("PORT");
Atvisionpw = rs.getString("ATVISIONPW");
IpRange = rs.getString("IPRANGE");
}
if (sRecordNo == 1){
SiteIp.setText(IpAddress);
Password.setText(Atvisionpw);
PcIp.setText(IpRange);
}
else if (sRecordNo > 1){
Multisite();
}
jProgressBar.setIndeterminate(false);
jProgressBar.setString("");
stmt.close();
conn.close();
}
これはすべて derby データベースにあります。
私が間違っていることは何ですか?何か不足していますか?これについて何らかのパフォーマンスチェックを実行して、データベースタスクの実行中にハングする原因を正確に突き止める方法はありますか?私は!
編集:Stefanの助けを借りて(ありがとうございました)、ブレークポイントを使用すると、行を実行した後にハングしているように見えることがわかりました
conn = dataSource.getConnection();
その後の次の行は今
stmt = conn.prepareStatement("SELECT * FROM Customer WHERE Practice = '"+Site+"' and BRANCH = 'N'");
ただし、接続行を実行した後にのみハングするので、これは物理データベースへの接続がハングの原因であることを意味しますか?
Edit2:接続プールを設定しましたが、接続時にまだハングしています。今は少し途方に暮れています!別のエンジンを使用すると、より良い結果が得られますか?