当前位置: 技术问答>java相关
当用servlet与jsp在数据库中插入一条记录时,此时是用tomcat服务器的,当页面显示完成插入时,如果此时按下F5或者选择刷新,系统就会提示
来源: 互联网 发布时间:2015-09-18
本文导语: 当用servlet与jsp在数据库中插入一条记录时,此时是用tomcat服务器的,当页面显示完成插入时,如果此时按下F5或者选择刷新,系统就会提示重试当前操作,如按下重试,则又会在数据库中多插入了一条记录,这应怎么...
当用servlet与jsp在数据库中插入一条记录时,此时是用tomcat服务器的,当页面显示完成插入时,如果此时按下F5或者选择刷新,系统就会提示重试当前操作,如按下重试,则又会在数据库中多插入了一条记录,这应怎么解决?
|
数据库设计是,应避免重复插入(用主键……)。如重复插入,导到ErrorPage就可!
|
搂住的意思是想在插入前控制啊,如果是考虑数据库约束,这个问题还有问的价值吗?
|
好像是在提交表单后加一个随机数。
论坛里好像很多类似贴子。你搜索一下jsp栏吧。
论坛里好像很多类似贴子。你搜索一下jsp栏吧。
|
你可以在插入以后重新LOAD一次你的页面,也就是清空你要提交的内容;
|
应该还是你的jsp/servlet的问题,关键代码贴出来,看看怎么帮你解决。有一个相同的帖子,一按刷新就重新提交,你可以搜索看一下。
|
采用同步令牌来避免重复提交,可以参考j2ee核心模式这本书
|
我觉得是你数据库设计有问题。
如果不修改数据库设计,那你应该插入之前先检查一下该记录是否存在,即检查你不允许重复的某个字段,如果没有,在执行数据库操作,否则提示已经存在,或干脆导航道别的页面。如下:
String sqlStr = "select columnName from tableName";
ResultSet rs = st.executeQuery(sqlStr);
if(rs.next())
{
//提示或导航
}
else
{
//insert 操作
}
如果不修改数据库设计,那你应该插入之前先检查一下该记录是否存在,即检查你不允许重复的某个字段,如果没有,在执行数据库操作,否则提示已经存在,或干脆导航道别的页面。如下:
String sqlStr = "select columnName from tableName";
ResultSet rs = st.executeQuery(sqlStr);
if(rs.next())
{
//提示或导航
}
else
{
//insert 操作
}
|
一个简单的解决方法,把提交页面和入库处理页面分开,入库页面处理完成,跳转到提交页面,不就没有问题了,何必还要去侦测键盘按键操作呢
|
在程序中控制,我看过一个有session变量控制的,插入记录前如果session变量值为undo,则可插入新记录,成功后可将此变量设为do,此时无论他按多少次F5都不会有插入操作。当用户返回提交面页时,session变量设为undo,可填写新的记录了。
这样的作法相信能收到一定的效果。
这样的作法相信能收到一定的效果。
|
在插入程序里控制一下,不让他重复插入二条一样的就可以了
|
同意buick555(王飞) ,用数据库表主键约束。