SQLite dans le local-storage du navigateur.

Partagez votre expérience de SpiderBasic avec les autres utilisateurs.
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: SQLite dans le local-storage du navigateur.

Message par poshu »

Je doute que SB le fasse un jour. Parce que ça voudrait dire que tous les programmes développés avec auraient tous les les même failles.

Dès qu'on rentre dans le domaine du serveur, on joue avec des règles de sécurité qui sont assez importantes, autant utiliser des normes qui sont développés et mise à jour rapidement et par de grande communautés que par un seul gars. C'est pas contre Fred, je refuserai de déployer un serveur développé par une seule personne quelle qu'elle soit. En l'état, un petit nginx (ou apache) -> un serveur PB en fast CGI = la meilleure sécurité disponible. Et on parle ici de 3 outils (dont deux, SB et PB, sont quasi jumeaux), pas de 25 et 52 pirouettes.
Avatar de l’utilisateur
Crystal Noir
Messages : 891
Inscription : mar. 27/janv./2004 10:07

Re: SQLite dans le local-storage du navigateur.

Message par Crystal Noir »

A partir du moment où on veut faire du web de toute façon on rentre dans le monde du serveur. C'est pour cela que ce genre d'appli correspond bien à Java. Mais Java ce n'est pas forcément simple (et il n'y a pas que Java d'ailleurs pour ce genre d'appli). Mais rien n'est impossible. A voir dans le temps.
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: SQLite dans le local-storage du navigateur.

Message par poshu »

Si si, un serveur sécurisé, qui tourne sur toutes les configurations (hardware et software), et qui correspond à tous les besoin, c'est impossible.
En fait, chacune de ces 3 propositions est déjà impossible en soit, donc les trois ensembles...
Avatar de l’utilisateur
Crystal Noir
Messages : 891
Inscription : mar. 27/janv./2004 10:07

Re: SQLite dans le local-storage du navigateur.

Message par Crystal Noir »

Pourquoi toutes les configurations ? Il ne me viendrait pas à l'idée de faire tourner un serveur web ou java sous windows (à part en local dev mais pas en production).
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: SQLite dans le local-storage du navigateur.

Message par poshu »

Parce qu'on utilise pas tous le même OS ni le même jeu d'instruction?
Je connais des serveurs sous Linux (et ça veut surtout dire sous une chié distributions différentes...), d'autres sous FreeBSD et d'autres encore sous Windows (même si ça ne te vient pas à l'idée, il y a des gens qui sont bloqués par des applications spécialisés...); je connais des serveurs en i386, d'autre en AMD64 et même certain en ARM...
Avatar de l’utilisateur
Crystal Noir
Messages : 891
Inscription : mar. 27/janv./2004 10:07

Re: SQLite dans le local-storage du navigateur.

Message par Crystal Noir »

En fait on parle pas du tout de la même chose ^^ Toi tu parles de coder un serveur ou d'une app qui utilise l'os et ses jeux d'instructions moi je te parle d'utiliser l'existant (apache, tomcat...) pour handle des messages/requêtes pour une webapp (peu importe l'os derrière, le message est universel et utilise la technologie web). Un message ou une requête que tu vas balancer à tomcat, que tu aies fedora, mint , desbian ou autre chose on s'en fout, c'est tomcat qui gère.

Mais dans le cas que tu présentes, c'est différent effectivement.
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: SQLite dans le local-storage du navigateur.

Message par poshu »

