- PR -

JTableからmysqlサーバにアクセス(jws使用)

1
投稿者投稿内容
タマダ
会議室デビュー日: 2005/11/22
投稿数: 5
投稿日時: 2006-01-21 21:06
いつもお世話になっております。

ただいま、イントラネット内でtomcatとjwsを使い、サーバPCからJTableプログラムをクライアントPCにダウンロードさせ、そのJTableプログラムから、mysqlサーバ(tomcat、jwsサーバと同じPC)にSQLでクエリを飛ばし、要求に応える小型webアプリを構築しようと考えているのですが、ローカル環境(サーバPCからlocalhostに向けてアクセス)ですら、実行時にjava.lang.NullPointerExceptionエラーが起こってしまい、JTableが起動しません。

ローカル環境内で、コマンドプロンプトで実行する分には、狙い通りにmysqlサーバにsql要求ができるのですが。


環境は、
tomcat5.0.28
mysql4.0.13
java1.4.2
です。

以下全てローカル環境内の内容です。

JTableプログラム内の、mysqlへの接続部は、

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

JDBCSwingQuery.java

Class.forName("com.mysql.jdbc.Driver").newInstance();

Connection con = DriverManager.getConnection(

// "jdbc:mysql://localhost:3306/sample", "jsp", "jsp");
// "jdbc:mysql://127.0.0.1:3306/sample", "jsp", "jsp");
// "jdbc:mysql://168.18.XXX.XXX(サーバPCのアドレス):3306/sample", "jsp", "jsp"); ←三つ全て試しました

stmt = con.createStatement();

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

このように書いてます。

それを

jar -cvf JDBCSwingQuery.jar *.class

でjarファイルを作成し、JNLPファイルと共にサーバに配置しています。

サーバPCの環境(3306番ポート、mysqlユーザー管理)が原因かとも思ったのですが、クライアントPCからmysqlクライアント(かねやんmysqladmin)でアクセスしたところ、ホスト:サーバPCのアドレス、ユーザー:jsp、パスワード:jsp、ポート:3306で接続できました。ローカルでも接続はできています。

jwsを使って実行させた場合のエラーの個所は、

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

ResultSet executeSQL(String str) throws SQLException {
return stmt.executeQuery(str); } ← at PersistenceManager.executeSQL(JDBCSwingQuery.java:65)


ResultSet rs = persistMgr.executeSQL("SELECT * FROM access_counter;");  ← at JDBCSwingQuery.<init>(JDBCSwingQuery.java:136)


public static void main(String[] args) {
JDBCSwingQuery obj = new JDBCSwingQuery();        ←  at JDBCSwingQuery.main(JDBCSwingQuery.java:127)


〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

こういったところで起きています。




コマンドプロンプトでは起動する、クライアントPCから3306ポートに接続可能というところから、jwsの問題だとは思うのですが・・・

どのあたりを修正すれば、jwsから起動できるようになるのでしょうか?
よろしくお願い致します。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-01-22 02:25
JDBCの接続先のデータベースはアプリケーションをダウンロードしてきたホストにあるのでしょうか?
そうでない場合 security 要素はそのホストに接続できるように設定されているでしょうか?


ところで JTable とは javax.swing.JTable のことでしょうか?
JTable 自体は JDBC に接続する機能をもたないクラスですので「JTableプログラム」と連呼するのはちょっと混乱を呼ぶかもしれません。
また、現象がJTable を使うことに依存するのであればいいのですが、どうもそうではない様子ですので、質問の本質を明確にするためにも余分な単語は減らした方がいいと思います。
#単に「プログラム」の方が明快です

> Class.forName("com.mysql.jdbc.Driver").newInstance();
".newInstance()"は不要です。問題と直接関係ありませんが。
タマダ
会議室デビュー日: 2005/11/22
投稿数: 5
投稿日時: 2006-01-22 13:22
インギさん、ありがとうございます。

JDBC接続先データベース(mysql)、tomcat、どちらも同じサーバにあります。

同じようにjwsを使用した簡単なプログラムをサーバにいくつか配置しているのですが、sqlを使用するこのプログラムのみサーバPC(ローカル環境)からもクライアントPCからも起動できません。

>#単に「プログラム」の方が明快です
ありがとうございます。以後気をつけます。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-01-22 13:40
スタックトレースが細切れなのでよくわかりませんが、NullPointerException が発生しているのは
JDBCSwingQuery.java:65 ということでしょうか?
#スタックトレースをそのまま貼り付けた方がわかりやすいです

つまり、コネクションオブジェクトは正常に取得できているけど、stmt が null になっているということですか?

あと、netstat でデータベースへのコネクションが張れているか確認するのも良いかもしれません。
1

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