• 締切済み

JavaBeansについて・・・

日頃お世話になっています。Beansを学んでいるのですが、聞きたいことがあります。まず下記の文で <Beans文> import java.io.*; import java.sql.*; import javax.servlet.*; import javax.servlet.http.*; public class bean_dbInsert implements Serializable { public bean_dbInsert(){} public void execute(){ try{ Class.forName("org.gjt.mm.mysql.Driver"); Connection db=DriverManager.getConnection("jdbc:mysql://localhost/jsp10?user=jsp10&password=jsp10&useUnicode=true&characterEncoding=Shift_JIS"); Statement sttSql=db.createStatement(); sttSql.execute("insert into softlist(nam,url,gdate,grade,memo) values('サイト名','http://***.***.com/','2004/9/15',5,'サイトの説明')"); sttSql.close(); db.close(); }catch(Exception e) { e.printStackTrace(); } } } という文があったとします。ここではDBにサイト名~サイトの説明を登録するというものなのですが、コマンドプロンプトでコンパイルが成功し、JSPで表示に成功したにも関わらず、DBにはこのサイトの情報が登録されていないのです。DB接続先等も確認し、再度やってみたのですが、一向に先に進みません。この状況では何が原因だと思われますでしょうか?意見等をお願いいたします。

  • Java
  • 回答数3
  • ありがとう数1

みんなの回答

回答No.3

> >"insert into softlist(nam,url,gdate,grade,memo) values('サイト名','http://***.***.com/','2004/9/15',5,'サイトの説明')"をプログラムからではなく手動で実行するとDBは更新されますか? > 更新されませんでした。ちなみに、DB設定等には、MySQLを使用しています。 まず実行したいSQLが手動で実行できなければ、当然、プログラムでも実行できません。 手動でSQLを実行した場合にどんなエラーが出ていますか?

回答No.2

以下補足要求。 補足要求1 > JSPで表示に成功したにも関わらず、DBにはこのサイトの情報が登録されていないのです。 > commitを入れてみたのですが、やっぱり表示されませんでした(-_-;)。 "JSPで表示に成功"とはどういう状態でしょうか? 補足要求2 Exceptionは全く出ていませんか? 補足要求3 "insert into softlist(nam,url,gdate,grade,memo) values('サイト名','http://***.***.com/','2004/9/15',5,'サイトの説明')" をプログラムからではなく手動で実行するとDBは更新されますか?

hurann
質問者

補足

回答ありがとうございます。 >"JSPで表示に成功"とはどういう状態でしょうか? サーブレット文にある、「データが追加されました」という表示が出ます。 >Exceptionは全く出ていませんか? JSPで実行したときは何も出てはいなかったです。ただ気になるのが、Tomcat 4.0.3を使っているのですが、JSP表示に成功すると、Tomcatの起動画面にエラーみたいな文章が出てしまうということなのです。 >"insert into softlist(nam,url,gdate,grade,memo) values('サイト名','http://***.***.com/','2004/9/15',5,'サイトの説明')"をプログラムからではなく手動で実行するとDBは更新されますか? 更新されませんでした。ちなみに、DB設定等には、MySQLを使用しています。

回答No.1

commitを切ってないですよ。 db.close(); の前に db.commit(); してみてください。 MySQLのコネクションは基本的にデフォルトで AutoCommitだと思うのですが、 実際にはDriverManagerからConnectionを 直接取得しているわけではないですよね? DataSourceの設定にもよりますが commitは明示的に呼ぶべきだと思います。

hurann
質問者

補足

回答ありがとうございます。commitを入れてみたのですが、やっぱり表示されませんでした(-_-;)。ちなみに、サーブレット文が以下のようになりますが、こっちで何か異常はありませんでしょうか? <サーブレット文> import java.io.*; import java.sql.*; import javax.servlet.*; import javax.servlet.http.*; public class srv_dbInsert extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { response.setContentType("text/html;charset=Shift_JIS"); PrintWriter out=response.getWriter(); bean_dbInsert objIns=new bean_dbInsert(); objIns.execute(); out.println("データを追加しました"); out.println("</body></html>"); } public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { doGet(request,response); } }

関連するQ&A

  • JAVAのパッケージについて

    CentOSで、WEBページからデータベースにアクセスするためのプログラムをつくっているのですが、サーブレットがコンパイルエラーになります。 サーブレットで、mypackageが解決できないとのことです。 # javac -classpath /opt/tomcat6/apache-tomcat-6.0.20/lib/servlet-api.jar Controller10.java ---------- 1. ERROR in Controller10.java (at line 10) import mypackage.Model10; ^^^^^^^^^ The import mypackage cannot be resolved ---------- mypackageはデータベースにアクセスするJavaBeanであるModel10をいれているフォルダです。Model10.javaはコンパイルできました。 Controller10.java というのは、Model10.classにアクセスするためのサーブレットです。 Controller10.javaと同じ階層に、mypackageのフォルダをつくり、その下に、Model10.classというJavaBeanをいれていて、なぜ解決できないのか、どうしてもわかりません。 ファイル構造は下記の通りです。 webapps  |___mysamples      |_test.jsp      |_HTML      |_WEB-INF        |_class               |_Controller10.java          |_mypackage ←フォルダ             |_Model10.class ←JavaBean Controller10.javaの抜粋です ------------------------------ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.ServletException; import java.io.IOException; import javax.servlet.ServletContext; import javax.servlet.RequestDispatcher; import java.io.PrintWriter; import mypackage.Model10; ←Controller10にimport文をいれてます。 ------------------------------ Model10.javaの抜粋です ------------------------------ package mypackage;  ←Model10にpackage文をいれてます。 import java.sql.DriverManager; import java.sql.Connection; import java.sql.Statement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Vector; ------------------------------- JARやWARファイルをつくらなければ、パッケージしたことに ならないのでしょうか・・・。 すみませんが、解決方法を教えてください。

    • ベストアンサー
    • Java
  • import と extends について

    ちょっとした疑問なんですが、 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class test extends HttpServlet{ HttpServletクラスを継承していて、 上ではjavax.servlet.http.*;をインポートしていますが、HttpServletクラスは、javax.servlet.http.HttpServletですよね? importでクラスを使うのと、extendsでクラスを扱うのとはどう違うのでしょうか? その違いがわかなくてどうも納得いきません。 どなたか教えていただけないでしょうか? よろしくお願い致します。

  • JSPからサーブレットを呼び出す際に404エラー

    現在、tomcatとeclipseでサーブレット/JSPの勉強をしています。 参考書に載っている、jspの入力画面で入力した値をサーブレットで受け取り、そのまま表示させるようなサンプルを作成しています。 JSPの入力画面は表示できるのですが、値を入力してサーブレットに移動する際、404エラーが出てしまいます。 ■eclipseのパッケージエクスプローラー basic |-WEB=INF/src |..|input |...|EchoServlet.java |-WEB-INF |..|web.xml |.|echo.jsp (WEB-INF直下に作成) ■echo.jsp内のサーブレットのパスに関する記述 <FORM ACTION="/servlet/EchoServlet"> ■web.xmlの記述 <servlet> <servlet-name>EchoServlet</servlet-name> <servlet-class>input.EchoServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>EchoServlet</servlet-name> <url-pattern>/servlet/EchoServlet</url-pattern> </servlet-mapping> ■EchoServlet.javaの記述 package input; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class EchoServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String msg = request.getParameter("message"); response.setContentType("text/plain; charset=Windows-31J"); PrintWriter out = response.getWriter(); out.println("message=" + msg); } } お気づきの点がございましたらご査収の程よろしくお願いいたします。

  • サーブレットをeclipseで作りたい

    ですが //////////////////////////////////////// package member; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; ・・・・・・・・・・・・・・・・・・・・・・・ //////////////////////////////////////// をeclipseのエディタに書くと import javax.servlet.*; と import javax.servlet.http.*; の javax.servlet の下に赤の波線がつきます。 どうも javax.servlet.*; と javax.servlet.http.*; を認識できないようです。 これらを認識できるようにするにはどうしたらいいのでしょうか?

    • ベストアンサー
    • Java
  • Javaで、TomCatプロジェクトを使用したJDBCを使用したデータベースのアクセスについて教えてください。

    すぐに回答を! TomCatプロジェクトでDBアクセスできず困っています。 ●Javaプロジェクトの場合(成功)  ・Javaプロジェクト作成 → 新規 → クラスを作成。  ・プロジェクト選択 → メニューバー「プロジェクト」 → プロパティー   → Javaのビルド・パス → ライブラリーの追加 → ユーザーライブラリー   → 新規 → MySQLドライバを追加  ・次のソースの実行にて、JDBC Dirverの接続を確認。 [JdbcSample.java] import java.sql.*; class JdbcSample { public static void main(String[] args) { try { // 1.JDBC Driver の登録 Class.forName("com.mysql.jdbc.Driver").newInstance(); // 2.データベースへの接続 Connection con = DriverManager.getConnection( "jdbc:mysql://localhost/db1", "(ユーザー名)", "(パスワード)"); // 3.SQL ステートメント・オブジェクトの作成 Statement stmt = con.createStatement(); // 4.SQL ステートメントの発行 ResultSet rs = stmt.executeQuery("SELECT * from null_test_tbl"); // 5.結果の出力 while (rs.next()) { System.out.println(rs.getString("allow_null")); } // 6.データベースのクローズ rs.close(); stmt.close(); con.close(); } catch (SQLException e1) { System.out.println( "SQLException: " + e1.getMessage()); System.out.println( " SQLState: " + e1.getSQLState()); System.out.println( " VendorError: " + e1.getErrorCode()); } catch (Exception e2) { System.out.println( "Exception: " + e2.getMessage()); } } } ●TomCatプロジェクト作成の場合(失敗)  (1)TomCatプロジェクト作成 → 新規 → クラスを作成。  (2)プロジェクト選択 → メニューバー「プロジェクト」 → プロパティー   → Javaのビルド・パス → ライブラリーの追加 → ユーザーライブラリー   → 新規 → MySQLドライバを追加  (3)サーブレットからBeanの呼び出し。  「​http://localhost:8080/test_mvc/jdbcSample​」  (4)エラー「Exception: com.mysql.jdbc.Driver」 が発生。(ドライバーが見つかりません?) [servlet] package ne.jp; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class TestMvc extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { JdbcSample da = new JdbcSample(); try { da.dbAccessTest(); (※)←ここでBeanのデータベースアクセスメソッドを呼び出し } catch (Exception e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } // HTML出力の準備 response.setContentType("text/html;charset=Shift_JIS"); PrintWriter out = response.getWriter(); out.println("<html><body><p>こんにちわ!</p></body>"); } } [Bean] package ne.jp; import java.sql.*; class JdbcSample { //Beanコンストラクタ public JdbcSample(){ } //データベースアクセス確認 public void dbAccessTest(){ try { // 1.JDBC Driver の登録 Class.forName("com.mysql.jdbc.Driver").newInstance(); // 2.データベースへの接続 Connection con = DriverManager.getConnection( "jdbc:mysql://localhost/db1", "***", "*****"); // 3.SQL ステートメント・オブジェクトの作成 Statement stmt = con.createStatement(); // 4.SQL ステートメントの発行 ResultSet rs = stmt.executeQuery("SELECT * from null_test_tbl"); // 5.結果の出力 while (rs.next()) { System.out.println(rs.getString("allow_null")); } // 6.データベースのクローズ rs.close(); stmt.close(); con.close(); } catch (SQLException e1) { System.out.println( "SQLException: " + e1.getMessage()); System.out.println( " SQLState: " + e1.getSQLState()); System.out.println( " VendorError: " + e1.getErrorCode()); } catch (Exception e2) { System.out.println( "Exception: " + e2.getMessage()); } } }

    • ベストアンサー
    • Java
  • フィルターについて

    いつもお世話になっています。 Filter使用時のことで質問します。 Filterは、主にサーブレット実行時に使用しますが、 これは、web.xmlで指定しておけば指定クラスが実行された場合に 自動的に読み込まれ実行されるということなのでしょうか? 一度以下の設定で実行してみましたが、まったく処理が実行されません。 ◆ web.xml ◆ <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocati <filter> <filter-name>HelloWorldFilter</filter-name> <filter-class>Filtet_sam.ExFilterServlet</filter-class> </filter> <filter-mapping> <filter-name>HelloWorldFilter</filter-name> <url-pattern>/HelloWorldServlet</url-pattern> </filter-mapping> <servlet> <description></description> <display-name>HelloWorldServlet</display-name> <servlet-name>HelloWorldServlet</servlet-name> <servlet-class>Filtet_sam.HelloWorldServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorldServlet</servlet-name> <url-pattern>/Filtet_sam/HelloWorldServlet</url-pattern> </servlet-mapping> </web-app> ◆ サーブレット実行クラス ◆ package Filtet_sam; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorldServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{ System.out.println("Filter Test ~ "); } } ◆ フィルター処理クラス ◆ package Filtet_sam; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloWorldFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { try{ //↓試しに、下記の文字を表示させたい System.out.println("フィルタ実行"); chain.doFilter(request, response); }catch (ServletException se){ }catch (IOException e){ } } public void init(FilterConfig arg0) throws ServletException { } public void destroy() { } } やはり、何かが不足しているのでしょうか? 宜しくお願いします。

  • LINUX文字化け

    こんにちは。 いつも勉強させていただいています。 質問があるのでよろしくお願いします。 以下のjsp、サーブレットプログラムによって DBアカウント"DBtest"のテーブル"test"に 2バイト文字を登録すると"?"と文字化けしてしまいます。 文字化けせず登録する方法(コーディング) を教えていただけないでしょうか 非常に困っております。 ご回答よろしくお願いします。 【環境】 データベース MYSQL 4.1.1 TOMCAT 4.1.31 【手順】 1. http://ドメイン/コンテキスト/test.jspにアクセス 2. 2バイト文字をテキストボックスに入力する。 3. 送信ボタンを押下する。 確認:mysqlにログインし"select * from test"    とコマンドを入力し実行する。 結果:2バイト文字の部分が"?"となっている。 ------------test.jsp--------------- <html> <head></head> <body> <form action="test" method="post" > <input type="text" name="test"> <input type="submit" value="送信"> </form> </body> </html> --------test.java-------- import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.ServletException; import java.io.IOException; import javax.servlet.ServletContext; import javax.servlet.RequestDispatcher; import java.io.PrintWriter; import java.sql.*; import java.util.*; public class test extends HttpServlet { String testStr="";   Connection con_info = null; Statement stmt = null; ResultSet rs_master = null;   ResultSet rs_transaction = null; Exception exception; public void doPost( HttpServletRequest req, HttpServletResponse res ) throws Exception { req.setCharacterEncoding( "Shift_JIS" ); res.setContentType( "text/html; charset=Shift_JIS" ); testStr=req.getParameter("test"); try { Class.forName( "com.mysql.jdbc.Driver" ); String jdbcurl = "jdbc:mysql://localhost/DBtest"; Properties props = new Properties(); props.put("user", "root"); props.put("password", "password"); props.put("useUnicode", "true"); props.put("characterEncoding", "Shift_JIS"); con_info = DriverManager.getConnection( jdbcurl, props ); String sql="insert into test(input_str) values('"+testStr+"')"; stmt = con_info.createStatement(); int kekka = stmt.executeUpdate(sql);    //省略 } catch(Exception e) { //省略(エラー画面遷移するコード) } } } -------------------------------------------------------

    • ベストアンサー
    • Java
  • 【初心者質問】beanを使うときにパッケージ化しないといけないのか?

    Linux(CentOS)をtelnetで操作して Tomcat+Apache+JDKでWebアプリケーションを作成しています。 初心者です。 特に困っていない(動作できた)のですが なぜなのか理解できないので、後学のためにご教示くださいませ。 jspでフォームに入力した情報を サーブレットで取得し、その情報をDB(Postgresql)にINSERT 登録結果画面としてjspで登録した情報を表示 ということをしたかったのですが、 その際、フォーム入力情報をbeanに入れて beanオブジェクトをrequest.setAttributeしたんですが jspから取得(getProperty)できませんでした。 最終的に package beans;としてインポートすることで解決できたんですが なぜできたのか良く分かりません。 packageは煩雑にならないようクラスファイルのディレクトリ構成を 指定するものだ という認識だったのですが、 今回のようなケースでは必須事項なのでしょうか? そうならば、なぜなのでしょうか? # Servlet.classとBean.classはもともとclassesディレクトリにいたのを   classes/beansディレクトリにしたことでうまくいくというのが解せません   classesディレクトリにあるならいいじゃないかと思うわけです。。

    • ベストアンサー
    • Java
  • サーブレットに関して

    ポスグレのデータベースをイクリプスと連携させようとしています。 現状は接続の確認として下記Connect13.javaを実行し接続確認をしています。 しかし、405が表示されてしまい接続が上手くいきません。 どこが間違っているのか教えて頂きたいです。 下記が現在のスペックです。 OS:Windows バージョン 10 Eclipse 4.0 ※ソースコードは------で分けて今回はここに記載しています。 よろしくお願いいたします。 Connect13.java package jp.co.sss.dao; import java.io.IOException; import java.sql.Connection; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import jp.co.sss.dao.DBManager; @WebServlet("/connect13") public class Connect13 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Connection con = null; con = DBManager.getConnection(); if(con !=null){request.setAttribute("message","接続に成功しました。"); } DBManager.close(con); request.getRequestDispatcher("/jsp/sample13/pizza_result2.jsp").forward(request, response); } } ----------------------------------------------------------------------------------------------------------------------- DBManager.java package jp.co.sss.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class DBManager { public static Connection getConnection(){ String url="jdbc:postgresql://localhost:5432/postgres"; String user = "postgres"; String password = "reds1113"; try{ Class.forName("org.postgresql.Driver"); Connection con = DriverManager.getConnection(url,user,password);////urlの指定のみ return con; }catch (Exception e){ throw new IllegalStateException(e); } } public static void close(Connection con){ if (con !=null){ try{ con.close(); }catch (SQLException e){ e.printStackTrace(); } } } public static void close(PreparedStatement ps, Connection con){ if (ps !=null) { try { ps.close(); }catch (SQLException e){ e.printStackTrace(); } } if (con != null){ try { ps.close(); }catch (SQLException e){ e.printStackTrace(); } } } } ----------------------------------------------------------------------------------------------------------------------- pizza_result.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c"uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>シェアードピザ</title> </head> <body> <article class ="main"> <h2>${message}</h2> <form action="<%=request.getContextPath()%>/connect13"method="post"> <input type="submit" value="接続画面に戻る"/> </form> </article> </body> </html>

  • Beanクラスのimportについて

    Beanクラスを作成し、そのBeanクラスをServletでimportしたいのですがコンパイルするとエラーになってしまいます。 Bean(TestBean.java)をsampleパッケージに保存してコンパイルした後に Servlet(Test.java)を ----------------------------------------------- import sample.TestBean; import javax.servlet.*; ・・・・・・・ ・・・・・・・ ------------------------------------------------ として、sampleファイルのひとつ上のディレクトリーに保存してコンパイルすると Test.java:1: シンボルを解釈処理できません。 とエラーになってしまいます。 原因がお分かりになるかた、ご教授をお願いできないでしょうか。よろしくお願いいたします。

    • ベストアンサー
    • Java