ObjC Mysql et MAMP avec Karl Kraft

bebbeb

Membre confirmé
19 Mai 2007
12
0
Saint-Gaudens
Quelqu'un a-t-il réussi à utiliser la librairie de M. Karl Kraft pour accéder à MYSQL depuis xCode?
Et plus particulièrement à MYSQL de MAMP.

J'obtiens ces résultats, résultats si je puis dire lol:

2011-11-09 17:31:41.090 TestMysql[3480:707] Connecting to MysqlServer: 127.0.0.1:8889 as user root
2011-11-09 17:31:41.092 TestMysql[3480:707] Failed to connect: Error: Lost connection to MySQL server at 'reading initial communication packet', system error: 61
(mysqlServer description:)
2011-11-09 17:31:41.092 TestMysql[3480:707] MysqlServer: 127.0.0.1:8889 as user root
(mysqlConnection description:évidemment!)
2011-11-09 17:31:41.093 TestMysql[3480:707] (null)
2011-11-09 17:31:41.093 TestMysql[3480:707] connection is nil

Voilà, je débute la prog sur Mac, alors excusez-moi d'avance si la question est inepte!
Merci à tous,

Pour la librairie c'est ici : http://www.karlkraft.com/index.php/2011/06/07/mysql-for-iphone-and-osx-version-2-0/
il y a trois posts sur le sujet, sans trop d'explication hélas.

J'ai changé çà dans mysql_version.h :

/* Copyright Abandoned 1996, 1999, 2001 MySQL AB
This file is public domain and comes with NO WARRANTY of any kind */

/* Version numbers for protocol & mysqld */

#ifndef _mysql_version_h
#define _mysql_version_h

#ifdef _CUSTOMCONFIG_
# include <custom_conf.h>
#else
# define PROTOCOL_VERSION 10
# define MYSQL_SERVER_VERSION "6.0.0"
# define MYSQL_VERSION_ID 60000
# define MYSQL_PORT 8889
# define MYSQL_PORT_DEFAULT 0
# define MYSQL_UNIX_ADDR "/Applications/MAMP/tmp/mysql/mysql.sock"
# define MYSQL_CONFIG_NAME "my"
# define MYSQL_COMPILATION_COMMENT "Source distribution"
#endif /* _CUSTOMCONFIG_ */

#ifndef LICENSE
# define LICENSE GPL
#endif /* LICENSE */

#endif /* _mysql_version_h */

Y'a peut-être l'explication. Je ne sais pas comment il faudrait créer custom_conf.h donc...
Les paramètres sont peut-être inexacts.
 
Dernière édition:
Bon, j'ai bossé 24h dessus et j'ai trouvé le problème tout seul! Alors je poste les résultats de mes recherches en imaginant que cela pourra aider quelques-uns d'entre vous qui voudraient utiliser MAMP en local avec un logiciel cocoa ou même le simulateur iOS (pas testé mais ça devrait fonctionner).

Tout d'abord, téléchargez la dernière version de M. Kraft ici : http://www.karlkraft.com/index.php/2011/06/07/mysql-for-iphone-and-osx-version-2-0/

Dézippez et ajoutez tout le dossier obtenu ("mysql_connector") à un projet Xcode. Retirer le groupe "lib/iOS" pour éviter l'erreur de compilation (on ne garde que la librairie pour une application cocoa, ou iOS si vous voulez essayer!).

Dans les fichiers MysqlServer.h et .m ajoutez un NSString que j'ai appelé sock:
.h:
NSString *sock;
@property(copy) NSString *sock;
.m:
@synthesize host,user,password,schema,sock;
- init;
{
[super init];
self.host=@"localhost";
self.user=@"root";
self.password=@"root";
self.schema=@"maBase";
self.sock=@"/Applications/MAMP/tmp/mysql/mysql.sock";
self.port=8889;
self.flags=CLIENT_FOUND_ROWS;
self.connectionTimeout=30;
return self;
}
selon vos paramètres MAMP changez le port, le user/password et évidemment le nom de votre base.

Dans MysqlConnection.m:
if (!mysql_real_connect(&(newObject->_connection),
[server.host UTF8String],
[server.user UTF8String],
[server.password UTF8String],
[server.schema UTF8String],
server.port, // default port
[server.sock UTF8String], // default socket
server.flags)) {
MysqlLog(@"Failed to connect: Error: %s\n",mysql_error(&(newObject->_connection)));
[newObject release];
return nil;
} else {
MysqlLog(@"Connected to %@",server);
}


Dans votre AppDelegate.m:
#import "MysqlServer.h"
#import "MysqlConnection.h"
#import "MysqlFetch.h"

(Ça! je ne suis pas sûr de l'utilisation, mais ça marche comme-çà!)

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application

MysqlServer *server = [[[MysqlServer alloc] init] autorelease];
MysqlConnection *connection = [MysqlConnection connectToServer:server];

MysqlFetch *lesResultats = [MysqlFetch fetchWithCommand:mad:"SELECT * FROM resultats" onConnection:connection];

NSLog(@"Nombre de résultats : %lu",[lesResultats.results count]);
}

Et voilà c'est fait:

2011-11-10 20:34:25.818 ObjectiveMySQL[4928:707] Connecting to MysqlServer: localhost:8889 as user root
2011-11-10 20:34:25.821 ObjectiveMySQL[4928:707] Connected to MysqlServer: localhost:8889 as user root
2011-11-10 20:34:25.821 ObjectiveMySQL[4928:707] Client character set: utf8
2011-11-10 20:34:25.822 ObjectiveMySQL[4928:707] SELECT * FROM resultats
2011-11-10 20:34:25.828 ObjectiveMySQL[4928:707] Nombre de résultats : 52

Pour avoir les résultats dans la console, modifiez dans MysqlException.h:
#define MysqlLog(x...) NSLog(x);

Amusez-vous bien.

Je vous laisse voir pour les releases, mettre tout çà en ordre...
 
Dernière édition: