【问题标题】:updating mysql with java用java更新mysql
【发布时间】:2012-05-24 11:09:12
【问题描述】:

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

【问题讨论】:

    标签: java mysql html jsp


    【解决方案1】:

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

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

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

    哦,更新后会调用提交。

    【讨论】:

    • 我现在只是在测试。我应该在哪里调用 commit()
    • 我现在觉得自己很蠢,我的桌子名字错了。谢谢它现在可以工作了。
    • 无需感到愚蠢,这只是一个错字...就像我说的,您真正要重新考虑的是您如何处理将演示文稿与业务逻辑分开的方法。处理此问题的正确方法是从您的显示页面向仅处理数据操作的 JSP 进行 AJAX 调用,然后将 JSON 返回给您,然后您可以在页面中显示(如果需要)。
    • 感谢您的建议
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 我在 st.executeUpdate("update us.... 之后添加了 conn.commit() 仍然无法正常工作
        猜你喜欢
        • 2012-05-26
        • 2017-10-02
        • 1970-01-01
        • 2021-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-19
        • 1970-01-01
        相关资源
        最近更新 更多