- PR -

サーブレットからhsqldbへの接続

1
投稿者投稿内容
radoh
会議室デビュー日: 2006/06/26
投稿数: 4
投稿日時: 2006-06-26 15:26
当方、3ヶ月前からJavaを始め、現在JDBCの研修を行っておりますが、プログラム中で自力で解決出来ない問題が発生した為、皆様のお力をお借りしたく書き込みさせて頂きました。

現在、hsqldbとサーブレットを利用してスケジューラを作成しており、表示は全てJSPで行い、ビジネスロジックは全てBeanで行っておりますが、プログラムを実行した際、hsqldbへコネクタを作成する際にsocket creation errorというエラーが発生します。

また、Eclipse上でデバッグを試みたところ、Connectorにurl、ユーザー名、パスワードを設定する時点でエラーが発生します。

Bean本体の設定ミスを考慮して単体のjavaプログラム経由でBeanを呼び出すテストを行うと期待通りの結果が出力されます。

上記の状態からサーブレットコンテナ経由でhsqldbに接続を試みるとエラーが発生するようです。

現状ではTomcatを経由する時点で何らかの不具合が出るようですが、原因を突き止めることが出来ていないのが現状です。

hsqldb.jarファイルはeclipseのプラグインフォルダ内、及びTomcatのTomcat 5.0\common\libフォルダ内に配置してあります。

以下が私の環境になります。

jdk1.5.0_06
hsqldb_1_8_0_4
jakarta-tomcat-5.0.28
Eclipse SDK 3.1.1

以上です。

分かりにくい文章で申し訳ございませんが、何卒宜しくお願い致します。
radoh
会議室デビュー日: 2006/06/26
投稿数: 4
投稿日時: 2006-06-26 15:30
追記です。

以下にhsqldbにアクセスするBeanを掲載させて頂きます。

ScheduleDays.java
----------------------------------------------------------------------------------
import java.io.Serializable;
import java.sql.*;
import java.sql.Connection;
import java.sql.ResultSet;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class ScheduleDays implements Serializable
{
// 変数宣言

int curButtonCount = 0;
SimpleDateFormat simpleForm = new SimpleDateFormat( "yyyy/MM/dd" );
StringBuffer dayList = new StringBuffer();
String host = "localhost";
String db = "SCHEDULE";
String userID = "sa";
String passWord = "";
String driverName = "org.hsqldb.jdbcDriver";
String url = "jdbc:hsqldb:hsql://localhost/SCHEDULE";
String SQL;
String YMD;
String mark;

//ボタンの値を受け取る
public void CurButtonCount(int val)
{
curButtonCount = val;
}


public int checkSchedule(String YMD)
{
int judge = 0;
Connection connect = null;
try
{
// DBに接続
Class.forName(driverName);
connect = DriverManager.getConnection(url,userID,passWord);
Statement state = connect.createStatement();
//SQL文を作成
SQL = "SELECT * FROM SCHEDULE WHERE DATE = " + "'" + YMD + "'";
ResultSet rSet = state.executeQuery(SQL);
// DBデータ判定
if(rSet.next() == false)
{
judge = 0;
}
else
{
judge = 1;
}
rSet.close();
state.close();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
try
{
if(connect != null)
{
connect.close();
}
}
catch(SQLException sqle)
{}
}
return judge;
}

// 日付を出力する
public void setDays() throws ParseException
{
// 変数宣言
GregorianCalendar nowDate = new GregorianCalendar();
nowDate.add( Calendar.MONTH, curButtonCount );
nowDate.set(Calendar.DAY_OF_MONTH, 1);
int year = nowDate.get(Calendar.YEAR);
int month = nowDate.get(Calendar.MONTH);
int dayOfWeek = nowDate.get( Calendar.DAY_OF_WEEK );
// カレンダー上部の空欄を作成
// dayListに追加
dayList.append("<tr align=\"center\">");
if( dayOfWeek != 1 )
{
for( int i = 1; i < dayOfWeek; i++ )
{
dayList.append( "<td> </td>" );
}
}
//土曜日で改行するよう設定
//1度出力したら1日進める
while ( nowDate.get( Calendar.MONTH ) == month )
{
if( nowDate.get( Calendar.DAY_OF_WEEK ) == 1 )
{
dayList.append( "<tr align=\"center\">" );
}
dayList.append( "<td>" );
mark = "";
String Year = String.valueOf(year);
String Month = String.valueOf(month + 1);
if(Month.length() == 1)
{
Month = "0" + Month;
}
String Day = String.valueOf(nowDate.get( Calendar.DAY_OF_MONTH ));
if(Day.length() == 1)
{
Day = "0" + Day;
}
YMD = Year + Month + Day;
//日付をクリックするとスケジュール画面に移動
dayList.append("<form action=\"/ProjectJ2EE/servlet/SchedulerServlet\" method=\"post\">");

//日付にデータがあった場合・を付ける
if(checkSchedule(YMD) == 1)
{
mark = mark + "・";
}
dayList.append("<input type=\"submit\" name=\"bDate\" value=\"");
dayList.append(mark + nowDate.get( Calendar.DAY_OF_MONTH ));
dayList.append("\" />");
dayList.append("<input type=\"hidden\" name=\"bYMD\" value=\"");
dayList.append(YMD);
dayList.append("\" />");
dayList.append("</FORM>");
dayList.append( "</td>" );
if ( nowDate.get( Calendar.DAY_OF_WEEK ) == 7 )
{
dayList.append( "</tr>" );
}
nowDate.add( ( Calendar.DAY_OF_MONTH ),1 );
}
//月末の空欄を作成
dayOfWeek = nowDate.get( Calendar.DAY_OF_WEEK );
if( dayOfWeek != 8 )
{
for( int i = dayOfWeek; i < 8; i++ )
{
dayList.append( "<td> </td>" );
}
}
dayList.append( " </tr> " );
}
public StringBuffer getDays()
{
return dayList;
}
}
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2006-06-26 16:55
引用:

