我目前正在尝试使用 java 和 jdbc 从 mysql 数据库在 phpmyadmin 中创建时间线。在数据库中,我存储从 pcap 文件获取的 IP,并从数据包中获取所需的时间(使用 packet.getCaptureHeader().nanos()
)。每次出现 IP 时,我都会增加一个计数器。我想要的是创建一个时间线,显示每个 IP 计数器总和的进度。我尝试了一些东西,但我认为我的方式是错误的。有什么建议吗?
long timer=packet.getCaptureHeader().nanos();
Class.forName("com.mysql.jdbc.Driver");
connect = DriverManager.getConnection("jdbc:mysql://localhost/thesis?"
+ "user=sqluser&password=sqluserpw");
preparedStatement = connect.prepareStatement("INSERT INTO thesis.ICMP values (?, ?, ?, ?) ON DUPLICATE KEY UPDATE counter=counter+1;");
preparedStatement.setString(1, xIP);
preparedStatement.setString(2, "ICMP");
preparedStatement.setInt(3, 1);
preparedStatement.setLong(4, timer);
preparedStatement.executeUpdate();
我注意到,如果我使用 DATE 类型变量,我可以创建简单的时间线,但 DATE 不支持这种精度。请随意跳出框框思考,甚至建议一种新方法,我不会介意。
最佳答案
MySQL 不支持纳秒分辨率。从 MySQL 5.6.4 开始,支持 fractional seconds with microsecond precision ,但为了进一步精确(或者如果您有旧的 MySQL 版本),您必须自己想出一些办法。
在这种特殊情况下,我可能会做的是将其存储为高达第二分辨率的日期,然后存储秒的小数部分,转换为纳秒,作为无符号 INT (有符号整数可以工作,但你无论如何都不会想要负值)。缺点是搜索和排序变得更加困难。 This person正在讨论将纳秒存储为小数,我不明白,但除此之外对这个问题有一些好的想法。另一种可能性是使用 BIGINT 来存储自一个纪元以来的纳秒数,但这只能提供大约 500 年的可能值。对于您的使用来说,这可能没问题,但需要记住一个限制。
关于java - 如何使用纳秒在 phpmyadmin 中创建时间线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30045587/