Je crois surtout que tu ne comprends pas ce dont tu parles : je t'ai parlé d'utiliser l'existant au dessus et tu n'étais pas d'accord. Ensuite, ça ne change rien : tout le monde n'utilise pas Tomcat (parce que c'est sous Java...), tout le monde n'utilise pas Apache (parce que c'est lent, lourd et chiant à configurer). Tout le monde n'a pas la même config.
Avatar de l’utilisateur
Crystal Noir
Messages : 891
Inscription : mar. 27/janv./2004 10:07

Re: SQLite dans le local-storage du navigateur.

Message par Crystal Noir »

Sisi je comprend très bien ce dont je parle, seulement depuis le début on est pas sur la même longueur d'onde, donc ce n'est pas grave :-) On va pas se friter pour une histoire de serveur ^^ D'autant plus qu'on est passé de l'utilisation possible de SB sur un sujet plus général. Pour l'existant tomcat était juste un exemple.

Mon idée était un peu de savoir les possibilités de SB et de ce qu'il propose "out in a box".

Cela dit, peu importe les avis sur le comment faire ou comment gérer, ma question de départ était purement sur SB, notamment sur ce qu'il propose concernant la persistance des données. Etant donné que pour le moment il n'agit uniquement que du côté client, la réponse (local storage etc...) est tout à fait logique. Merci.
Avatar de l’utilisateur
Crystal Noir
Messages : 891
Inscription : mar. 27/janv./2004 10:07

Re: SQLite dans le local-storage du navigateur.

Message par Crystal Noir »

Désolé pour le double post !

Je me permet de rebondir sur le sujet, j'ai pas mal étudié ce soir, la doc de sb et le forum officiel sur des sujets particuliers. Revenant de pas mal de Java et JSP où le tout fonctionne un peu "out in a box" dans le sens où finalement t'as un serveur, un code java, et des view jsp qui fonctionnent ensemble, d'un côté la partie métier qui comprend d'ailleurs toutes les classes et méthodes de ton projet, la partie DAO (classes et méthodes bdd), une partie contrôleur pour faire la liaison entre les demandes utilisateurs et la partie métier et DAO, et le côté jsp/web pour le retour utilisateur, UI etc.., le tout s'orchestrant sur un serveur type tomcat (ou glassfish).

Avec cette idée en tête je me disais qu'on aurait pu avoir une sorte d'organisation un peu de ce style sur SB (et j'ai vite oublié l'idée quand on a parlé du fait que finalement SB ne fonctionne que du côté client sans aucune composante serveur).

J'ai vu quelques exemples d'interfaçage avec php et le http request qui peut être une solution pour une connexion bdd (ou tout autre chose) sur le serveur sur lequel tourne l'appli sb. J'ai aussi vu Spiderbyte mais la doc étant en allemand je n'ai pas trop regardé comment cela marche.

Gardant cette idée et ce pattern en tête en fait j'étais pas du tout dans le bon axe, ce qui explique qu'on parlait tous les deux finalement de choses complètement différentes ! La lobotomisation Java de ces dernières années a laissé des traces ;) Donc je présente toutes mes excuses pour cette incompréhension ! Mea culpa.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: SQLite dans le local-storage du navigateur.

Message par falsam »

Patrick88 insistant sur le chat de Purebasic , et bien que Poshu a déja posté une réponse sur une base de données persistante, je poste un autre exercice de base de données persistante.

:idea: J'ai crée un APK du code et exécuté l'application sous Android puis j'ai passé CCleaner (version Android).
La base de données n'a pas été détruite.


Explication dans le code

Code : Tout sélectionner

EnableExplicit 

Global FileName.s = "games.sqlite"
Global DataBase

;Plan de l'application
Declare Start()
Declare InsertRecords()                               ;Insertion de quelques enregistrements
Declare SelectRecords()                               ;Selection des enregistrements
Declare SaveDatabase()                                ;Sauvegarde de la base de données en local storage

Declare onReadFile(Status, Filename$, File, SizeRead) ;CallBack si lecture d'un fichier en local storage
Declare onSaveFile(Status, Filename$, File, SizeRead) ; Callback si ecriture d'un fichier en local storage

Start()

