SQLiteDatabase Library discussie in Ontwikkelen voor iOS forum; ( verdwijnt na registratie ) Het gebruik van SQLite binnen een applicatie is erg handig, maar om alles op te zetten kan vrij ingewikkeld zijn en wellicht een drempel om ...
|
Registreer | FAQ | Ledenlijst | Kalender | Berichten van vandaag | Zoeken |
#1
|
|||
|
|||
SQLiteDatabase Library
Het gebruik van SQLite binnen een applicatie is erg handig, maar om alles op te zetten kan vrij ingewikkeld zijn en wellicht een drempel om het te gebruiken. Dat moest makkelijker kunnen dacht ik. Ik ben dit weekend begonnen met het opzetten van een static library (dit omdat apple geen custom frameworks toelaat voor de iphone) die alles moest gaan versimpelen. Het idee was dat het extreem makkelijk gemaakt moest worden dat objecten uit de Cocoa Touch framework weg geschreven konden worden naar een database ,en wanneer gewenst, ook weer opgehaald.
Er zijn altijd mensen die dit liever allemaal zelf programmeren, maar ik vind het handig om te gebruiken en vind het leuk om dit te delen. Ben benieuwd wat jullie ervan vinden. De documentatie en de library zijn hier te vinden: CrystalMinds’ SQLiteDatabase Library CrystalMinds Hieronder vind je een voorbeeld van de library in actie. Code:
// Open een database SQLiteDatabase *db = [[SQLiteDatabase alloc] initWithFilename:@"database.sql" error:nil]; // Bekijk of de tabel 'movies' bestaat in deze database if (![db tableExists:@"movies"]) { // Indien de tabel 'movies' niet bestaat maak deze dan aan [db query:@"CREATE TABLE movies (year INTEGER, name VARCHAR, image BLOB, array BLOB, dict BLOB)" error:nil]; // Voordat we een regel gaan toevoegen aan de tabel definieren we de data die onder elke // kolom komt te staan. NSMutableDictionary *rowDataDictionary = [[[NSMutableDictionary alloc] init] autorelease]; [rowDataDictionary setObject:[NSNumber numberWithInt:1999] forKey:@"year"]; [rowDataDictionary setObject:@"The Matrix" forKey:@"name"]; [rowDataDictionary setObject:[UIImage imageNamed:@"TheMatrix.jpg"] forKey:@"image"]; [rowDataDictionary setObject:[NSArray arrayWithObjects:@"Actie", @"Science-Fiction", nil] forKey:@"array"]; [rowDataDictionary setObject:[NSDictionary dictionaryWithObject:@"Verenigde Staten" forKey:@"country"] forKey:@"dict"]; // Hier is waar de data van de regel daadwerkelijk in de database geplaatst wordt. [db insertIntoTable:@"movies" rowData:rowDataDictionary error:nil]; } // Laat alle regels van de tabel 'movies' in de debug console zien. NSLog ([[db resultsForQuery:@"SELECT * FROM movies" error:nil] description]); // Sluit de database netjes af en geef het geheugen vrij [db release]; Laatst gewijzigd door markvwijnen; 19-10-09 om 15:58. |
|
|
Gesponsorde links (verdwijnt na registratie)
|
#2
|
||||
|
||||
Wow, thanks
Ik heb SQLite altijd maar ingewikkeld gevonden |
#3
|
|||
|
|||
Ziet er interessant uit ik ga er eens naar kijken.
__________________
Software Engineer iPhone Developer |
#4
|
|||
|
|||
Er is toch een klein foutje in geslopen wat ervoor zorgde dat tableExists niet een betrouwbaar antwoord terug geeft. Heb het snel verholpen in versie 1.1.
|
#5
|
|||
|
|||
Ik gebruik in een app SQLite en vind het niet zo moeilijk, maar er wordt vaak gezegd dat CoreData beter is, omdat je minder dingen zelf hoeft te programmeren. Ik ben nog niet begonnen met CoreData, maar wat vinden jullie daarvan? Dat is ook een soort library om SQLite of een .plist file heen.
|
#6
|
|||
|
|||
Ik wist niet dat met 3.0 CoreDate is geintroduceerd op de iPhone. Weet nog niet wat ik ervan moet vinden op Wikipedia vond ik het volgende:
Citaat:
Naast dat ben ik helemaal blij met mn library ben er lekker mee aan de slag en het werkt fantastisch. |
#7
|
||||
|
||||
Mogen we dit eigenlijk in een applicatie gebruiken die we releasen?
Met credits uiteraard. |
#8
|
|||
|
|||
Ik vind SQLite ook makkelijker. Als je CoreData gebruikt bouw je in een apart programma de opbouw van je database en link je naar dat bestand in je code. Ik begrijp die code alleen nog niet.
|
#9
|
|||
|
|||
Citaat:
Ben op dit moment de library aan het uitbreiden met wat handige functies waaronder een shared database die het mogelijk maakt om een gemeenschappelijke database aan te roepen die in je hele applicatie kan bereiken. Code:
[[CMSQLiteDatabase sharedDatabase] createTable:@"applicationConfiguration" columns:nil error:nil]; Wordt alleen maar beter |
#10
|
|||
|
|||
|
#11
|
|||
|
|||
Misschien, maar eerst wil ik de basis van mijn app afhebben. Misschien zijn er tegen die tijd meer artikelen te vinden op internet. Of wert iemand anders op dit forum hoe het precies werkt?
|
#12
|
|||
|
|||
Wat ik zover over CoreData weet is dat het ongeveer zo werkt als "Hibernate" voor Java. Je maakt een domein model, en CoreData regelt het opslaan, de referenties etc. Dus als jij een class Auto hebt en een class Deur. dan kan je dus dit doen:
[mijnAuto setDeur:mijnDeur]; en dan iets van [coredata save:mijnAuto]; en dan wordt de auto gesaved met een foreign key naar mijnDeur. (P.S. dit is geen werkende code, alleen een voorbeeld. Onder voorbehoud.) |
#13
|
|||
|
|||
Ja! Versie 2.1 is uit van de SQLiteDatabase Library, op hetzelfde vertrouwde adresje. Alles is nog een stapje makkelijker gemaakt.
Door [CMSQLiteDatabase sharedDatabase]; aan te roepen ben je al helemaal klaar. De functie zorgt dat de datbase wordt aangemaakt en klaar voor gebruik. Om een tabel aan te maken kunnen we dus in de code direct dit neerzetten: [[CMSQLiteDatabase sharedDatabase] insertTable:@"nieuweTabel"]; Even alle methodes op een rij: Code:
Getting the SQLite Database + sharedDatabase Creating SQLiteDatabase Object - initWithFilename: Clear the Database - clearDatabase Managing Tables - allTables - clearTable: - deleteTable: - insertTable: - insertTable:withColumns: - renameTable:to: - tableExists: Managing Columns - allColumnsForTable: - allColumnsMetadataForTable: - columnExists:inTable: - deleteColumn:inTable: - insertColumns:intoTable: Managing Rows - deleteRowsinTable: - deleteRowWhereColumn:isEqualTo:inTable: - insertRow:intoTable: - rowsOfTable: - updateRowWithValues:inTable: - updateRowWithValues:whereColumn:isEqualTo:inTable: Executing a Query - lastQuery - query: - query:arguments: - resultsForQuery: - resultsForQuery:arguments: - rowForQuery:rowOffset: - rowForQuery:arguments:rowOffset: - variableForQuery:column:rowOffset: - variableForQuery:arguments:column:rowOffset: Error Handling - error - errorFromCode: |
#14
|
||||
|
||||
Ziet er heel erg goed uit! Ik heb nog maar 1x SQLite gebruikt in een project en vond het een echte pain..
Ga hier meteen even mee spelen. Hoe gaat hij trouwens om met grote aantallen queries uitvoeren? Is alles lekker snel? Geen problemen met blocked database bij het uitvoeren van een hoopje queries? |
#15
|
|||
|
|||
De library maakt volledig gebruik van de laatste SQLite versie 3.6.19 en voert ook met die snelheid de queries uit. Dus ja lekker snel Voor de rest moet je er zelf mee spelen ben benieuwd naar je mening, als je suggesties hebt laat ze dan ook vooral weten.
De library is puur een vertaal slag tussen het UIKit Framework en SQLite. Voorheen moest je zelf de functie schrijven die controleert of een database bestaat, zo niet dat deze dan gekopieerd wordt uit je Bundel of dat die er zelf een aanmaakt. Dit alles doet de library al voor je. Verder om objecten uit het UIKit framework op te slaan in een database en weer uit te lezen had je allerlei truukjes voor nodig, ook dit neemt de library voor je over. Ook zijn sommige dingen in SQLite niet 'direct' mogelijk. Zoals het opvragen van kolom informatie, of uberhaupt of een tabel bestaat of niet. De library zorgt dat die acties worden uitgevoerd die nodig zijn om die gegevens als nog te achterhalen. Zodat je simpel weg met columnExists en tableExists kan controleren of iets bestaat of niet. Ook is het fijn te weten dat met de sharedDatabase je overal in je applicatie toegang hebt tot je database. Heb alweer teveel gelult over de library Gewoon zelf proberen, het is makkelijk erin te zetten en ook weer te verwijderen als het je niet bevalt |
#16
|
|||
|
|||
Wat is voordeel ten op zichte van de andere reeds bestaande SQLite wrappers als FMDatabase?
|
#17
|
|||
|
|||
Ik ben niet direct bekend met de FMDatabase, maar heb het opgezocht in Google en vond dit
flycode - Project Hosting on Google Code. Ik denk dat je die bedoeld toch? Er zullen ongetwijfeld een boel andere SQLite wrappers bestaan en uiteindelijk is het de gebruiker/ontwikkelaar die bepaald of die uberhaupt een wrapper nodig heeft en wil gebruiken en welke het fijnst en best werkt. Dat is waarschijnlijk nog geen antwoord op je vraag, als ik dan een subjectief antwoord mag geven dan denk ik dat mijn library, wrapper of hoe je het ook wilt noemen zich onderscheid door een aantal punten: - Simpelheid - Gebruiksvriendelijkheid - Dankzij tableExists, insertTable, insertColumn, etc. geen specifieke kennis van MySQL nodig om bepaalde taken uit te voeren. Terwijl voor de geavanceerde gebruikers de opties wel blijven bestaan om er meer uit te halen. - Toegankelijkheid - Uitgebreide mogelijkheden (Denk hierbij aan de sharedDatabase, maar ook aan allColumnMetadataForTable, het leeg gooien van een tabel, database, het uitschrijven van de database in je console, etc.) Het enige belangrijke puntje wat nog ontbreekt is snelheid. Het enige wat aan de library nog echt ontbreekt is de mogelijkheid om de statements te cachen.Omwille van het beperkte geheugen van de iPhone heb ik deze functie er bewust uitgelaten omdat het al erg snel werkt zonder. In mijn achterhoofd wilde ik deze functie er wel nog in gooien, en in een volgende release zal dat ook zeker gaan gebeuren zodat deze wrapper ook in die categorie kan meedoen. Nogmaals, de library is gemaakt vanuit het perspectief dat iemand die geen ervaring heeft met het gebruiken van SQLite toch snel aan de slag kan. Zonder dat die hoeft te snappen waarom een Database gekopieerd moet worden naar de Documenten folder, waarom die query's moet preparen, waarom er een bind functie bestaat, etc. Ik hoop dat dit antwoord geeft op je vraag. |
#18
|
|||
|
|||
Ik heb zojuist 2.3 gereleased die gebruik maakt van het cachen van statements. Voor de snelheid.
Met maxAmountOfCachedStatements (die standaard op 3 staat) kan je aangeven hoeveel statements er maximaal gecached mogen worden. Als een nieuwe statement zich aanbiedt en het limiet is bereikt dan zal de statement die het minst gebruikt wordt eruit gehaald worden om ruimte te maken voor de nieuwe statement. Zal verder geen updates meer plaatsen op dit forum om de mensen niet te irriteren die de library niet interessant vinden. Laatst gewijzigd door markvwijnen; 26-10-09 om 19:39. |
#19
|
|||
|
|||
Ik vind het juist goed dat je vaak updates geeft en deze hier weergeeft. Er zijn een hoop mensen die het moeilijk vinden om te beginnen met SQLite, daarom is juist dit topic handig om beter met SQLite te worden.
Mensen die dit niet interessant vinden kijken toch dan niet. Keep up the good work.. ----------- Ondertussen ben ik mijzelf ook gaan verdiepen in SQLite met gebruik van deze library. Hij werkt uitstekend! Veel makkelijker in gebruik dan de standaard sqlite3 library. Ik raad het iedereen aan, als is het alleen maar om het even te testen! Laatst gewijzigd door Niels2678; 28-10-09 om 01:38. |
#20
|
|||
|
|||
Ik gebruik zelf geen SQLite meer sinds CoreData in de iPhone SDK zit. Heel snel op te zetten, je hoeft zelf geen queries te schrijven, alle bookkeeping wordt voor jou gedaan (automatisch unlimited undo mogelijkheden, autmatisch gewijzigde entries opslaan,...), fetchen van data wanneer die effectief gebruikt wordt (heel nuttig bij low memory devices zoals iPhone).
|
Er zijn 1 actieve gebruikers die momenteel deze discussie bekijken (0 leden en 1 gasten) |
|
Soortgelijke discussies |
||||
Discussie | Auteur | Forum | Reacties | Laatste bericht |
Foto: Verwijderen photo library | ahvroom | Muziek, foto & video | 0 | 02-05-11 15:52 |
Foto: Photo Library | R@TLeR | Muziek, foto & video | 0 | 12-05-10 16:31 |
Geen Library/Themes | freekydude | Jailbreak apps en thema's | 4 | 05-01-10 17:43 |
itunes library backup | EldertV | iTunes | 3 | 08-06-09 12:28 |
Foto: Photo Library | pontifex | Muziek, foto & video | 7 | 17-09-08 14:47 |
|
|