用java更新mysql

时间:2012-05-16 20:24:17

标签: java mysql html jsp

我的数据库由2列用户名和余额组成。 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 个答案:

答案 0 :(得分:2)

添加: conn.commit()
在块结束时

答案 1 :(得分:1)

如果我理解正确发生的事情,那么一旦页面加载(而不是当用户点击提交时),你实际上就会调用数据库插入... ...在这种情况下你的sql将会正在寻找用户名=&#39;&#39;,对吧?也许我不理解你在做什么。并且你需要在整个shebang上调用commit(),但是在你实际给它一些有用的值之后呢。

[编辑..]哦,我看到你两次调用同一个页面,这取决于用户是否点击提交......这是处理这类事情的一种难以置信的坏方法......作为测试看看你是否可以把东西放在你的数据库中它很好,但是你真的绝不能像这样构建任何真实的东西。不惜一切代价保持您的演示文稿和业务逻辑分离。我知道JSP(以及PHP和所有其他模板引擎)让你能够合并它们,但仅仅因为你&#34; CAN&#34;做某事,并不代表你应该做的事。

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

哦,更新后调用commit。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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

至少有一个用户拥有此信息并且类型为char,不会发生任何事情。另一方面,今天使用scriptlets被认为是不好的做法。我建议您应用MVC design pattern

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