//

SQLiteDatabase Library

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 ...



Ga terug   iPhone, iPod touch, iPad en Apple TV forum > Development > Ontwikkelen voor iOS
Wachtwoord vergeten? Registreren!
Registreer FAQ Ledenlijst Kalender Berichten van vandaag

Reageren

 

Discussietools Weergave
  #1  
Oud 18-10-09, 20:13
markvwijnen markvwijnen is offline
• iOS 5.0.1
• 5.0.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jan 2009
Berichten: 113
Standaard 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.
Advertentie
Advertentie Gesponsorde links (verdwijnt na registratie)

  #2  
Oud 18-10-09, 21:31
JWVD's schermafbeelding
JWVD JWVD is offline
• iOS 5.0
• 5.0
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jul 2008
Locatie: Renkum
Berichten: 312
Stuur een bericht via Instant Messenger naar JWVD Stuur een bericht via MSN naar JWVD
Standaard

Wow, thanks
Ik heb SQLite altijd maar ingewikkeld gevonden
  #3  
Oud 19-10-09, 15:35
Whacko Whacko is offline
• iOS 7.1.2
• 5.1.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jan 2009
Berichten: 484
Standaard

Ziet er interessant uit ik ga er eens naar kijken.
__________________
Software Engineer
iPhone Developer
  #4  
Oud 19-10-09, 19:59
markvwijnen markvwijnen is offline
• iOS 5.0.1
• 5.0.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jan 2009
Berichten: 113
Standaard

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  
Oud 20-10-09, 12:13
Frog Frog is offline
• iOS 4.2.1
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Sep 2008
Berichten: 379
Standaard

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  
Oud 20-10-09, 12:28
markvwijnen markvwijnen is offline
• iOS 5.0.1
• 5.0.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jan 2009
Berichten: 113
Standaard

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:
Core Data is part of the Cocoa API in Mac OS X first introduced with Mac OS X 10.4 Tiger and for the iPhone with iPhone SDK 3.0. It allows data organised by the relational entity-attribute model to be serialised into XML, binary, or SQLite stores.
Van wat ik begrijp organiseer je de data binnen Core Data en sla je het alsnog op in een SQLite database. Persoonlijk ben ik zo opgegroeit met MySQL dat ik het beheren van de data via SQLite op dit moment gemakkelijker vindt dat ik het nog niet de moeite waard vindt om er verder in te verdiepen, maar ben wel heel nieuwsgierig naar jullie ervaringen.

Naast dat ben ik helemaal blij met mn library ben er lekker mee aan de slag en het werkt fantastisch.
  #7  
Oud 20-10-09, 17:00
JWVD's schermafbeelding
JWVD JWVD is offline
• iOS 5.0
• 5.0
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jul 2008
Locatie: Renkum
Berichten: 312
Stuur een bericht via Instant Messenger naar JWVD Stuur een bericht via MSN naar JWVD
Standaard

Mogen we dit eigenlijk in een applicatie gebruiken die we releasen?
Met credits uiteraard.
  #8  
Oud 20-10-09, 17:19
Frog Frog is offline
• iOS 4.2.1
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Sep 2008
Berichten: 379
Standaard

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  
Oud 20-10-09, 17:37
markvwijnen markvwijnen is offline
• iOS 5.0.1
• 5.0.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jan 2009
Berichten: 113
Standaard

Citaat:
Oorspronkelijk geplaatst door JWVD Bekijk bericht
Mogen we dit eigenlijk in een applicatie gebruiken die we releasen?
Met credits uiteraard.
De licentie voor de library laat dit oorspronkelijk niet toe, maar zegt ook dat als je toestemming hebt van de auteur de licentie niet op gaat. Met andere woorden mocht je het echt in een applicatie willen gebruiken stuur dan even een mailtje dan kan ik je toestemming geven ;-)

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];
En hier zie je ook direct de nieuwe methode createTable voor het snel aanmaken van nieuwe tabellen. Ook ben ik bezig met allColumnsForTable en columnExistsInTable:.

Wordt alleen maar beter
  #10  
Oud 20-10-09, 17:39
markvwijnen markvwijnen is offline
• iOS 5.0.1
• 5.0.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jan 2009
Berichten: 113
Standaard

Citaat:
Oorspronkelijk geplaatst door Frog Bekijk bericht
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.
Ben je van plan het dieper uit te zoeken Frog?
  #11  
Oud 20-10-09, 18:49
Frog Frog is offline
• iOS 4.2.1
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Sep 2008
Berichten: 379
Standaard

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  
Oud 21-10-09, 12:22
Whacko Whacko is offline
• iOS 7.1.2
• 5.1.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jan 2009
Berichten: 484
Standaard

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  
Oud 23-10-09, 00:02
markvwijnen markvwijnen is offline
• iOS 5.0.1
• 5.0.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jan 2009
Berichten: 113
Standaard

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  
Oud 25-10-09, 17:40
SkyTrix's schermafbeelding
SkyTrix SkyTrix is offline
• iOS 5.0 Beta
• 4.3.5
• Besturingssysteem: Mac OS X
 
Geregistreerd: Apr 2009
Berichten: 63
Standaard

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  
Oud 25-10-09, 20:56
markvwijnen markvwijnen is offline
• iOS 5.0.1
• 5.0.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jan 2009
Berichten: 113
Standaard

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  
Oud 25-10-09, 21:12
P-development P-development is offline
• iOS 4.0
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Aug 2008
Berichten: 77
Standaard

Wat is voordeel ten op zichte van de andere reeds bestaande SQLite wrappers als FMDatabase?
  #17  
Oud 25-10-09, 22:20
markvwijnen markvwijnen is offline
• iOS 5.0.1
• 5.0.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jan 2009
Berichten: 113
Standaard

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  
Oud 26-10-09, 19:37
markvwijnen markvwijnen is offline
• iOS 5.0.1
• 5.0.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jan 2009
Berichten: 113
Standaard

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  
Oud 27-10-09, 00:34
Niels2678 Niels2678 is offline
• iOS 4.0.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jun 2009
Locatie: De Lier - Westland
Berichten: 17
Stuur een bericht via MSN naar Niels2678
Standaard

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  
Oud 08-11-09, 20:44
Matisse Matisse is offline
• iOS 5.0 Beta
• 5.0 Beta
• Besturingssysteem: Mac OS X
 
Geregistreerd: Aug 2008
Locatie: Antwerpen
Berichten: 89
Standaard

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).
Reageren



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

Regels voor berichten
Je mag geen nieuwe discussies starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit
Trackbacks are Aan
Pingbacks are Aan
Refbacks are Uit



Alle tijden zijn GMT +2. Het is nu 07:42.