每次从客户端接收特定的发布请求时,服务器都应生成一个唯一的整数来生成链接(uri:website / question / id / details)并将整数作为索引(主键)存储在数据库中。我已经尝试int idForUri = UniqueInteger.uri.incrementAndGet();
但是如果服务器重新启动,这不起作用。我该如何解决这个问题?
class UniqueInteger {
public static AtomicInteger uri = new AtomicInteger(212043);
}
添加
表格
------------
id int(11)unsigned auto_increment主键
title varchar(50)
内容文本
uri varchar(50)
来自浏览器的每个特定帖子请求都会导致服务器生成新的uri。用户通过uri访问该页面,其中包含“website / question / id / details”(id是主键)。但是,如果不知道新的身份证,那么uri也是未知的。例如,21000是表文章中存在的最大ID。所以需要insert into article(title, content, uri) values (?, ?, 'website/questions/21001/details')
。但是服务器因为自动递增而不知道21001的值(可能在执行select
之前导致sql insert
语句)。
用户通过在浏览器中键入特定的uri来访问每个文章页面,一个HTTP请求。服务器应该知道哪个文章只是由接收链接发送。所以我将id添加到uri(就像SO中的uri,这是问题/问题ID /标题)。然后通过解析uri中的id,服务器可以找到特定的文章。
如何修复设计?
答案 0 :(得分:3)
使用数据库中的SEQUENCE或等效概念。
答案 1 :(得分:1)
根据您的评论,最简单的方法就是让数据库插入按照正常情况使用自动生成的密钥
更改getUri方法以追加或将id字段插入其中
return String.format ("website/question/%d/details", id);