【发布时间】:2015-05-06 08:19:22
【问题描述】:
我想将从数据库中读取的数据写入二进制文件。在查询中,我需要读取大量数据,其中一些是group_concat。现在我想将它们写入二进制文件。问题是我如何定义它们的大小。起初我使用put(),但结果是错误的,因为put 需要char 的类型,而row[] 是char*。然后我尝试了write 并通过sizeof(int)*group 中元素的数量定义了大小,但它仍然是错误的。请告诉我一个方法。
MYSQL_RES* res = GetDBManager()->Query("select ls.time, count(ws.id) , group_concat(wc.id) , group_concat(ws.SIGNAL_STRENGTH) , ul.LONGITUDE , ul.LATITUDE , ul.ALTITUDE from user_location_scan ls, wifi_scan ws, wifi_cell wc, user_location ul where ls.id = ws.user_scan and ws.wifi_cell = wc.id and ls.time = ul.time group by ls.id order by ls.id");
if (res == NULL) return false;
MYSQL_ROW row;
ofstream myFile("data.bin", ios::out | ios::binary | ios::app);
while (row = mysql_fetch_row(res)) {
myFile.write(row[0], sizeof(char));
myFile.write(row[1], sizeof(int));
myFile.write(row[2], sizeof(int)*atoi(row[1]));
myFile.write(row[3], sizeof(int)*atoi(row[1]));
myFile.write(row[4], sizeof(double));
myFile.write(row[5], sizeof(double));
myFile.write(row[6], sizeof(double));
//myFile.write(row[0], sizeof(row[0]));
//myFile.write(row[1], sizeof(row[1]));
//myFile.write(row[2], sizeof(row[2]));
//myFile.write(row[3], sizeof(row[3]));
//myFile.write(row[4], sizeof(row[4]));
//myFile.write(row[5], sizeof(row[5]));
//myFile.write(row[6], sizeof(row[6]));
//myFile.put((char)row[0]);
//myFile.put((char)row[1]);
//myFile.put((char)row[2]);
//myFile.put((char)row[3]);
//myFile.put((char)row[4]);
//myFile.put((char)row[5]);
//myFile.put((char)row[6]);
//myFile << row[0] << row[1] << row[2] << row[3] << row[4] << row[5] << row[6];
}
mysql_free_result(res);
【问题讨论】:
-
什么是
group_concat? -
好的,让我给你看我的代码
-
这就是我今天早上所尝试的
-
不要使用
sizeof()尝试使用strlen(row[0]) + 1来给出字符串的长度,包括空终止符。 -
@Galik wow 就像一个魅力。非常感谢你。无论如何,你能给我一些关于你刚才所说的话的文件吗?