Cocoa och databaser

Tråden skapades och har fått 44 svar. Det senaste inlägget skrevs .

Tjohej,

Har bara skummat igenom befintliga inlägg lite men inte hittat svar på min fråga. Kanske redan har tagits upp.

Det jag funderar över är vilken strategi som är lämpligast om man vill skriva applikationer som jobbar med databaser. Jobbar man som konsult är det väl i stort sett det första man får lära sig, hur man accessar databaser. Men Cocoa-dokumentationen är tämligen tunn gällande detta. MYCKET märkligt måste jag säga. Eller tittar jag på fel ställen?

Det finns väl inget program som inte använder en databas av något slag. Det lilla jag sett om Core Data verkar ju fint, men nu är det så att jag har Sql Server som innehåller ruggigt mycket data, och jag vill koda mot den på bästa vis.

Min gissning är att jag ska skriva webbservicar som Cocoa kan kommunicera med, vilket också är ganska magert dokumenterat. Eller finns det nåt sätt att köra SQL direkt? Känns inte som en speciellt business-inriktad utvecklingsmiljö som inte har detta som standard.

Odbc? Jdbc?

  • Medlem
  • Kiruna
  • 2007-01-12 17:24

För SQL Server så går FreeTDS att kompilera för Mac OS X. JDBC-drivrutin finns att ladda ner gratis från Microsoft. ODBC-drivrutin kan man köpa från ex. Actual Technologies.

Och var i dokumentationen hittar jag ODBC och exempelkod? Och följer det med drivrutiner för Microsoft Sql Server?

30 dollars, nja det kan det ju vara värt. Eller så bygger jag en app som ställer väldigt många queries (3 raders-begränsning i trial-versionen) :).

Det är (just nu) bara för hobbybruk jag behöver detta. Behöver något sätt att kommunicera med min filmserver som innehåller IMDB:s hela filmdatabas samt mina egna filmer. Går att surfa in och glutta på innehållet här: http://filmer.servepics.com.

Eftersom jag är nybörjare på Cocoa skulle jag vilja ha dokumentation i samma nivå som Apples egna, som är utmärkt för det mesta, som visar hur man kan koda mot en ODBC-datakälla. Finns det?

Ingen?

När jag googlar i ämnet blir jag faktiskt lite orolig. Försöker jag hitta bra info om web services så stöter jag på flera som säger hur dåligt stödet är i Cocoa. Försöker man hitta nåt om ODBC så hittar man tredjepartsprodukter och väldigt lite konkreta exempel.

Är detta ett svart hål? I verkliga livet är ju trots allt detta det allra viktigaste.

Web services fungerar bra att utnyttja från Cocoa, däremot är det bedrövligt att inte ODBC eller något alternativt databas-API stödjs.

Om du vill koppla ett Cocoa-program till en web service, kolla på WSMakeStubs som följer med utvecklarverktygen. Det kan automatiskt skapa ett par Objective-C klasser som kapslar in en specificerad web service. Fungerar hyfsat!

  • Medlem
  • Kiruna
  • 2007-01-14 18:29

Personligen har jag bara jobbat mot PostgreSQL från Cocoa. Jag har använt mig av libpq direkt, vilket iofs har fungerat utmärkt, även om man önskar sig lite högre abstraktionsnivå ibland. ODBC-stödet i Mac OS X kommer från iODBC, så du kan ju kika lite på vad de säger.

Ursprungligen av spot:

Personligen har jag bara jobbat mot PostgreSQL från Cocoa. Jag har använt mig av libpq direkt, vilket iofs har fungerat utmärkt, även om man önskar sig lite högre abstraktionsnivå ibland.

Tittat på BaseTen? (bara developer preview än så länge)

Bara för att illustrera hur ont om referensinfo det är: om man idag googlar på "jdbc cocoa" så får man fram den här tråden, på sjunde plats!!! Givetvis som första svar om man bockar i att den ska söka enbart svenska sidor. Man blir lite avskräckt från att ge sig på detta...

Edit: Och tack för den info jag fått! Ska testa Actuals ODBC.

Senast redigerat 2007-01-14 20:40
  • Medlem
  • Stockholm
  • 2007-01-14 21:07
Ursprungligen av eternit:

Tjohej,

Har bara skummat igenom befintliga inlägg lite men inte hittat svar på min fråga. Kanske redan har tagits upp.

