0

エラーまたはコーディングの何が問題なのか誰か教えてもらえますか? インターネットのチュートリアルに従いましたが、MySQL プロセスにまだエラーがあります。

データを挿入するための JSP コード:

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"
import = "fyp1.controller2.Facade, fyp1.app.Local"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
<%
    String loc = request.getParameter("location");
    Facade facade = new Facade();
    Local lcal = new Local(loc);

    int saje = facade.gettest(lcal);

    if(saje != 1){

%>
<jsp:forward page="test1.jsp" />
<%}
    else{
    %>
    <jsp:forward page="eror.jsp" />
     <%} %>
    </body>
    </html>

データを挿入するコード:

    int gettest(Local local) throws SQLException
{   
    PreparedStatement ps = facade.getConnection().prepareStatement("insert into local(local_id,local_name) values(SEQ.nextval,?)");
    ps.setString(1, local.getLocalName());

    int status = ps.executeUpdate();

    if(status == 1)
        facade.getConnection().commit();
    else
        facade.getConnection().rollback();

    return status;
}

取得エラー:

HTTP ステータス 500 - java.lang.NullPointerException

4

2 に答える 2

1

MySQL データベースがありますが、SQL ステートメントでシーケンスが使用されています。これは、少なくとも MySQL ではサポートされていません (auto_increment オプションを使用してテーブルを宣言する必要があります)。したがって、ステートメントを準備するための呼び出しは SQLException をスローし、ここでヌル ポインター例外が発生する可能性があります。

MySQLワークベンチまたは使用するプログラム内で入力するだけで、SQLステートメントの正確性を確認できます。「?」を置き換えます。たとえば、次のように実際の値を使用します。

insert into local (local_id,local_name) 
values (SEQ.nextval,'ES');

うまくいかないので(MySQL ではシーケンスを定義することはできません)、Java/Jsp コード側ではなく、SQL コード側に問題があることがわかります。

解決策として、ローカルテーブルの作成時にlocal_id列をauto_increment列として宣言する必要があります。次に、テーブル内にlocal_nameの新しい値を挿入すると、次のようになります。

insert into local(local_name) values (?)

自動生成されたlocal_idの値も透過的に追加されます。

于 2013-11-08T17:17:11.823 に答える
0

エラーは null ポインターを示しています。

この行で:

ps.setString(1, local.getLocalName());

local.getLocalName() で local_id である最初のパラメーターを設定しています。2番目のパラメータ local_name はどうですか? これに値を設定しましたか?

PreparedStatement.setString(index x,String s)

インデックス x は 1 から始まります。

于 2013-11-08T15:53:57.197 に答える