我正在创建一些图表,我想将其更新到数据库表中。我遵循的程序是:

  1. 将图表创建为 png/jpeg 文件。
  2. 将该文件作为二进制向量读取
  3. sql更新

我的步骤 2 和 3 的代码:

pngfile <- file(<filename>, "rb")
N <- 1e6
repeat{
  pngfilecontents <- readBin(pngfile, what="raw", n=N)
  if(length(pngfilecontents) == N) N <- 5 * N else break
}
close(pngfile)

数据库中有一个表 df_DemandPatternMaster,其主键 DemandPatternID,在 pngFile 字段中具有 NULL 值的适当记录。

update.query <- "update df_DemandPatternMaster set "
update.query <- paste( update.query, " pngFile = '", serialize(pngfilecontents, NULL) , "' where DemandPatternID = ", , sep="")
d <- sqlQuery(connection, update.query)

我最终只插入一个字节的数据。原因似乎是粘贴看到序列化向量并创建一个带有前缀和后缀文本的向量。我也尝试过直接传递 png 文件句柄

pngfile <- file(<filename>, "rb")
update.query <- paste( update.query, " pngFile = '", pngfile, "' where DemandPatternID = ", , sep="")

这也失败了。

请指教。

有帮助吗?

解决方案

也许如果您将 pngfilecontents 向量折叠成单个字符串。就像是:

update.query <- "update df_DemandPatternMaster set "
update.query <- paste( update.query, " pngFile = '", paste(pngfilecontents, collapse="") , "' where DemandPatternID = ", sep="")

其他提示

我还没有在数据库中尝试过这一点,但最近在序列化到文本文件或从文本文件序列化时遇到了一些挑战。这是一个 我问的问题可能相关. 。您是否尝试过将 ascii=T 开关与序列化一起使用?然后尝试使用和不使用 rawToChar。

我没有一个简单的环境来测试您的代码,但我对您的想法很感兴趣。我正在编写一些代码,最终将序列化对象并将它们放入数据库中。我只是还没到那一步。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top