2010-03-19 5 views
4

Je souhaite interagir avec une base de données MySQL de Matlab.
J'ai trouvé une "bibliothèque" mysql pour matlab here et la même chose sur mathworks.MySQL et Matlab

J'ai suivi les instructions pour compiler la bibliothèque et la compilation semble avoir réussi. Je reçois un fichier mex32 à la fin. Seulement, les instructions sur la première page se réfèrent à une Dll que j'ai besoin d'utiliser (je suppose que Dll était censé être généré).

Je ne suis pas familier avec le compilateur mex ou avec la compilation de modules externes pour Matlab.
Ai-je raté quelque chose d'anodin? Où est censé être le Dll?

Merci.

Répondre

4

La référence à la DLL est obsolète. Lorsque vous compilez une fonction mex sous Windows, vous la compilez en tant que dll (pas un fichier .exe). Ainsi, les fonctions mex compilées utilisaient l'extension .dll. Les fonctions Mex avec les extensions .dll fonctionnent toujours, mais il y a un avertissement que cela pourrait cesser d'être le cas dans le futur. Lorsque Windows 64 bits est arrivé, TheMathWorks avait besoin d'un moyen pour que les gens puissent compiler la même fonction mex pour Win32 et Win64, donc ils ont changé l'extension en .mexw32 et .mexw64, respectivement. Apparemment, ils n'ont pas complètement mis à jour la documentation.

+0

Merci pour la clarification. – Shaihi

0

OK, voici la solution à mon problème.
La compilation génère un fichier mex32 (32 parce que je l'ai compilé sous un systme 32 bits). Vous pouvez vérifier le fichier de sortie de la compilation en exécutant mexext. Donc, apparemment, un fichier mex32 est une version compilée du fichier C.
Une fois que j'ai placé le fichier dans un répertoire qui est dans le chemin de Matlab, cela a fonctionné.

Je suppose que la référence à la Dll dans le lien que j'ai fourni est soit obsolète ou faux.

+0

Ou, la documentation est confuse et confuse - un fichier mex est une DLL, sur un système Windows. 'mex', la commande Matlab, n'est en fait qu'un script wrapper qui appelle un compilateur et lui transmet les drapeaux et paramètres corrects pour créer un fichier DLL/mex –

4

Je vous recommande d'utiliser java pour connecter MATLAB et MySQL (ou toute autre base de données si nécessaire).

Le connecteur de base de données Java est simple à configurer. J'ai construit une classe java simple pour me connecter à la base de données - voir previous posting pour une solution brute mais fonctionnelle.

Le code Matlab fonctionne comme indiqué

% include java class 
import Jam.ConnectToDatabase 

% set up database connection info 
userName='myName'; 
userPassword='myPassword'; 
databaseUrl='jdbc:mysql://glnd2818898.internal.net/2000'; 

% create java class instance and open connection to the database 
ctd = ConnectToDatabase; 
ctd.openConnection(userName, userPassword, databaseUrl) 

Une fois que la connexion est ouverte, je peux alors utiliser les méthodes Java pour soumettre des requêtes SQL, créer des tableaux, insérer des données etc. Je ne l'avais jamais utilisé java avant, mais je téléchargé Netbeans et j'étais parti.

+0

+1 pour la recommandation, même si ce n'était pas la question. Je ne passe pas à cette solution puisque celle que j'ai en ce moment fonctionne. La note pour cela dans les forums de mathworks est haute. – Shaihi

+1

Merci pour cela - alors qu'il est vrai que la seule phrase directe avec un point d'interrogation était "où est censée être la DLL?" Je prenais le problème pour être au plus haut niveau et obtenir MATLAB pour interagir avec MySQL - efficacement le titre de votre question.Ayant eu des problèmes avec le compilateur de mex dans le passé alors le côté de solution alternative de java étapes le problème de mex. Je l'ai quand même travaillé, c'est génial. – Adrian