にデータを挿入しません。ユーザーがデータを送信するためにクリックすると、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
:私はすでに、私はあなたがどこかになっていると思いデータベース
はい!私は今、テーブルのデータを見ることができます。しかし、送信ボタンをクリックすると例外が発生します。サーバによってスローされた例外:HTTPステータス500 - タイプ例外レポート メッセージ サーバがこのリクエストを実行できないようにする内部エラー()が発生しました。 例外 java.util.NoSuchElementException ノートの完全な例外のスタックトレースとその根本原因は、GlassFishアプリケーションサーバー3.1.1 logs.'でご利用いただけます。**この理由何ができますか?* * –
これは、データベース接続に関係のない別の問題です。私はあなたが "*データ*"要求属性に空のリストを入れているのを見ます。あなたはそれで何をするつもりですか?私の推測では、別のサーブレットまたはJSPが境界にチェックを入れずにアクセスしようとしています。そうでない場合は、スタックトレースを質問に載せてください。 –
別のこと:上記のharryが示唆するように、あなたは準備されたステートメントに対してsetString()メソッドを使うべきです。それはあなたのために文字列をエスケープすることを管理しています(現在のクエリはおそらく入力パラメータの中に一重引用符が含まれていると例外を出します)。 –