- - PR -
アプレットからMySQLに接続できるの?
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2005-01-27 00:14
こんにちは。
今、仕事で、数秒間隔にデータベースが更新されて、それをWeb上で表示するシステムを開発しています。 Tomcatのサーブレットを使って、表形式で表示するところはできたのですが、それをグラフ化して欲しいと の要望があったので、どうやろうか検討しています。 サーブレットで静止画を作れる事がわかったので、その方法も考えてたのですが、リアルタイムで表示する 際に(まだためしてませんが)画像の切り分かりに時間がかかりそうなので、アプレットでできないか実験 してみました。Eclipseからのデバックや実行では問題なく表示できました。が、Eclipseを使わないで、 htmlファイルからそのアプレットを実行すると、どうもMySQLのオープンに失敗しているらしく、うまく グラフが表示されませんでした。原因の分かる方いましたら教えてください。 また、そもそもアプレットからMySQLに接続して良いのでしょうか? p.s. 説明不足でしたが、マシンはXPの一台でやっています。いずれは、他のマシンから見れる様にする予定です。 | ||||
|
投稿日時: 2005-01-27 01:40
失敗とは、どの情報から判断されました? エラーログ(スタックトレース等)を示して頂かないと回答できないですね。 あと、アプレットからはアプレットのダウンロード元のHTTPサーバに対する接続しか 許可されていなかった気がします。アプレットからは一度Servlet/JSPを経由しないと MySQLのデータを取れないのでは? | ||||
|
投稿日時: 2005-01-27 11:54
おばけさん、どうもコメントありがとうございます。
eclipseを使わないアプレットでエラーログの取り方がわからなかったのですが、他のパソコン(Mac) から見たら、Javaコンソール画面が表示されたので、スタックトレースが表示できました。MySQLの JDBCドライバーは見つからないようです。 接続の方法は、 Class.forName("com.mysql.jdbc.Driver"); String strConn="jdbc:mysql://localhost:3306/aiueo" +"?user=user&password=pass" +"&useUnicode=true&characterEncoding=Shift_JIS"; Connection conn =DriverManager.getConnection(strConn); Statement stmt = conn.createStatement(); String strSql="SELECT * FROM aiueo.data_table ORDER BY time DESC"; ResultSet rs= stmt.executeQuery(strSql); とやています。 eclipse上でのアプレット、サーブレット、Javaのアプリともこの方法でMySQLとの接続はできています。 アプレットの場合、JDBCドライバーは何処におくとよいのかわかるかたいましたら教えてください。 ---------------------------------------------------- java.lang.ClassNotFoundException: com.mysql.jdbc.Driver at sun.applet.AppletClassLoader.findClass(AppletClassLoader.java:162) at java.lang.ClassLoader.loadClass(ClassLoader.java:289) at sun.applet.AppletClassLoader.loadClass(AppletClassLoader.java:123) at java.lang.ClassLoader.loadClass(ClassLoader.java:235) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:141) at Graph.MakeTable(Graph.java:127) at Graph.init(Graph.java:54) at sun.applet.AppletPanel.run(AppletPanel.java:353) at java.lang.Thread.run(Thread.java:552) Caused by: java.io.IOException: open HTTP connection failed. at sun.applet.AppletClassLoader.getBytes(AppletClassLoader.java:265) at sun.applet.AppletClassLoader.access$100(AppletClassLoader.java:43) at sun.applet.AppletClassLoader$1.run(AppletClassLoader.java:152) at java.security.AccessController.doPrivileged(Native Method) at sun.applet.AppletClassLoader.findClass(AppletClassLoader.java:149) ... 10 more | ||||
|
投稿日時: 2005-01-27 13:33
うろ覚えで、正確かどうかわかりませんが・・・
HTMLのAPPLETタグのarchiveで指定できるんじゃなかったでしたっけ? <applet code="..." archive="***.jar XXX.jar" ... > ... </applet> みたいに。archiveでドライバーのJarファイルを追加したらいいんじゃないかな〜。 あとデータベースにつなげるためには、セキュリティ上の問題からクライアント側のポリシー設定を変えてあげないといけないんじゃなかったかな。詳しいことは良くわからないので、「Java Applet ポリシー」で検索してみてください。 [ メッセージ編集済み 編集者: H2 編集日時 2005-01-27 13:34 ] | ||||
|
投稿日時: 2005-01-27 21:42
H2さんコメントありがとうございます。
アドバイスとおり、AppletタグのarchiveでJDBCのjarファイルを指定したら、アプレットからMySQLの接続が できるようになりました。(^^;; ただ、接続できたのはサーバー上でアパッチ経由で見た場合で、他のマシンからみたらやっぱり接続できませんでした。その時のエーラをしたに添付しておきます。対策わかるかたいましたら教えてください。「Java Applet ポリシー」で検索して色々と見てみましたが、ちょっと難しくてわかりませんでした。 とりあえずは、今月中の仕様は、サーバー上で見れればよいと言う事なので、とりあず安心できました。 ---------------------------------------------------- エラーメッセージ:Unable to connect to any hosts due to exception: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:3306 connect,resolve) ** BEGIN NESTED EXCEPTION ** java.security.AccessControlException MESSAGE: access denied (java.net.SocketPermission 127.0.0.1:3306 connect,resolve) STACKTRACE: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:3306 connect,resolve) at java.security.AccessControlContext.checkPermission(AccessControlContext.java:269) at java.security.AccessController.checkPermission(AccessController.java:401) at java.lang.SecurityManager.checkPermission(SecurityManager.java:524) at java.lang.SecurityManager.checkConnect(SecurityManager.java:1026) at java.net.Socket.connect(Socket.java:446) at java.net.Socket.connect(Socket.java:402) at java.net.Socket.<init>(Socket.java:309) at java.net.Socket.<init>(Socket.java:124) at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:124) at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:225) at com.mysql.jdbc.Connection.createNewIO(Connection.java:1779) at com.mysql.jdbc.Connection.<init>(Connection.java:450) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:411) at java.sql.DriverManager.getConnection(DriverManager.java:512) at java.sql.DriverManager.getConnection(DriverManager.java:193) at Graph.MakeTable(Graph.java:133) at Graph.init(Graph.java:54) at sun.applet.AppletPanel.run(AppletPanel.java:353) at java.lang.Thread.run(Thread.java:552) ** END NESTED EXCEPTION ** | ||||
1
