使用Hibernate在数据库中存储IP地址的最佳类型是什么?
我虽然是Byte []或String,但是有更好的方法,或者你用的是什么?
@Column(name = "range_from", nullable = false)
public Byte[] getRangeFrom() {
return rangeFrom;
}
public void setRangeFrom(Byte[] rangeFrom) {
this.rangeFrom = rangeFrom;
}
答案 0 :(得分:7)
我将它存储在长中,非常快速查找。您可以使用以下功能进行转换。
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;
}
您可能希望通过检查参数来改进它们。
答案 1 :(得分:2)
如果使用Byte []或String,则无关紧要。两者都会做同样的工作,它实际上只取决于你的应用和要求。
我个人总是将它们存储为字符串。
我不知道通过Hibernate存储它们的更好方法。
请参阅https://forum.hibernate.org/viewtopic.php?f=1&t=996818&start=0
修改强> 或者你可以使用Pierre 303的例子。最后,它实际上取决于您的应用程序,哪种类型最容易为您处理。