我正在使用以下JSP代码来更新数据库。它显示消息"已成功更新",但数据未在数据库中更新。
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.CallableStatement"%>
<%
String ssiteid=request.getParameter("siteid");
String sowner=request.getParameter("owner");
String sstate=request.getParameter("state");
String sdate=request.getParameter("date");
String stariff=request.getParameter("tariff");
String sdiscom=request.getParameter("discom");
Connection con=null;
try {
Class.forName("com.mysql.jdbc.Driver");
con= DriverManager.getConnection("jdbc:mysql://localhost > /s3n","root","system");
PreparedStatement cstmt= con.prepareStatement("update windtariff_master set Owner=?, State=?, Date=?, Tariff=?, Discom=? where Site_ID=?");
cstmt.setString(1,ssiteid);
cstmt.setString(2,sowner);
cstmt.setString(3,sstate);
cstmt.setString(4,sdate);
cstmt.setString(5,stariff);
cstmt.setString(6,sdiscom);
cstmt.executeUpdate();
out.println("updated successfully");
}
catch(Exception e){
out.print("try not allowed"+e);
}
%>
答案 0 :(得分:0)
我建议您将此代码移出scriptlet并转移到POJO中。通过这种方式测试会容易得多。测试它并把它放在一边。
JSP中的Scriptlet是一种糟糕的方式。这种风格长期以来一直声名狼借。 Model-2 MVC是首选。如果你必须这样做,我建议你学习JSTL并使用它的<sql>
标签。
在catch块中打印出该消息可以为您提供在打印堆栈跟踪时获得的信息少得多。你可以通过这种方式了解为什么会出现问题。
在此代码中,没有正确清理您的连接,语句或结果集对象。如果你能够让它一次性工作,你将永无止境。
您是否真的以纯文本形式提供root密码?哦,我的。
如果您有Date
,为什么要将String
作为Date
存储在数据库中?
您不会通过这种方式获取连接来利用连接池。即使是Tomcat也会为你提供它们。为什么你不想要那个?
答案 1 :(得分:0)
你在程序中犯了一些错误,应该更改以下代码,如:
con= DriverManager.getConnection("jdbc:mysql://localhost/s3n","root","system");
PreparedStatement cstmt= con.prepareStatement
("update windtariff_master set Owner=?, State=?, Date=?, Tariff=?, Discom=?" +
"where Site_ID=?");
cstmt.setString(1, sowner);
cstmt.setString(2, sstate);
cstmt.setString(3, sdate);
cstmt.setString(4, stariff);
cstmt.setString(5, sdiscom);
cstmt.setString(6, ssiteid);
cstmt.executeUpdate();
out.println("updated successfully");