Objective-C et MySQL
J'ai été en mesure de se connecter à une base de données MySQL dans mon application et l'utilisation de l'API C qui est presque exactement comme les commandes PHP (mysql_real_connect(), mysql_query(), mysql_fetch_array(), etc.) et dont je suis assez à l'aise avec, je ne suis pas sûr de savoir comment les données de la requête est renvoyée. Dois-je utiliser un tableau ou un dictionnaire et puis comment pourrais-je l'analyser. Par exemple, en PHP, je voudrais faire quelque chose comme ça (après la connexion):
$results = mysql_query("SELECT * FROM theDatabase");
if (mysql_num_rows($results) > 0) {
while($row = mysql_fetch_array($results)) {
print $row;
}
}
Quel serait l'objective-c équivalent? Merci.
Edit:
OK, donc j'ai fait des progrès: je peux faire la requête et obtenir le nombre de champs/lignes retournées, n'arrive pas à accéder à la donnée elle-même. Voici mon code, j'ai cousu ensemble de la base de données MySQL docs et quelques autres sites:
- (IBAction)dbConnect:(id)sender {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
MYSQL mysql;
mysql_init(&mysql);
if (!mysql_real_connect(&mysql, "10.1.1.99", "******", "******", "oldphotoarchive", 0, NULL, 0)) {
NSLog(@"%@", [NSString stringWithUTF8String:mysql_error(&mysql)]);
} else {
MYSQL_RES *result;
MYSQL_ROW row;
unsigned int num_fields;
unsigned int num_rows;
unsigned long *lengths;
if (mysql_query(&mysql,"SELECT * FROM photorecord")) {
//error
} else { //query succeeded, process any data returned by it
result = mysql_store_result(&mysql);
if (result) {
num_fields = mysql_num_fields(result);
while ((row = mysql_fetch_row(result))) {
lengths = mysql_fetch_lengths(result);
for(int i = 0; i < num_fields; i++) {
//the line below is my problem, printing row[i] fails, I get the GNU gdb error...
row[i] ? NSLog(@"%@", row[i]) : NSLog(@"wtf");
}
}
} else {//mysql_store_result() returned nothing; should it have?
if (mysql_errno(&mysql)) {
NSLog(@ "Error: %s\n", mysql_error(&mysql));
} else if (mysql_field_count(&mysql) == 0) {
//query does not return data
//(it was not a SELECT)
num_rows = mysql_affected_rows(&mysql);
}
}
}
}
[pool release];
}
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas fournis par Apple Objectif de l'API C de MySQL. Il y a quelques tiers des wrappers de l'API C, cependant. Jetez un oeil à la MySQL-Cacao Cadre, par exemple.
Donné votre familiarité avec le PHP et le C de l'API, il peut être plus facile pour vous d'utiliser le C de l'API. Vous aurez besoin pour gérer la conversion entre les objets et les types de données C, mais ce n'est pas beaucoup de travail.
Modifier
Vous êtes s'écraser car la ligne de la valeur retournée par l'API mysql n'est pas un objet, et votre chaîne de format est de dire
NSLog
de la traiter comme une. Le%@
est une chaîne de formatage de l'espace réservé pour un objet, pas un C type de données.Il n'est pas clair ce que la valeur est dans ce cas. Le contexte semble impliquer que c'est les données de l'image. Si c'est le cas, vous aurez probablement envie de créer un
NSData
objet de la goutte retourné par la requête, par exemple:Si votre résultat champs sont simplement des chaînes, utilisez
NSString
's-initWithBytes:length:encoding:
méthode: