0

有人可以告诉我我的错误或编码有什么问题吗?我已经按照 Internet 上的教程进行操作,但 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 并且空指针异常可能源自这里。

您可以检查您的 SQL 语句的正确性,只需在 MySQL 工作台或您使用的任何程序中键入它,替换“?” 具有实际值,例如这样:

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

由于它不起作用(MySQL 你没有定义序列的可能性),你会发现问题出在 SQL 代码端,而不是 Java/Jsp 代码端。

作为一种解决方案,您必须在创建本地表时将local_id列声明为auto_increment列。然后,当您在表中插入local_name的新值时:

insert into local(local_name) values (?)

local_id的自动生成值也将透明地添加。

于 2013-11-08T17:17:11.823 回答
0

该错误显示一个空指针。

在这一行:

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

您正在使用 local.getLocalName() 设置第一个参数 local_id。第二个参数local_name怎么样?您为此设置了任何值吗?

PreparedStatement.setString(index x,String s)

索引 x 从 1 开始。

于 2013-11-08T15:53:57.197 回答