【发布时间】:2020-07-07 10:16:49
【问题描述】:
我遇到了这个奇怪的问题,MySQL 插入发生了两次。我一直在对代码进行配对,直到获得最简单的版本,但它仍在发生。有没有人见过这个?这是在 Tomcat 服务器上。
下面是我的超级简化代码。当我运行它时,表中出现两个具有相同值的条目。奇怪的是它似乎将整个页面运行了两次,因为如果我足够快地进行选择,我可以看到第一个条目,然后几秒钟后第二个条目出现。当我为这些行加上时间戳时,它们相差 1 秒。
"jdbc:mysql://127.0.0.1/mydatabase",
"myusername",
"mypassword"
);
java.sql.Statement statement = connection.createStatement();;
statement.execute("INSERT INTO tbl_test (Value) VALUES ('Test value')");
%>
附加信息: 此外,如果我在插入后执行 select 语句并选择表的完整内容,则只会显示第一个条目。但是当我查看数据库时,有两个整体。所以就好像整个jsp页面跑完了,然后又默默的在后台运行了。
这里是代码的扩展版本,允许您选择数据库的输入值,因此您可以即时尝试并查看发生了什么:
<%
Class.forName("com.mysql.jdbc.Driver");
java.sql.Connection connection = java.sql.DriverManager.getConnection(
"jdbc:mysql://***/***",
"***",
"***!"
);
java.sql.Statement statement = connection.createStatement();
String Value = request.getParameter("Value");
statement.execute("INSERT INTO tbl_test (Value) VALUES ('" + Value + "');");
java.sql.ResultSet rs = statement.executeQuery("SELECT * FROM tbl_test;");
while (rs.next()) {
%><%=rs.getString("ID")%>=<%=rs.getString("Value")%><BR><%
}
%>
您可以在以下位置试用此代码: http://familychurch.life/familychurch/test.jsp?Value=Whatever
(将“Whatever”替换为您要插入的值。)
运行一次,您将看到插入的值一次。但是再次运行它,您会看到您之前输入的值现在在表格中出现了两次。
【问题讨论】:
-
另外,如果我在插入后执行选择语句并选择表的完整内容,则只会显示第一个条目。但是当我查看数据库时,有两个整体。所以就好像整个jsp页面跑完了,然后又在后台静默运行。
-
这听起来像是在运行这段代码两次,而不是这实际上导致插入 2 行
-
所以基本上你给我们看的代码对我们没有用。您必须创建一个Minimal, Complete and Verifiable Example
-
是的,页面运行了两次。但这实际上就是代码文件中的全部内容。没有其他的。我将浏览器指向此页面并发生所描述的行为。这就是我需要帮助的所有代码。
-
这里有一个版本的代码你可以试试看效果: