具有可变长度字符串

时间:2016-11-17 15:12:36

标签: db2 odbc db2-luw sqlbindparameter

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

DB2 docs中的示例执行此操作

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个字符(+ null-terminator)存储,而不管它的实际长度如何。更一般地说,如果你有一个非常长的字符串(比如500个字符)而且每个其他字符串都是一个字符,你仍然需要一个大小为[NUM_STRINGS] [500]的二维数组,这会浪费大量内存。

我想要做的是向SQLBindParameter传递一个类似于

的数组
SQLCHAR* Description[NUM_STRINGS];

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

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

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

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

0 个答案:

没有答案