Objective-C koppelen met MySQL

Ik ben van de week beginnen met programmeren in Objective-C / cocoa op de mac, maar ik dacht dat dit topic beter paste in programmeren dan in het forum over de Mac, omdat het (waarschijnlijk ook over gewoon C gaat).

Ik heb dus van de week eerst een paar tutorials gedaan over cocoa, en heb toen zelfstandig een simpele rekenmachine in elkaar geflanst, so far, so good.

Maar, omdat het uiteindelijke doel een applicatie is die met een MySQL database gaat communiceren is, wilde ik nu proberen een connectie te maken met MySQL en daar iets nuttigs mee te gaan doen.

Bij het zoeken naar informatie ben ik kortweg twee mogelijkheden tegengekomen:

  • Het gebruiken van een Objective-C Framework MySQL-Cocoa
  • Het gebruiken van de MySQL C api (Objective-C is een supertaal iets op C, en dus kan het normale C code verwerken (toch?))

Ik wilde dus eerst de simpele oplossing proberen, de C api gebruiken van MySQL, wat resulteerde in het volgende:

[code:1:8f227e215e]
#import <Cocoa/Cocoa.h>
#import </usr/local/mysql/include/mysql.h>

int main(int argc, char *argv[]){

MYSQL *conn;

char *server = &quot;localhost&quot;;
char *user = &quot;root&quot;;
char *password = &quot;test&quot;;
char *database = &quot;blauw&quot;;

mysql_real_connect&#40;conn,server,user,password,database,0,NULL,0&#41;;

return NSApplicationMain&#40;argc,  &#40;const char **&#41; argv&#41;;

}
[/code:1:8f227e215e]

Gewoon een stukje waarmee de database connectie opgezet zou worden. Volgens de docs op MySQL.com zou het zo moeten werken, maar ik krijg nu de volgende error:

[code:1:8f227e215e]
ZeroLink: unknown symbol ‘_mysql_real_connect’

database2 has exited due to signal 6 (SIGABRT).
[/code:1:8f227e215e]

Zoeken op google levert helaas weinig op, het enige nuttige wat ik kon vinden was dat SIGABRT een error was waarmee C programma’s onbedoeld stoppen… maar daar was ik al achter :stuck_out_tongue:

Er staat echter iets vermeld over unknown symbol, wat zou betekenen dat die methode niet in de klasse voorkomt, maar dat lijkt me sterk. De header file kan gewoon geopend worden (juiste rechten) en ik kan er wel in zoeken, maar wat er in die file staat is nog een beetje te ver gegrepen voor mij.

Bij mij werkt het wel. Ik heb heel wat moeten zoeken om het werkend te krijgen. Je moet ZERO link uitzetten in project properties.

Ook moet je other linking flags zetten. Ik ben niet thuis en kan je niet precies aangeven wat je daar in moet vulen.
Kan later wel.

dank voor de reactie iig, ik zal ondertussen ook even zoeken op google, heb nu weer wat nieuwe termen :)

Volgens mij kun je beter een Cocoa framework gebruiken voor sql, bijvoorbeeld [url=http://mysql-cocoa.sourceforge.net/index.html]mysql-cocoa[/url]. Dat maakt je leven een stuk makkelijker. :wink:

Apple biedt CoreData:

http://developer.apple.com/macosx/coredata.html
http://en.wikipedia.org/wiki/Core_Data

(Tot mijn verbazing is er geen adaptor voor MySQL, alleen voor SQLite…:frowning:

~henq

Goed, ik heb de app nu een beetje op orde en wilde een release build maken, zodat ik hem kan testen op andere computers. Echter, ik krijg hierbij de volgende warning:

warning /usr/local/mysql/lib/libmysqlclient.a archive’s cputype (7, architecture i386) does not match cputype (18) for specified -arch flag: ppc (can’t load from it)

Door die warning kan hij vervolgens een heleboel symbolen niet vinden voor de ppc versie. Nu maakt dat mij niet zoveel uit, want ik wil toch niet persee een ppc versie hebben (de applicatie is bedoeld voor een intel mac), maar het zou leuk zijn als het toch zou werken (vooruitkijkend naar andere projecten).

Nou heb ik op google even gezocht hierop, maar ik kon daar niet veel anders vinden dan het uitschakelen van zero-linking, maar dat had ik al gedaan.

Nu heb ik dus 2 vragen:

  • hoe maak ik een intel only applicatie?
  • weet iemand wat er fout gaat en hoe ik dat kan verbeteren?

Edit:
ik zie net dat je voor een intel only app bij de group targets in xcode naar info moet gaan en daar bij architectures i386 moet invullen, dus ik krijg er nu wel een werkende intel release uit. Nu nog een ppc versie…