1

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

但是这些查询结构对我来说还是抽象的。成员列表应该是什么?为什么会有“?” 要插入的值在哪里?

4

1 回答 1

1

那些问号表示它是 PreparedStatement。这样的陈述对服务器和客户端都有好处。服务器的工作量更少,因为这样更容易解析这样的语句,客户端不需要担心 SQLInjection。客户端准备这样的查询,为输入值构建缓冲区并调用它。

与“正常”查询相比,此类语句的执行速度也非常快,尤其是在循环中,从 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)
于 2012-09-27T09:43:05.237 回答