有人能告诉我错误或编码有什么问题吗?我已经按照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;
}
获取错误:
答案 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 的自动生成值也会透明地添加。