2012-02-21 7 views
0

にデータを挿入しません。ユーザーがデータを送信するためにクリックすると、FormHandler servlet(以下に示す)のメッセージが返されます。テキストフィールドのいずれかが空白の場合、要求は別のサーブレットErrorServletに続き、すべて正常であれば、Registered servletに要求が続きます。リクエストがRegistered Servletに、以下の前でもを(彼が登録されていると、ユーザーは成功のページを閲覧このコードの後)データベースにデータを挿入するために書かれている小さなコードがあります。今コードは、私はデータベースにデータを置くサーブレットをしようとしていますデータベース

問題:ユーザーがフォーム内のすべてのテキストフィールドを埋めてクリックを提出します。彼が提出クリックすると、彼は成功しました登録を表示する成功のページを見ています。しかし、私はdatabseを照会するとき、私はデータがdatabseに提出されていないことがわかります。行と列は空です!私はこれの理由を理解していない。

FormHandler.javaのためのコード:

package FormHandler; 

import javax.servlet.*; 
import javax.servlet.http.*; 
import java.io.*; 
import java.util.LinkedList; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import javax.sql.DataSource; 
import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 

public class FormHandler extends HttpServlet { 
    @Override 
     public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { 

} 

@Override 
     public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { 

    String name = request.getParameter("Name"); 
    String email = request.getParameter("Email"); 
    String password = request.getParameter("Password"); 

    LinkedList list = new LinkedList(); 

    if(name.compareTo("") == 0 || email.compareTo("") == 0 || email.compareTo("") == 0) { 
     list.add("One or more field's' left blank"); 
     request.setAttribute("ErrorList", list); 
     RequestDispatcher rd = request.getRequestDispatcher("ErrorServlet.view"); 
     rd.forward(request, response); 
    } else { 
     try { 
      Context context = new InitialContext(); 
      DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/MyDatasource"); 
      Connection connection = ds.getConnection(); 
      String sqlStatement = "INSERT INTO INFORMATION VALUES('" + name + "'," + "'" + email + "'," + "'" + password + "')"; 
       PreparedStatement statement = connection.prepareStatement(sqlStatement); 
       ResultSet result = statement.executeQuery();  
     }catch(Exception exc) { 
      System.out.println(exc); 
     } 
     request.setAttribute("Data", list); 
     RequestDispatcher rd = request.getRequestDispatcher("Registered.view"); 
     rd.forward(request, response); 
     } 


} 

}

XMLファイル

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
<servlet> 
    <servlet-name>FormHandler</servlet-name> 
    <servlet-class>FormHandler.FormHandler</servlet-class> 
</servlet> 
<servlet> 
    <servlet-name>Registered</servlet-name> 
    <servlet-class>FormHandler.Registered</servlet-class> 
</servlet> 
<servlet> 
    <servlet-name>ErrorServlet</servlet-name> 
    <servlet-class>FormHandler.ErrorServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>FormHandler</servlet-name> 
    <url-pattern>/FormHandler.do</url-pattern> 
</servlet-mapping> 

<resource-ref> 
    <res-ref-name>jdbc/MyDatasource</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
    <res-sharing-scope>Shareable</res-sharing-scope> 
</resource-ref> 

<servlet-mapping> 
    <servlet-name>Registered</servlet-name> 
    <url-pattern>/Registered.view</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>ErrorServlet</servlet-name> 
    <url-pattern>/ErrorServlet.view</url-pattern> 
</servlet-mapping> 
<session-config> 
    <session-timeout> 
     30 
    </session-timeout> 
</session-config> 

のHTMLファイル:Code for html file

注:executeQuery()実際に戻ってあなたのUPDATEクエリを実行するため

java.sql.SQLException: No ResultSet was produced 

:私はすでに、私はあなたがどこかになっていると思いデータベース

答えて

1

への接続を行っています何の結果セット

使用しない:

statement.executeUpdate();  
+0

はい!私は今、テーブルのデータを見ることができます。しかし、送信ボタンをクリックすると例外が発生します。サーバによってスローされた例外:HTTPステータス500 - タイプ例外レポート メッセージ サーバがこのリクエストを実行できないようにする内部エラー()が発生しました。 例外 java.util.NoSuchElementException ノートの完全な例外のスタックトレースとその根本原因は、GlassFishアプリケーションサーバー3.1.1 logs.'でご利用いただけます。**この理由何ができますか?* * –

+0

これは、データベース接続に関係のない別の問題です。私はあなたが "*データ*"要求属性に空のリストを入れているのを見ます。あなたはそれで何をするつもりですか?私の推測では、別のサーブレットまたはJSPが境界にチェックを入れずにアクセスしようとしています。そうでない場合は、スタックトレースを質問に載せてください。 –

+0

別のこと:上記のharryが示唆するように、あなたは準備されたステートメントに対してsetString()メソッドを使うべきです。それはあなたのために文字列をエスケープすることを管理しています(現在のクエリはおそらく入力パラメータの中に一重引用符が含まれていると例外を出します)。 –

0

は、次のことを試してください。

PreparedStatement ps2=null; 
ps2 = connection.prepareStatement("INSERT INTO INFORMATION(colname1, colname2,colname3) VALUES(? ,? ,?)"); 

      ps2.setString(1, name); 
      ps2.setString(2, email); 
      ps2.setString(3, password); 

     try { 
     rs=ps2.executeUpdate(); 
     } catch (SQLException ex) { 
      // catch if any exception 
     } 
関連する問題