我需要在oracle数据库中插入一个blob。我正在使用c ++和ODBC库。 我被困在插入查询和更新查询。对我来说,如何进行blob插入查询是抽象的。 我知道如何查询非blob列。 我的表结构是:
REATE TABLE t_testblob (
filename VARCHAR2(30) DEFAULT NULL NULL,
apkdata BLOB NULL
)
我在插入和更新时找到了一个例子:
INSERT INTO table_name VALUES (memberlist,?,memberlist)
UPDATE table_name SET ImageFieldName = ? WHERE ID=yourId
但这些结构的查询或抽象给我。会员名单应该是什么?为什么会有“?”要插入的值在哪里?
答案 0 :(得分:1)
这些问号意味着它是PreparedStatement。这样的陈述对服务器和客户端都有好处。服务器工作较少,因为它更容易解析这样的语句,客户端不需要担心SQLInjection。客户端准备此类查询,为输入值构建缓冲区并调用它。
与" normal"相比,此类声明的执行速度非常快。查询,特别是在循环中,从csv文件等导入数据。
我不知道你使用什么ODBC C ++库,而ODBC是严格的C库。其他语言如Java或Python也可以使用它。我认为最简单的是Python中的例子:
cursor = connection.cursor()
for txt in ('a', 'b', 'c'):
cursor.execute('SELECT * FROM test WHERE txt=?', (txt,))
当然,这样的PreparedStatement也可以在INSERT或UPDATE语句中使用,对于您的示例,它可以看起来像:
cursor.execute("INSERT INTO t_testblob (filename, apkdata) VALUE (?, ?)", filename, my_binary_data)