1

如何使用 SQLBindParameter 以节省内存的方式将字符串数组写入 DB2 中的 VARCHAR 字段?

DB2 文档中的示例就是这样做的

SQLCHAR Description[NUM_PRODS][257] = {
    "Aquarium-Glass-25 litres", "Aquarium-Glass-50 litres",
    "Aquarium-Acrylic-25 litres", "Aquarium-Acrylic-50 litres",
    "Aquarium-Stand-Small", "Aquarium-Stand-Large",
    "Pump-Basic-25 litre", "Pump-Basic-50 litre",
    "Pump-Deluxe-25 litre", "Pump-Deluxe-50 litre",
    "Pump-Filter-(for Basic Pump)",
    "Pump-Filter-(for Deluxe Pump)",
    "Aquarium-Kit-Small", "Aquarium-Kit-Large",
    "Gravel-Colored", "Fish-Food-Deluxe-Bulk",
    "Plastic-Tubing"
};

rc = SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 257, 0, Description, 257, NULL);

我可以让它毫无问题地工作,但它不是很有效,因为每个字符串都使用 256 个字符(+空终止符)存储,而不管其实际长度如何。更一般地说,如果你有一个很长的字符串(比如 500 个字符)并且每个其他字符串都是一个字符,你仍然需要一个大小为 [NUM_STRINGS][500] 的二维数组,这会浪费大量内存。

我想做的是将 SQLBindParameter 传递给一个看起来像的数组

SQLCHAR* Description[NUM_STRINGS];

其中数组的每个元素都指向一个字符串。这会更节省内存,因为每个字符串只使用它需要的空间,但我不知道如何使用 SQLBindParameter 让它工作。任何帮助,将不胜感激。

注意:任何 DB 的一般答案都会很好,但特定于 DB2 的答案也会有所帮助。

我正在使用的大小涉及数百万个长度各不相同的字符串,因此内存效率是一个重要因素。

我实际上是在 Linux 上使用 DB2,但对于这个特定的用例,我能找到的唯一示例是 DB2 for z/OS 文档。除了内存使用问题外,它确实可以正常工作。

4

0 回答 0