0

我的数据库由两列用户名和余额组成。username 的值为 Mike,balance 的值为 null。我正在尝试更新余额,但由于某种原因它没有更新。我也没有收到任何错误。有什么建议么

 <p>This is the deposit page</p>
    <form action="deposit.jsp" method="POST">
    <label>deposit: </label><input type="text" name="deposit"><br>
    <label>name: </label><input type="text" name="name"><br>
    <input type="submit" value="deposit">

  <%

  String deposit=request.getParameter("deposit");
 String name=request.getParameter("name");
   try{
  Connection conn = null;
  Class.forName("com.mysql.jdbc.Driver").newInstance();
  conn =    DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","root"); 
  Statement st=null;
  st=conn.createStatement();
 st.executeUpdate("update username set balance='"+deposit+"' where username='"+name+"'");

 }
catch(Exception e){
 System.out.println(e);
}
%>
</form>
 </body>
 </html>
4

4 回答 4

2


在块的末尾添加:conn.commit()

于 2012-05-16T20:28:00.923 回答
1

如果我正确理解这里发生的事情,那么您实际上是在页面加载后立即调用 db insert(而不是在用户点击提交时)...在这种情况下,您的 sql 将寻找用户名 = '',对? 也许我不明白你在做什么。你需要在整个shebang上调用commit(),但那是在你实际给它一些有用的值之后。

[编辑..]哦,我看到您两次调用同一页面,具体取决于用户是否点击提交...这是处理此类事情的一种非常糟糕的方式...作为测试,看看您是否可以把东西放在你的数据库里没关系,但你真的绝不能像这样构建任何真实的东西。不惜一切代价将您的演示文稿和业务逻辑分开。我知道 JSP(以及 PHP 和所有其他模板引擎)使您能够合并它们,但仅仅因为您“可以”做某事,并不意味着您应该这样做。

[编辑 2] 我们看不到您的数据库,但您真的有一个名为 username 的表,其中有一个名为 username 的列吗?因为这就是你现在正在谈论的。update [TABLE NAME]. 我猜这失败了,因为您正在尝试写入不存在的表。

哦,更新后调用提交。

于 2012-05-16T20:29:00.710 回答
1

如果您创建两个页面以便查询只运行一次,则更好。第一页包括输入字段,例如您的案例名称和余额。因此,在提交表单后,将其转发到下一页,您可以将编写的代码放入 scriptlet 中。还写System.out.println(e.getmessage())。所以你可以看到正确的消息。并在 Mysql 浏览器中尝试您的查询,以确认您的查询中没有拼写错误。

于 2012-05-16T20:43:22.433 回答
1

首次加载此页面时会尝试更新以下内容:

update username set balance='null' where username='null';

至少有一个用户有这个信息并且是 type char,什么都不会发生。另一方面,scriptlets今天使用被认为是不好的做法。我建议您应用MVC 设计模式

JSP using MVC and JDBC有一个很好的答案 。

于 2012-05-16T20:49:05.770 回答