java - 如何使用纳秒在 phpmyadmin 中创建时间线?

标签 java mysql jdbc phpmyadmin

我目前正在尝试使用 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/

相关文章:

java - 在 Java 中检查并从字符串中提取一个数字

java - SPEL 在 KafkaListener 中不起作用。无法解决属性(property)问题

mysql - Windows 上的 RMySQL 编码问题 - 西类牙字符 ñ

php - 使用 PHP 从现有数据库中为每一行生成一个我已经制作的新的特定 HTML

sqlite - 如何使用 next.jdbc 将 SQLite 中的 bool 列读取为 Clojure 的 bool 值? SQLite 将 bool 值存储为 0/1

database - Hibernate 是如何使用 JDBC 的?

java - 用于 Spring bean 初始化的 ActiveMQ 连接故障转移检测

java - 如何通过代码验证 "java -version"不会返回错误?

mysql - 以可伸缩和可扩展的方式存储用户配置文件字段和信息

android - 如何将Mysql JDBC Driver 到android studio