5

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

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

我的第 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)

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

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

这也失败了。

请指教。

4

2 回答 2

2

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

update.query <- "update df_DemandPatternMaster set "
update.query <- paste( update.query, " pngFile = '", paste(pngfilecontents, collapse="") , "' where DemandPatternID = ", sep="")
于 2010-02-20T03:46:31.517 回答
0

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

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

于 2010-02-19T16:25:16.033 回答