Det jag funderar över är vilken strategi som är lämpligast om man vill skriva applikationer som jobbar med databaser. Jobbar man som konsult är det väl i stort sett det första man får lära sig, hur man accessar databaser. Men Cocoa-dokumentationen är tämligen tunn gällande detta. MYCKET märkligt måste jag säga. Eller tittar jag på fel ställen?

Det finns väl inget program som inte använder en databas av något slag. Det lilla jag sett om Core Data verkar ju fint, men nu är det så att jag har Sql Server som innehåller ruggigt mycket data, och jag vill koda mot den på bästa vis.

Min gissning är att jag ska skriva webbservicar som Cocoa kan kommunicera med, vilket också är ganska magert dokumenterat. Eller finns det nåt sätt att köra SQL direkt? Känns inte som en speciellt business-inriktad utvecklingsmiljö som inte har detta som standard.

Mina gode vän Mark Lilback från Runtime Labs erbjuder: MacSQL Framework!.

Det finns en 60 dagar demo av ramverket utan begränsningar. Annars kostar det $699 per utvecklare.

MacSQL Framework! är det du söker och som sparkar rumpa!

Lycka Till!

/Cypher

Tror jag kör på nån egen variant av http-kommunikation, det verkar vara det lättaste sättet att få igång nåt utan för mycket jobb. Gör det ju enbart för mitt eget nöje. Apple har exempelkod som även en C-nybörjare som jag kan förstå.

Är kanske lat, är van vid all hjälp man får av verktyg och dokumentation (+ google förstås) när man kodar DotNet.

  • Medlem
  • Stockholm
  • 2007-01-15 15:25
Ursprungligen av eternit:

Är kanske lat, är van vid all hjälp man får av verktyg och dokumentation (+ google förstås) när man kodar DotNet.

Har du kollat WebObjects? Det är gratis och följer med Xcode.

/Cypher

När det gäller serversidan så går jag inte ifrån MS. Finns ingen anledning. Är duktig på DotNet och Sql Server som är jättebra verktyg för både lätt och tung databehandling. Skulle aldrig komma på tanken att tex bygga en webb med något annat. Varför göra det svårt för sig.

Däremot gillar jag givetvis OSX som klientoperativ. Det bästa som finns.

  • Medlem
  • Stockholm
  • 2007-01-16 10:57
Ursprungligen av eternit:

Skulle aldrig komma på tanken att tex bygga en webb med något annat. Varför göra det svårt för sig.

Men då ska du inte bygga en Cocoa-app heller. Då är det smidigare för dig om du bygger det hela i .Net et al på din Windowsburk som webbserver och använder en webbläsare på din Mac.

/Cypher

Håller inte med.

Bara jag löser kommunikationstrasslet mellan Cocoa och min server så räknar jag med att det är lättare att skriva ett snyggt Cocoa-program än att bygga en webb med motsvarande funktionalitet.

Vill ännu en gång uttrycka hur ofattbart det är att det finns så lite exempelkod på nätet. Apple kanske struntar i att supporta databaser eftersom de själva inte har någon databasserver.

Håller med Cypher.

  • Medlem
  • Mölndal
  • 2007-01-16 16:09

Nej, jag håller inte heller med. Valet mellan webb- och OS-baserad applikation tycker jag är en helt annan fråga.

Fast det är klart, om du ska ha applikationens kärna någon annan stans behöver du ju ändå hitta nåt bra ramverk för webservice eller remoting på Cocoa-sidan.

  • Medlem
  • Stockholm
  • 2007-01-16 19:50
Ursprungligen av memark:

Nej, jag håller inte heller med. Valet mellan webb- och OS-baserad applikation tycker jag är en helt annan fråga.

Fast det är klart, om du ska ha applikationens kärna någon annan stans behöver du ju ändå hitta nåt bra ramverk för webservice eller remoting på Cocoa-sidan.

Memark, om man är rätt händig i .Net, och lättare kan bygga det man vill ha med det, så är .Net mer rätt. Framförallt om man bara vill ha det för att själv kunna slå upp sina DVD-filmer i en egen kopia av IMDB!

Sen är självklart valet mellan Webb- och OS-baserad applikation en helt annan sak i ett helt annat användarfall.

Men on topic igen. Jag (och säkert många med mig) tar tacksamt emot real life kod-exempel.

Tex i stil med att ladda innehållet från en databastabell (dvs någon av de stora databaserna som är industristandard, framför allt Sql Server) i en lista, i en Cocoa-applikation. Gärna utan att installera mystiska tredjepartsprodukter.

Av vad jag funnit så är ovanstående till synes triviala moment ganska svårt att åstadkomma.