radohさんの書き込み (2006-06-26 15:26) より:

Bean本体の設定ミスを考慮して単体のjavaプログラム経由でBeanを呼び出すテストを行うと期待通りの結果が出力されます。

上記の状態からサーブレットコンテナ経由でhsqldbに接続を試みるとエラーが発生するようです。


 だったら、JDBCドライバが認識されていないだけでは?
Tomcatは「CLASSPATH」の設定を無視しますよ。
別にサーブレットからDBに接続をかけようが、
JavaアプリケーションからDBに接続しようが、
そんなものプログラム事態には影響有りません。

そもそも研修中なら、研修担当の先輩社員に聞くべきです。
それが彼らの仕事なんですからね。
まあ、ほったらかしなら問題外ですけどね。
radoh
会議室デビュー日: 2006/06/26
投稿数: 4
投稿日時: 2006-06-26 17:23
taku様、ご返答ありがとうございます。

引用:
-----------------------------------------------------------------------------------
そもそも研修中なら、研修担当の先輩社員に聞くべきです。
それが彼らの仕事なんですからね。
まあ、ほったらかしなら問題外ですけどね。
-----------------------------------------------------------------------------------
お恥ずかしながら諸事情により現在「ほったらかし」の状態です。。。

折角taku様よりアドバイスを頂けましたのでもう少し独力で頑張ってみようと思います。

radoh
会議室デビュー日: 2006/06/26
投稿数: 4
投稿日時: 2006-06-29 14:19
自己レスです。
先程、お陰様で自己解決致しました。
taku様にご指摘頂いた点を元に、以下の作業を行いました。
1、Tomcatにhsqldb.jarへのクラスパスを設定し直す。
  (この設定は、Eclipse上で行いました。)
2、制御用サーブレットのコンテキスト.xmlファイルを作成、localhost上に配置。
以上です。
大変お騒がせ致しました。
1

スキルアップ/キャリアアップ(JOB@IT)