将32位数写入SQLITE3数据库(C)

时间:2015-04-10 14:46:00

标签: c tcp sqlite network-programming

我有一个程序在将它们存储在SQLITE3数据库中时读取32位无符号整数值,然后检索它们,但在某些地方,数据丢失了。

// The data is captured off the wire

//Stored and printed as a 32-bit number 
int32_t seq_num = ntohl(tcp->th_seq); // tcp->th_seq is the number
printf("Seq Num: %" PRIu32 "\n", seq_num);

// Function delcaration (variable as 32bit int)
void addPacket(int table, char *srcIP, char *dstIP, int port, int32_t seq_num);

// Function called with 32bit sequence number
addPacket(0, result1, result2, ntohs(tcp->th_dport), seq_num);

这是SQLITE创建数据库语句:

sql1 = "CREATE TABLE synpackets ("  \
       "id INTEGER PRIMARY KEY AUTOINCREMENT," \
       "srcIP VARCHAR(64)," \
       "dstIP VARCHAR(64)," \
       "dstPort int(4)," \
       "seq int(64)," \ // Could this be the problem?
       "timestamp DATETIME DEFAULT CURRENT_TIMESTAMP);";

这是我在INSERT语句中绑定参数的方式:

sqlite3_bind_int64(stmt, 4, seq_num);

当我读回SELECT * ...后的数字时,我得到一些负数而不是我打算进入的值:

这是原始捕获,因为它之前发生进入数据库:

Packet number 38:
Seq Num: 1118349056

Packet number 39:
Seq Num: 768809646

这是相同的数据包,但 之后从数据库中检索到了

id = 1
seq = 1118349056

id = 2
seq = -1752457962

我已经查看了负数的数据库文件正在写入表中,因此它不仅仅是打印错误。当我尝试将32位数字插入数据库时​​似乎出现了问题,但我不确定是什么。

0 个答案:

没有答案