Pergunta

Estou criando alguns gráficos que desejo atualizar para uma tabela de banco de dados. O procedimento que estou seguindo é:

  1. Crie os gráficos como um arquivo PNG/JPEG.
  2. Leia esse arquivo como um vetor binário
  3. SQLUPDATE

Meu código para as etapas 2 e 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)

Existe uma tabela df_demandpatternmaster no banco de dados com a chave de chave primária, com registro apropriado em vigor com valor nulo no campo PNGFile.

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

Acabei inserindo apenas um byte de dados. A razão pela qual parece é que a pasta vê o vetor serializado e cria um vetor com o texto prefixo e sufixo. Eu também tentei passar o identificador de arquivo PNG diretamente

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

Isso também falha.

Por favor informar.

Foi útil?

Solução

Talvez se você colapsar o vetor pngFileContents em uma única string. Algo como:

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

Outras dicas

Eu não tentei isso com um banco de dados, mas tive alguns desafios recentemente ao serializar para/para um arquivo de texto. Aqui está um Pergunta que fiz isso pode estar relacionado. Você já tentou usar o interruptor ASCII = T com serialização? Em seguida, tente com e sem RawtoChar.

Não tenho um ambiente fácil para testar seu código, mas estou interessado no que você cria. Estou trabalhando em algum código em que eventualmente estarei seriando objetos e colocando -os em um banco de dados. Ainda não estou até esse ponto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top