; Lecture de la 
Procedure Start()
  Debug "Lecture de la base de données en cours ...."
  ReadFile(0, FileName, @onReadFile(), #PB_LocalStorage)
EndProcedure

;Insertion de quelques enregistements 
Procedure InsertRecords()
  DatabaseUpdate(DataBase, "Insert Into games (game, year) Values ('Command & Conquer : Alerte Rouger', '1996')")
  DatabaseUpdate(DataBase, "Insert Into games (game, year) Values ('Doom', '1993')")
  DatabaseUpdate(DataBase, "Insert Into games (game, year) Values ('Worms', '1995')")
  DatabaseUpdate(DataBase, "Insert Into games (game, year) Values ('Quake', '1996')")
  DatabaseUpdate(DataBase, "Insert Into games (game, year) Values ('Wolfenstein 3D', '1992')")
  DatabaseUpdate(DataBase, "Insert Into games (game, year) Values ('Duke Nukem 3D', '1996')")
  DatabaseUpdate(DataBase, "Insert Into games (game, year) Values ('Blood', '1997')")
EndProcedure

;Selection des enregistrements
Procedure SelectRecords()
  Protected ReqSql.s = "select year, game From games order by year"
  
  If DatabaseQuery(DataBase, ReqSql)
    While NextDatabaseRow(DataBase)
      Debug GetDatabaseString(DataBase, 0) + " : " + GetDatabaseString(DataBase, 1)
    Wend
    
    FinishDatabaseQuery(DataBase)
  Else
    Debug "Une erreur c'est produite : " + DatabaseError()
  EndIf  
EndProcedure

Procedure SaveDatabase()
  Protected *Buffer = ExportDatabaseMemory(DataBase)
  
  If CreateFile(0, FileName, @onSaveFile(), #PB_LocalStorage)
    WriteData(0, *Buffer, 0, MemorySize(*Buffer))
    CloseFile(0)
  EndIf
EndProcedure


; CallBack si lecture d'un fichier en local storage
Procedure onReadFile(Status, Filename.s, File, SizeRead)
  Protected *Buffer, ReqSql.s
  
  Select Status
      
    Case #PB_Status_Loaded
      ; La base de données existe 
      ; - Memorisation de la base dans un buffer de travail
      ; - Visualisation des enregistrements
      Debug "Ouverture de la base de données " + Filename 
      
      ; Mémorisation de la base de données dans un buffer 
      *Buffer = ExportFileMemory(File)
      
      ; Ouverture de la base de données 
      DataBase = OpenDatabase(#PB_Any, *Buffer)
      If DataBase
        SelectRecords()
      EndIf
      
    Case #PB_Status_Error
      ; La base de données n'existe pas
      ; - Création de la base de données 
      ; - Insertion de quelques enregistrements 
      ; - Visualisation des enregistrements
      ; - Sauvegarde des données en Local Storage
      Debug "Création de la base de données " + Filename 
      
      DataBase = OpenDatabase(#PB_Any)
      
      If DataBase
        ; Creation de la table des jeux
        ReqSql = "create table games (game TEXT, year TEXT)"
        DatabaseUpdate(DataBase, ReqSql)
        
        ; Insertion de quelques enregistrements 
        InsertRecords()        
        
        ; Visualisation des enregistrements
        SelectRecords()
        
        ; Sauvegarde de la base de données en "Local Storage"
        SaveDataBase()
        
        CloseDatabase(DataBase)
      Else
        
        Debug "Impossible d'ouvrir la base de données !!"
      EndIf
  EndSelect
EndProcedure

; Callback si ecriture d'un fichier en local storage
Procedure onSaveFile(Status, Filename.s, File, SizeRead)
  Select Status
    Case #PB_Status_Saved
      Debug "Fichier " + Filename.s + "(" + SizeRead + " bytes) sauvegardé" 
      
    Case #PB_Status_Error
      Debug "Impossible de sauvegarder le fichier " + Filename
  EndSelect
EndProcedure
Dernière modification par falsam le jeu. 09/août/2018 14:04, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: SQLite dans le local-storage du navigateur.

Message par falsam »

Le code suivant permet de visualiser les données

Code : Tout sélectionner

EnableExplicit

Global FileName.s = "games.sqlite"
Global DataBase

;Plan de l'application
Declare Start()
Declare SelectRecords(DataBase)
Declare onReadFile(Status, Filename.s, File, SizeRead)

Start()

Procedure Start()
  ReadFile(0, FileName, @onReadFile(), #PB_LocalStorage)  
EndProcedure

Procedure SelectRecords(DataBase)
  Protected ReqSQL.s = "select * from games"
  
  If DatabaseQuery(DataBase, ReqSQL)    
    While NextDatabaseRow(DataBase)
      Debug GetDatabaseString(DataBase, 1) + "," + GetDatabaseString(DataBase, 0)
    Wend
    FinishDatabaseQuery(DataBase)    
  Else
    Debug "DatabaseQuery() failed" + DatabaseError() 
  EndIf  
EndProcedure

Procedure onReadFile(Status, Filename.s, File, SizeRead)
  Protected *Buffer
  Select Status
    Case #PB_Status_Loaded
      Debug "File loaded: " + Filename
      
      ; Get all the file as a new buffer 
      *Buffer = ExportFileMemory(File)      
      DataBase = OpenDatabase(#PB_Any, *Buffer)
      
      If DataBase
        SelectRecords(DataBase)
      EndIf
      
    Case #PB_Status_Error
      Debug "La base de données " + FileName + " n'existe pas"
  EndSelect
EndProcedure
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Re: SQLite dans le local-storage du navigateur.

Message par Patrick88 »

Mmmerci Falsam (ça a eu du mal à sortir...) :roll: en attendant que tu ME fasses en exemple qui utilise une base de donnée SQLite (je t'avais gentiment suggéré, je suis pas KCC)

j'étais en train de reprendre l'exemple "localForage.sb" du dossier "examples" de SpiderBasic qui crée un fichier et y ajoute des lignes et les relit
je l'ai modifié en remplaçant le opendialog par une boite de dialog XML comme l'exemple "Simple resizable dialog"...

hum, bon ... j'ai du mal à piger à quoi sert la procedure onSaveFile vu que le fichier ce crée avec SaveDatabase
je suppose que c'est dans le cas ou il y aurait des erreurs, histoire de les intercepter et de les traiter
mais alors pourquoi il n'y a pas un appel à la création du fichier dans le cas de #PB_Status_Error ??

Patrick
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: SQLite dans le local-storage du navigateur.

Message par poshu »

Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: SQLite dans le local-storage du navigateur.

Message par falsam »

Patrick88 a écrit :j'ai du mal à piger à quoi sert la procedure onSaveFile vu que le fichier ce crée avec SaveDatabase
La procédure SaveDatabase() lance la sauvegarde de la base de données et fait appel à la procédure onSaveFile() quand la sauvegarde est terminée ou qu'il y a une erreur durant la sauvegarde. L'un ne va pas sans l'autre.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Re: SQLite dans le local-storage du navigateur.

Message par Patrick88 »

falsam a écrit :La procédure SaveDatabase() lance la sauvegarde de la base de données et fait appel à la procédure onSaveFile() quand la sauvegarde est terminée ou qu'il y a une erreur durant la sauvegarde. L'un ne va pas sans l'autre.
donc c'est bien ce que j'avais compris, si y'a erreur durant la sauvegarde, faut pas "juste" afficher un message "ça a foiré..." et bast' mais traiter l'erreur, chercher pourquoi...
ça correspond grosso modo au try - catch du C# VB.net Javascript etc

vu également.
Par défaut, Internet Explorer alloue 10 Mo par espace de stockage, et les autres navigateurs (Firefox, Chrome, Opera, Safari) 5 Mo par domaine.
source -> dans le paragraphe "Examen et espace alloué" https://www.alsacreations.com/article/l ... orage.html

Patrick
Répondre