如何使用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。除了内存使用问题之外,它确实可以正常工作。