SQL ou CoreData?

CeetixCeetix Membre
04:43 modifié dans API UIKit #1
Salut tout le monde !
Voilà  je vais commencer une application iPhone et j'ai besoin d'une BDD.
Ma question est simple : que choisir? SQL ou CoreData (maintenant que c'est disponible pour l'iphone) ?

Et en bonus, j'aurai besoin que l'user puisse exporter des données au format Excel ou autre tableur, c'est possible à  faire?
Merci :)

Réponses

  • muqaddarmuqaddar Administrateur
    04:43 modifié #2
    Je dirais 2 choses :

    1) je crois que de toute manière CoreData s'appuie sur une base SQLite...
    2) as-tu envie d'apprendre CoreData ?

    Donc la vraie question est savoir si tu vas utiliser CoreData ou bien un frameWork SQL intégré à  l'appli + des requêtes perso.
  • CeetixCeetix Membre
    04:43 modifié #3
    piouff j'en sais rien là . Moi j'ai juste besoin d'une BDD. Je choisirai celle qui est la plus simple et efficace à  utiliser :)
  • muqaddarmuqaddar Administrateur
    04:43 modifié #4
    Si t'as déjà  fait du SQL, ça peut être plus rapide de passer par un framework SQL (en temps de conception je parle).
  • CéroceCéroce Membre, Modérateur
    04:43 modifié #5
    Simple et efficace, alors oublie CoreData.
    (ce n'est pas du trollisme, je peux défendre cette affirmation).
  • CeetixCeetix Membre
    04:43 modifié #6
    Ok merci les gars, bah je vais m'orienter vers SQL alors. Tu avais parlé d'un framework cool je crois muqaddar ?
  • Paisible.frPaisible.fr Membre
    04:43 modifié #7
    dans 1245423064:

    Simple et efficace, alors oublie CoreData.
    (ce n'est pas du trollisme, je peux défendre cette affirmation).

    Admettons : tu conseille quoi comme framework SQL en remplacement de CoreData (pour une appli mac je parle, pas iPhone) ?
  • muqaddarmuqaddar Administrateur
    04:43 modifié #8
    dans 1245423456:

    Ok merci les gars, bah je vais m'orienter vers SQL alors. Tu avais parlé d'un framework cool je crois muqaddar ?


    http://www.mobileorchard.com/iphone-sqlite-tutorials-and-libraries/

    J'ai utilisé FMDatabase.
  • CeetixCeetix Membre
    04:43 modifié #9
    Merci !
    Sur ta page ils parlent de SQLite et après de librairie (FMDatabase,etc ....). Il faut donc en fait créer une BDD avec SQLIte et ensuite grâce à  une librairie manier cette BDD SQLite ?
  • muqaddarmuqaddar Administrateur
    04:43 modifié #10
    dans 1245423891:

    Merci !
    Sur ta page ils parlent de SQLite et après de librairie (FMDatabase,etc ....). Il faut donc en fait créer une BDD avec SQLIte et ensuite grâce à  une librairie manier cette BDD SQLite ?


    Exactement.
    Tu peux le créer avec un plugin FireFox qui gère les bases SQLite, SQLite Manager (ce que j'ai fait). Ils en parlent dans un des tutoriaux.

    Où tu dois pouvoir trouver phpMySQLite (ou un truc de ce genre, je sais plus le nom exact, mais ça sous-entend qu'il te faut PHP d'installé).
  • AliGatorAliGator Membre, Modérateur
    04:43 modifié #11
    Ou directement avec l'outil en ligne de commande "sqlite3" fourni avec Mac OSX (ou peut-être uniquement fourni si on a les Dev Tools d'installés, bref).

    "man sqlite3" dans le terminal (ou en suivant mon lien) pour plus d'infos.
    For  example, to create a new database file named "mydata.db", create a
          table named "memos" and insert a couple of records into that table:

          $ sqlite3 mydata.db
          SQLite version 3.1.3
          Enter ".help" for instructions
          sqlite> create table memos(text, priority INTEGER);
          sqlite> insert into memos values('deliver project description', 10);
          sqlite> insert into memos values('lunch with Christine', 100);
          sqlite> select * from memos;
          deliver project description|10
          lunch with Christine|100
          sqlite>
  • CeetixCeetix Membre
    04:43 modifié #12
    Ok bah merci à  vous deux c'est cool :)
  • Philippe49Philippe49 Membre
    04:43 modifié #13
    Je n'ai pas essayé, mais connaissant CoreData sur Mac, je pense que l'inverse est exact : Installant une application CoreData, un ou des fichiers dans son bac à  sable étant désigné(s), tout ce qui sera fait sur l'appli sera enregistré dans le(s) fichier(s), et réciproquement à  la réouverture, ce(s) fichier(s) sera(ont) récupéré(s).
    Le rôle de CoreData étant d'automatiser la "persistence" de l'enregistrement.
  • CéroceCéroce Membre, Modérateur
    04:43 modifié #14
    dans 1245423552:

    Admettons : tu conseille quoi comme framework SQL en remplacement de CoreData (pour une appli mac je parle, pas iPhone) ?


    Je n'en sais rien, car je ne m'y suis pas penché. Mais déjà , pourquoi partir absolument sur un un wrapper ObjC ? Attaquer la base avec les API en C est une alternative simple et efficace.
  • CeetixCeetix Membre
    04:43 modifié #15
    J'up un peu car j'ai une question hs mais portant tout de même sur SQL. Connaissez-vous un moyen d'importer un fichier .xls dans une BDD SQL ?
  • CéroceCéroce Membre, Modérateur
    04:43 modifié #16
    Non, et je serais surpris que ça existe. Le format XLS est très complexe, et conçu pour l'usage unique de Microsoft, pas pour l'interoperabilité. Dans ma boà®te précédente, nous avions deux possibilité:

    - exporter les données sous un format plus simple, par exemple CSV.
    - ou lancer Excel et s'interfacer avec lui.

    Maintenant que les logiciels Microsoft utilisent des formats XML (xlsx ?), il est peut-être plus simple de les parcourir.

    En pratique, la méthode du CSV est plutôt confortable. La bibliothèque standard de Python contient même un parser CSV.
  • CeetixCeetix Membre
    04:43 modifié #17
    J'up le post car j'ai un petit problème.
    J'arrive a lire dans ma base de donnée avec juste un select * from maTable .
    Maintenant je veux faire du select * from maTable where monchamp = uneVariable.

    J'ai donc écris ça

    <br />// ...<br /><br />if(sqlite3_open([bddChemin UTF8String], &amp;database) == SQLITE_OK) {<br />		// Setup the SQL Statement and compile it for faster access<br /><br />		NSString *sqlStatement = [NSString stringWithFormat:@&quot;select * from historique where date = %@&quot;,d]; // d est entré en paramettre<br />		sqlite3_stmt *compiledStatement;<br /><br />		if(sqlite3_prepare_v2(database,[sqlStatement UTF8String], -1, &amp;compiledStatement, NULL) == SQLITE_OK) {<br />			// Loop through the results and add them to the feeds array<br /><br />			while(sqlite3_step(compiledStatement) == SQLITE_ROW) {<br />				// Read the data from the result row<br />				NSLog(@&quot;Entre&quot;); // pas affiché<br /><br />				NSString *nom = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement,1)];<br /><br />// ...<br />
    


    En faisant la trace du code j'en déduis que le while ne passe même pas une fois.
    Et voici ce que le debugger affiche :

    <br />-[NSCFString count]: unrecognized selector sent to instance 0x9480<br />
    


    Je vois pas trop pourquoi ...
  • muqaddarmuqaddar Administrateur
    04:43 modifié #18
    Que contient d ?

    [NSString stringWithFormat:@&quot;select * from historique where date = %@&quot;,d];
    


    Une date bien paramétrée pour SQL ?
  • CeetixCeetix Membre
    04:43 modifié #19
    c'est une date mais convertie en NSString.
    Exemple : 27-06-2009
  • muqaddarmuqaddar Administrateur
    04:43 modifié #20
    dans 1246122761:

    c'est une date mais convertie en NSString.
    Exemple : 27-06-2009


    Et comme ça ?

    NSString *sqlStatement = [NSString stringWithFormat:@select * from historique where date = '%@';",d];
  • Philippe49Philippe49 Membre
    04:43 modifié #21
    dans 1246116289:

    En faisant la trace du code j'en déduis que le while ne passe même pas une fois.
    Et voici ce que le debugger affiche :

    <br />-[NSCFString count]: unrecognized selector sent to instance 0x9480<br />
    


    Je vois pas trop pourquoi ...


    Manifestement, quelque part tu crois avoir une NSArray, et en fait tu as une NSString, ou l'inverse. Il faut rechercher ce type d'erreur dans ton code.
  • CeetixCeetix Membre
    04:43 modifié #22
    Merci Philippe pour ta piste.
    J'étais trop focalisé pour ma méthode et en fait elle est bonne. C'est quand j'affiche mes lignes que ça va pas. Je m'en vais régler ça ^^

  • CeetixCeetix Membre
    04:43 modifié #23
    Je réup encore car j'ai besoin de faire un delete sur ma table.
    J'ai donc mis :

    <br />NSString *sqlStatement = [NSString stringWithFormat:@&quot;delete * from historique where date = &#39;%@&#39;&quot;,d];<br />
    


    Mais après dans la méthode je pense que ça doit changer. Je vois pas trop vers quoi me tourner pour exécuter ma requête.
  • muqaddarmuqaddar Administrateur
    04:43 modifié #24
    Attention à  tes requêtes SQL !

    DELETE FROM table WHERE ...

    Et non DELETE * FROM table WHERE...
  • CeetixCeetix Membre
    04:43 modifié #25
    Arf oui c'est pas comme le SELECT . J'oublie tout le temps.
    J'ai un autre soucis maintenant .... :s
    JE veux faire du delete à  un id précis.
    J'ai :

    <br />NSString *sqlStatement = [NSString stringWithFormat:@&quot;delete from historique where id = %d&quot;,pk];<br />		sqlite3_stmt *compiledStatement = nil;<br />		<br />		sqlite3_prepare_v2(database,[sqlStatement UTF8String], -1, &amp;compiledStatement, NULL);<br />			<br />		sqlite3_bind_text(compiledStatement, 1, [sqlStatement UTF8String], -1, SQLITE_STATIC);<br />		sqlite3_finalize(compiledStatement);<br />
    


    Quand j'exécute ma méthode rien ne se passe, rien n'est deleté ... Ma requête est bonne pourtant non?
Connectez-vous ou Inscrivez-vous pour répondre.