MySQL:使用自动增量ID插入新数据时出错

时间:2013-11-08 14:40:35

标签: mysql jsp mysql-workbench

有人能告诉我错误或编码有什么问题吗?我已经按照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 Status 500 - java.lang.NullPointerException

2 个答案:

答案 0 :(得分:0)

错误显示空指针。

在这一行:

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

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

PreparedStatement.setString(index x,String s)

索引x从1开始。

答案 1 :(得分:0)

你有一个MySQL数据库,但是你的SQL语句正在使用序列,MySQL不支持这些序列 - 至少是这种方式 - 你需要使用auto_increment选项声明表格。因此,准备语句的调用将抛出SQLException,并且空指针异常可能来自此处。

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

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 的自动生成值也会透明地添加。