从sqlite数据库中读取R中的二进制blob字段

时间:2014-11-17 15:55:31

标签: r sqlite blob

我想从R。

中读取sqlite数据库中的二进制字段

我成功了一个间接方法,包括首先在临时文件中导出二进制字段,通过shell命令调用sqlite3,然后使用readbin()命令读取这个二进制文件。这是详细的代码:

library(RSQLite)
fileConn<-file("script.sql")
writeLines(c('.load fileio.dll','SELECT writefile("tmp.bin",Curve) FROM Table1 WHERE Id=41;','.exit'), fileConn)
close(fileConn)

shell('sqlite3.exe database.sqlite < script.sql')

to.read<-file(description="tmp.bin","rb")
tmp<-readBin(to.read,"integer",n=10000,size=2)
plot(tmp)
close(to.read)

我想用R直接读取二进制字段,而不通过sqlite3创建临时文件。

根据建议(非常感谢!),我尝试了以下内容:

con <- dbConnect(SQLite(),dbname="database.sqlite")
tmp<-dbGetQuery(con,"SELECT quote(Curve) FROM Table1 WHERE Id=41")
tmp

改编:

quote(Curve)
1             '\023'

它看起来并不好,因为我应该得到一个870个整数元素的向量,从:

开始
head(good)
[1] 19 19  0 19 19 19

我的sql语句出了什么问题?如何用R直接读取二进制字段?

非常感谢您提前

1 个答案:

答案 0 :(得分:0)

How to write binary data into SQLite with R DBI's dbWriteTable()?中的解决方案类似,您可以使用blob literal将blob转换为quote() function。 也就是说,执行类似

的查询
SELECT quote(Curve) FROM Table1 WHERE ID = 41

,结果是

形式的字符串
X'1234ABCD....'

然后,您必须将十六进制数字转换回二进制数据。