【问题标题】:Best type for IP-address in Hibernate Entity?休眠实体中 IP 地址的最佳类型?
【发布时间】:2010-07-27 09:48:53
【问题描述】:

使用 Hibernate 在数据库中存储 IP 地址的最佳类型是什么?

我虽然是Byte[]或者String,但是有没有更好的方法,或者你用什么?

 @Column(name = "range_from",  nullable = false)
 public Byte[] getRangeFrom() {
  return rangeFrom;
 }
 public void setRangeFrom(Byte[] rangeFrom) {
  this.rangeFrom = rangeFrom;
 }

【问题讨论】:

    标签: hibernate ip-address entity


    【解决方案1】:

    我将它存储在 long 中,查找速度非常快。您可以使用以下函数进行转换。

    public static string GetStandardIP(long numericIP)
    {
        string w = Convert.ToString(Convert.ToInt64(numericIP / 16777216) % 256);
        string x = Convert.ToString(Convert.ToInt64(numericIP / 65536) % 256);
        string y = Convert.ToString(Convert.ToInt64(numericIP / 256) % 256);
        string z = Convert.ToString(Convert.ToInt64(numericIP) % 256);
    
        return w + "." + x + "." + y + "." + z;
    }
    

    还有这个

    public static long GetNumericIP(string standardIP)
    {
        if (standardIP != null && standardIP != string.Empty)
        {
            string[] ipParts = standardIP.Split('.');
            long numericIP = 16777216 * Convert.ToInt64(ipParts[0]) + 65536 * Convert.ToInt64(ipParts[1]) + 256 * Convert.ToInt32(ipParts[2]) + Convert.ToInt32(ipParts[3]);
    
            return numericIP;
        }
        return 0;
    }
    

    您可能希望通过检查参数来改进它们。

    【讨论】:

    • 是的,你想把它翻译成另一种语言吗?
    • 不用了,谢谢,我自己用Java翻译的。谢谢你的回答!
    • 您可以使用位移操作来代替“(numericIP / 16777216) % 256”:“numericIp
    【解决方案2】:

    使用 Byte[] 或 String 没关系。两者都将做同样的工作,这实际上取决于您的应用程序和要求。

    我个人一直将它们存储为字符串。

    我不知道通过 Hibernate 存储它们的更好方法。

    https://forum.hibernate.org/viewtopic.php?f=1&t=996818&start=0

    编辑: 或者您可以使用 Pierre 303 示例中的 long 。最后,这真的取决于您的应用程序以及哪种类型对您来说最容易处理。

    【讨论】:

      猜你喜欢
      • 2020-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-01
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多