Title: Bases de donnes
1Bases de données
2Libraries pour appels SQL depuis Javascript
ltscript src'/LemanOS/dwr/engine.js'gtlt/scriptgtlts
cript src'/LemanOS/database.js'gtlt/scriptgt
3 Table utilisée dans les exemples
4Appels depuis Javascript(librairie database.js)
var result database.query("select  from vins")
// au retour de la query
idv1,cepagechasselas,regionLavaux,a
nnee2005, id2,cepagesangiovese,anne
e2002, id3, regionBourgogne //
Les champs nulls napparaissent pas dans lobjet.
5Accès aux champs
idv1,cepagechasselas...,id2,ccepag
e...,id3 result0.idv
result0.cepage result0.region result1.i
dv result1.cepage result1.region re
sult2.idv result2.cepage
result2.region
result.length lignes
6Accès aux champs
idv1,cepagechasselas...,id2,ccepag
e...,id3
Si un champ , par exemple result0.cepage, nest
pas défini, on a typeof
result0.cepage undefined Sil ny a
quune ligne, elle est quand même placée dans
7Lecture dun objet dont les champs sont inconnus
var result 'a'2, 'b'3 for ( key in
result 0 ) alert( result 0 key )
8Traitement des erreurs
var result try result database.query("sel
ect  from vins") catch(e)
alert(Erreur e) return // continue ici,
en cas de succès if (result.length0) //
pas de ligne retournée
9Passage des paramètres
- Quatre façons de passer des paramètres à une
commande SQL - Concaténation de chaînes
- Remplacement du signe ? par une variable
- Remplacement du signe ? par un tableau
- Remplacement du signe ? par un objet
10Passage de paramètres par concaténation
var an2003, cep'chasselas'
pas
dans la chaîne var result database.query(
"select  from vins where annee"an "
and cepage'"cep "'")
apostrophes encadrant la
chaîne Chaîne produite select from vins where
annee2003 and cepagechasselas
11Passage de paramètres par ?
var an2003, cepchasselas var resultÂ
database.query( "select  from vins where
annee? and cepage?", an, cep )
apostrophe Chaîne
produite select  from vins where annee2003
and cepagechasselas "
12Tableau de valeurs
var data 0, Barolo, nebbiolo,
null var result database. query(
'insert into vins values (?) , data ) Chaîne
produite insert into vins values (0, Barolo,
nebbiolo, null) // les chaînes de data sont
automatiquement entourées de
13Objet en paramètre
var vin 'region''Bordeaux',
'cepage''merlot' var result database.
query( 'insert into vins set ? , vin ) Chaîne
produite insert into vins set
regionBordeaux cepagemerlot
14Points dinterrogation
- Il peut y avoir plusieurs ?
- A chaque ? doit correspondre un argument
(il peut y en avoir plusieurs après la query) - Un ? peut être remplacé par
- un entier ou un réel
- une string
- un tableau
- un objet
- Evidemment, lordre des paramètres doit
correspondre aux ?, le système ne teste pas
sil est pertinent
15Deux façons de construire un objet Javascript
var vin vin.idv 0 vin.region
Valais vin.cepage chasselas vin.annee 2004
unVin idv0, Valais, cepagechasselas,
annee2004
16Insertion de sets
create table unSet (Â Â Â ensemble set ('aa',
'bb', 'cc')) insert into unSet set
ensemble'aa,cc'
Attention, pas despaces
17Insertion de dates
create table temps (Â Â Â jourHeure
datetime ) Date.prototype.sql  function () Â
       return this.getFullYear()  "-"  (this.get
Month()1)Â Â "-"Â Â this.getDate()Â Â Â Â Â Â Â Â Â Â Â Â
 " "  this.getHours()  ""  this.getMinutes()Â
 ""  this.getSeconds() function execute ()Â
        try             database.query("insert
 into temps set jour?", new Date().sql())      Â
   catch (e)              alert(e "ltlt"
database.readyQuery "gtgt")Â Â Â Â Â Â Â Â Â
18Clé primaire générée
var vin 'region''Bordeaux',
'cepage''merlot' var result database.query(
'insert into vins set ? , vin ) (La base de
données génère automatiquement la clé primaire.
On peut lobtenir grâce à la commande
suivante) idNb database.last_insert_id()