0

我目前正在做一个项目,我们被要求从服务器存储和接收食谱。配方以 json 格式存储在服务器 ip + 一个 id 上。我一直在考虑一种创建 ID 的好方法,该 ID 保证不会在我们提交的两个食谱之间重叠。是否有创建这些 ID 的标准例外方法,或者只存储一个 int 跟踪最大 ID 并在有人想要存储配方服务器端时提取它是一个更好的主意?

在此先感谢,
优雅

public void addRecipe(Recipe recipe, String URL) throws IllegalStateException,     IOException{
    // TODO Implement the server-side ID tracking
    //int id = getID();
    //recipe.setId(id);
    HttpPost httpPost = new HttpPost(URL+recipe.getId());
    StringEntity stringEntity = null;
    try {
        stringEntity = new StringEntity(gson.toJson(recipe));
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    httpPost.setHeader("Accept","application/json");

    httpPost.setEntity(stringEntity);
    HttpResponse response = null;
    response = httpclient.execute(httpPost);

    //      String status = response.getStatusLine().toString();
    //      System.out.println(status);
    HttpEntity entity = response.getEntity();

    try {
        // May need if statement, check isStreaming();
        entity.consumeContent();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    //May possibly need to deallocate more resources here. No 4.0 implementation of releaseconnection();
}

也许这段代码会有所帮助?这就是我将食谱存储到服务器上的方式。

4

2 回答 2

0

所有数据库供应商都支持某种(代理)ID 生成机制。

如果您将对象存储在数据库中,则可以使用它。

如果您将对象存储在 LDAP 中,则可以为此目的使用节点 DN。

另一种选择是使用一些自然标识符,例如护照号码,社会保障(坏主意,但只是为了解释性质),汽车的车牌号,或它们的组合来唯一标识您的对象。

您不一定必须使用某种代理(实际上是数字类型)ID。

人们经常忘记自然主键,但它们确实很有帮助。

在您的情况下,它可能是发布配方时的服务器 ip + 时间戳。

但是两台服务器可以发布相同的配方。你将如何区分它们?

你会平等地对待他们吗?

您是为您的对象定义身份的人。

这取决于您的业务需求。

于 2013-03-16T08:25:03.243 回答
0

如果您不介意使用 java 生成一个,则可以使用UUID,如下所示:

UUID identifier = UUID.fromString(gson.toJson(recipe));
// use Strings as your id field
String uuidUniqueId = identifier.toString();

不过,我强烈建议让您的数据库处理 id 生成。毕竟,数据库比 StackOverflow 上的我们(或 Oracle 的好人)更了解如何优化对象的存储。

于 2013-03-16T08:35:11.753 回答