ODBC c ++(oracle)中的空blob插入查询

时间:2012-09-27 08:52:58

标签: c++ sql oracle odbc

我需要在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

但这些结构的查询或抽象给我。会员名单应该是什么?为什么会有“?”要插入的值在哪里?

1 个答案:

答案 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)
相关问题