2010-02-24 6 views
1

Comment obtenir la taille des données dans un champ BLOB dans le jeu de résultats?(en C++ et MySQL Connecteur C++)MySQL, C++: Besoin de taille de Blob pour lire les données BLOB

Pour lire les données du jeu de résultats, j'allouer de la mémoire pour le premier. Afin d'allouer de la mémoire, j'ai besoin de connaître la taille des données blob dans le jeu de résultats.

Recherche sur le web et StackOverflow, j'ai trouvé deux méthodes: OCTECT et flux BLOB.

Une méthode pour trouver la taille BLOB consiste à utiliser la fonction OCTECT(), ce qui nécessite une nouvelle requête et produit un nouvel ensemble de résultats. Je préférerais ne pas utiliser cette méthode.

Une autre méthode consiste à utiliser le flux BLOB et à chercher à la fin, et obtenir la position du fichier. Cependant, je ne sais pas si le flux peut être rembobiné au début afin de lire les données. Cette méthode nécessite une lecture supplémentaire du flux entier.

ResultSet Les

et ResultSetMetaData interfaces de MySQL Connector C++ 1.0.5 ne fournissent pas une méthode pour obtenir la taille des données dans un champ (colonne).

Existe-t-il un processus permettant d'obtenir la taille des données dans un champ BLOB en ne donnant que le jeu de résultats et un nom de champ? J'utilise MySQL Connector C++ 1.0.5, C++, Visual Studio 2008, Windows Vista/XP et "Server version: 5.1.41-communauté MySQL Community Server (GPL)".

Répondre

3

Vous pouvez faire une sélection comme:

select LENGTH(content),content where id=123; 

où le contenu est le champ blob.

Cordialement. voir: LENGTH(str)

+0

Quel est le nom du champ, dans le jeu de résultats, pour le champ LENGTH()? –

+0

Il devrait être possible d'accéder au résultat avec l'index (ici 1). En Java, je vais appeler 'rs.setInt (1)'. – elou

+1

Le nom du champ pour la longueur() est comme écrit: 'longueur (contenu)'. Pour obtenir un nom sensé, vous devez faire 'length (content) comme contentLength' ou similaire. –