Som sagt, länka gärna till en artikel där detta förklaras.

memark:

Den enklaste formen av applikation kommunicerar ju direkt med databasen, antingen rena sql-frågor eller i fallet med sql server lagrade procedurer. Så något stort ramverk behöver man inte ta fram.

Dagens melodi är ju annars webservicar, vilket är perfekt. Då gör jag givetvis webservicen i dotnet. Men jag tycker att det är väldigt ont om bra info på nätet om detta. Det finns liksom ingen "så här gör du"-artikel för xcode och cocoa. Apples info är löjeväckande tunn.

Men Cypher... Applikationer i verkliga livet är inte antingen eller "webbaserade" (serverbaserad kanske är ett bättre ord). Applikationer som lever enbart på en klientmaskin är väldigt sällsynta annat än om det är hobbygrejer.

Jag har en maskin som enbart är sql server och webbserver. Där finns IMDB-registret som ligger på ett par gb i storlek, bland annat. Tex min filmdatabas som jag utvecklat i flera års tid.

Har redan en webbklient för att titta på innehållet som är skriven i .Net. När jag började med filmregistret var det VB6 som gällde, så min klientapp för underhåll av filmregistret är med andra ord en Windowsapplikation.

Det jag vill göra nu är en sjysst klientapplikation till OSX. Hur konstigt är det egentligen? Det skulle lika gärna kunna ha handlat om ett liknande användarfall för seriös verksamhet, låt säga ett kundsystem, eller handel med värdepapper.

Jag välkomnar fortfarande artiklar i ämnet! Och jag är säker på att jag inte är ensam om det.

Senast redigerat 2007-01-16 22:53
  • Medlem
  • Stockholm
  • 2007-01-17 13:50

eternit, du gör precis som du vill. Jag försöker bara ge dig goda råd.

Cypher, då tar jag gärna emot tips om bra länkar till kodexempel. Ditt tips om MacSQL Framework är bra, men det kan väl inte vara så man brukar koda mot Sql-databaser från Cocoa? Finns det inget best practice?

  • Medlem
  • Stockholm
  • 2007-01-17 16:47

eternit, det är vad jag använder i sådana fall. Om jag hade haft något annat tips så hade jag nämnt det redan.

  • Medlem
  • Stockholm
  • 2007-01-17 16:52

Här och här hittar du mer dokumentation om MacSQL Framework.

$700 ($150 men då får jag inte ge bort mina apps) för något som i Microsoftvärlden är gratis känns lite saftigt. Annars skulle jag nog ge MacSQL Framework en chans.

Tror att web services är det som är mest rationellt.

Att bygga en klientapp som snackar med en Microsoft SQL-server är inte svårt, om man gör den FileMaker Pro. Men du vill ju programmera allt själv, så...

  • Medlem
  • Stockholm
  • 2007-01-18 22:20
Ursprungligen av Taz_1999:

Att bygga en klientapp som snackar med en Microsoft SQL-server är inte svårt, om man gör den FileMaker Pro. Men du vill ju programmera allt själv, så...

Taz_1999 har helt rätt. Kollade in det med, eternit.

Här är ett exempel på det råaste sättet att anropa en web service från VB.Net. Man brukar inte göra på det här viset, normalt sett wrappas det snyggare. Men jag förmodar att motsvarande detta borde vara ganska enkelt att göra i Cocoa.

Dim oRequest As System.Net.WebRequest
Dim oResponse As System.Net.HttpWebResponse
Dim oStream As System.IO.Stream
Dim oReader As System.IO.StreamReader
Dim sResponse As String
Dim oBytes() As Byte
Dim sRequest As String

sRequest = "YourName=TestingTesting"
oBytes = System.Text.UTF8Encoding.UTF8.GetBytes(sRequest.ToCharArray)

oRequest = System.Net.WebRequest.Create("http://localhost/tosservices/Service.asmx/Get...")

oRequest.ContentType = "application/x-www-form-urlencoded"
oRequest.ContentLength = oBytes.Length
oRequest.Method = "POST"
oRequest.GetRequestStream.Write(oBytes, 0, oBytes.Length)

oResponse = CType(oRequest.GetResponse(), HttpWebResponse)

oStream = oResponse.GetResponseStream()
oReader = New StreamReader(oStream)
sResponse = oReader.ReadToEnd()

MessageBox.Show(sResponse)

oReader.Close()
oStream.Close()
oResponse.Close()

Bevaka tråden