Domanda

Sto creando alcuni grafici che voglio aggiornare in una tabella del database. La procedura che sto seguendo è:

  1. creare i grafici come file PNG / jpeg.
  2. Leggi il file come un vettore binario
  3. SQLUpdate

Il mio codice per i punti 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)

C'è un tavolo df_DemandPatternMaster nel database con DemandPatternID chiave primaria, con record appropriato in atto con valore NULL nel 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)

finisco per inserire solo un byte di dati. Il motivo sembra è che pasta vede il vettore serializzato e crea un vettore con il testo del prefisso e suffisso. Ho anche provato passando direttamente l'handle di file PNG

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

Questa inoltre non riesce.

Si prega di avvisare.

È stato utile?

Soluzione

Forse, se si comprime il vettore pngfilecontents in una singola stringa. Qualcosa di simile:

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

Altri suggerimenti

Non ho provato questo con un database, ma ho avuto alcuni problemi di recente durante la serializzazione a / da un file di testo. Ecco una domanda ho chiesto che potrebbero essere collegati . Hai provato a usare l'ascii = interruttore T con serialize? Poi provare con e senza rawToChar.

Non ho un ambiente facile testare il tuo codice, ma sono interessato a ciò che si arriva con. Sto lavorando su un codice dove mi saranno eventualmente serializzazione di oggetti e la loro messa in un DB. Io non sono solo a quel punto ancora.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top