【发布时间】:2013-02-20 19:30:58
【问题描述】:
我搜索了这个问题的答案,但只找到了模糊的答案。这是问题所在: 我在 MySQL 中有一个示例表: 我的表 时间时间戳 数据 BigInt(20) 无符号
选择数据字段,以便它可以接受 2^64 最大值:18446744073709551616(20 位,因此 BigInt(20))。
我有一个包含无符号 64 位整数的 csv 文件。
现在我使用 Java 和 JDBC 来插入这些数据并遇到问题,因为 Java 没有无符号长。所以我尝试只传递字符串 - 但它失败了。
st = conn.prepareStatement("INSERT INTO pawan_table (mytime, data) VALUES(?, ?)");
st.setTimestamp(1, new Timestamp(86400000+i*1000));
st.setString(2, "18446744073709551616");
st.execute();
我也尝试过 Java 中的 BigInteger 类 - 但 JDBC 没有采用该类型的方法。我只能将 BigInteger 转换为已签名的“long”,这不是我想要的。例如:
BigInteger bi = new BigInteger(string_from_csv_file);
st.setLong(2, bi.longValue());
有趣的是 MySQL Workbench 可以插入这些数据——但它是用 c# 编写的!我需要用Java编写我的代码!
Java 程序员如何在 MySQL BigInt(20) 列中插入无符号 64 位数字?
【问题讨论】:
-
您是否尝试过使用
st.setLong(2, 18446744073709551616L);? -
这将导致 Java 编译错误,因为它大于 LONG_MAX。我刚刚测试了它,它确实给出了编译错误。
-
那么,你不能使用 Java 来做到这一点。