Accès aux bases de données

From Apache OpenOffice Wiki
Jump to: navigation, search
doc OOo
Book.png


Pour accéder à une base de données, il faut y être connecté. Une voie de transfert est donc utilisée pour permettre la communication directe avec la base de données. Contrairement aux sources de données présentées dans la section précédente, la connexion à la base de données doit donc être rétablie à chaque fois que le programme est relancé.

Apache OpenOffice offre différentes manières d'établir des connexions à la base de données. Cet exemple illustre la connexion à une source de données existante.

Dim DatabaseContext As Object
Dim DataSource As Object
Dim Connection As Object
Dim InteractionHandler as Object
 
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("Customers")
 
If Not DataSource.IsPasswordRequired Then
  Connection = DataSource.GetConnection("","")
Else
  InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
  Connection = DataSource.ConnectWithCompletion(InteractionHandler)
End If

Le code utilisé dans cet exemple commence par vérifier si la base de données est protégée par mot de passe. Dans le cas contraire, il crée la connexion à la base de données requise à l'aide de l'appel GetConnection. Les deux chaînes vides de la ligne de commande correspondent au nom et au mot de passe de l'utilisateur.

Si la base de données est protégée par mot de passe, l'exemple crée un objet InteractionHandler et ouvre la connexion à la base de données à l'aide la méthode ConnectWithCompletion. L'InteractionHandler garantit que Apache OpenOffice demande les données de connexion requises à l'utilisateur.

Itération de tables

Dans Apache OpenOffice, pour accéder à une table, on utilise généralement l'objet ResultSet. Un objet ResultSet est un type de marqueur indiquant un ensemble courant de données issues d'un volume de résultats, obtenu à l'aide de la commande SELECT.

L'exemple illustre l'interrogation des valeurs à partir d'une table de base de données à l'aide d'un objet ResultSet.

Dim DatabaseContext As Object
Dim DataSource As Object
Dim Connection As Object
Dim InteractionHandler as Object
Dim Statement As Object
Dim ResultSet As Object
 
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("Customers")
 
If Not DataSource.IsPasswordRequired Then
  Connection = DataSource.GetConnection("","")
Else
  InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
  Connection = DataSource.ConnectWithCompletion(InteractionHandler)
End If
 
Statement = Connection.createStatement()
ResultSet = Statement.executeQuery("SELECT ""CustomerNumber"" FROM ""Customer""") 
 
If Not IsNull(ResultSet) Then
  While ResultSet.next
    MsgBox ResultSet.getString(1)
  Wend
End If

Une fois la connexion à la base de données établie, l'exemple crée un objet Statement via l'appel Connection.createObject. Cet objet Statement retourne ensuite l'objet ResultSet courant à l'aide de l'appel executeQuery. Le programme vérifie alors si l'objet ResultSet existe et, le cas échéant, parcourt les enregistrements de données à l'aide d'une boucle. Les valeurs requises (dans l'exemple, celles du champ CustomerNumber) retournent l'objet ResultSet à l'aide de la méthode getString, selon laquelle le paramètre 1 détermine que l'appel concerne les valeurs de la première colonne.

Documentation note.png L'objet ResultSet de SDBC est comparable à l'objet Recordset de DAO et ADO, car il permet également l'accès itératif à une base de données.
Documentation note.png L'accès à la base de données s'effectue en réalité dans Apache OpenOffice par l'intermédiaire d'un objet ResultSet. Celui-ci reflète le contenu d'une table ou le résultat d'une commande SQL-SELECT. Dans les versions précédentes, la navigation au sein des données s'effectuait à l'aide des méthodes résidentes telles que DataNextRecord fournies par l'objet ResultSet dans l'objet Application.

Méthodes de récupération des valeurs en fonction du type

Comme le montre l'exemple de la section précédente, dans Apache OpenOffice, la méthode getString permet d'accéder au contenu des tables. Cette méthode retourne le résultat sous la forme d'une chaîne. Les méthodes get suivantes sont disponibles :

getByte()
prend en charge les types de données SQL dédiés aux nombres, aux caractères et aux chaînes.
getShort()
prend en charge les types de données SQL dédiés aux nombres, aux caractères et aux chaînes.
getInt()
prend en charge les types de données SQL dédiés aux nombres, aux caractères et aux chaînes.
getLong()
prend en charge les types de données SQL dédiés aux nombres, aux caractères et aux chaînes.
getFloat()
prend en charge les types de données SQL dédiés aux nombres, aux caractères et aux chaînes.
getDouble()
prend en charge les types de données SQL dédiés aux nombres, aux caractères et aux chaînes.
getBoolean()
prend en charge les types de données SQL dédiés aux nombres, aux caractères et aux chaînes.
getString()
prend en charge tous les types de données SQL.
getBytes()
prend en charge les types de données SQL dédiés aux valeurs binaires.
getDate()
prend en charge les types de données SQL dédiés aux nombres, aux chaînes, à la date et à l'heure.
getTime()
prend en charge les types de données SQL dédiés aux nombres, aux chaînes, à la date et à l'heure.
getTimestamp()
prend en charge les types de données SQL dédiés aux nombres, aux chaînes, à la date et à l'heure.
getCharacterStream()
prend en charge les types de données SQL dédiés aux nombres, aux chaînes et aux valeurs binaires.
getUnicodeStream()
prend en charge les types de données SQL dédiés aux nombres, aux chaînes et aux valeurs binaires.
getBinaryStream()
valeurs binaires.
getObject()
prend en charge tous les types de données SQL.

Dans tous les cas, le nombre de colonnes doit apparaître comme un paramètre dont les valeurs doivent être interrogées.

Variantes de l'objet ResultSet

La rapidité d'accès aux bases de données est souvent critique. Dans Apache OpenOffice, vous avez le choix entre plusieurs méthodes pour optimiser les objets ResultSets et ainsi contrôler la vitesse d'accès. En général, plus un objet ResultSet fournit de fonctions, plus son implémentation est complexe et plus lentes sont les fonctions.

un objet ResultSet, simple fournit les fonctions minimales. Il ne permet l'application de l'itération que vers l'avant, et pour les valeurs à interroger. Par conséquent, d'autres options de navigation plus complexes, telles que la modification des valeurs, ne sont pas incluses.

L'objet Statement utilisé pour créer l'objet ResultSet fournit des propriétés qui permettent d'agir sur les fonctions de l'objet ResultSet :

ResultSetConcurrency (const)
spécifications selon lesquelles les données peuvent être modifiées ou non (spécifications correspondant à com.sun.star.sdbc.ResultSetConcurrency).
ResultSetType (const)
spécifications relatives au type de ResultSets (spécifications correspondant à com.sun.star.sdbc.ResultSetType).

Les valeurs définies dans com.sun.star.sdbc.ResultSetConcurrency sont les suivantes :

UPDATABLE
ResultSet permet la modification des valeurs.
READ_ONLY
ResultSet ne permet pas les modifications.

Le groupe de constantes com.sun.star.sdbc.ResultSetConcurrency fournit les spécifications suivantes :

FORWARD_ONLY
ResultSet permet uniquement la navigation vers l'avant.
SCROLL_INSENSITIVE
ResultSet permet tout type de navigation ; les changements appliqués aux données d'origine ne sont toutefois pas notés.
SCROLL_SENSITIVE
ResultSet permet tout type de navigation ; les changements appliqués aux données d'origine modifient l'objet ResultSet.


Documentation note.png Un objet ResultSet contenant les propriétés READ_ONLY et SCROLL_INSENSITIVE correspond à un jeu d'enregistrements du type Snapshot dans ADO et DAO.

Lorsque vous utilisez les propriétés

                   UPDATEABLE et SCROLL_SENSITIVE de l'objet ResultSet's , l'objet ResultSet possède des fonctions d'étendue comparable à un objet Recordset de type Dynaset dans ADO et DAO.

Méthodes de navigation dans les objets ResultSets

Si un objet ResultSet est de type SCROLL_INSENSITIVE ou SCROLL_SENSITIVE, il prend en charge un ensemble de méthodes de navigation dans le stock de données. Les méthodes centrales sont les suivantes :

next()
déplacement vers l'enregistrement de données suivant.
previous()
déplacement vers l'enregistrement de données précédent.
first()
déplacement vers le premier enregistrement de données.
last()
déplacement vers le dernier enregistrement de données.
beforeFirst()
placement avant le premier enregistrement de données.
afterLast()
placement après le dernier enregistrement de données.

Toutes les méthodes retournent un paramètre booléen qui indique si la navigation s'est effectuée correctement ou non.

Les méthodes de test suivantes permettent de déterminer la position courante du curseur et retournent toutes une valeur booléenne :

isBeforeFirst()
ResultSet se situe avant le premier enregistrement de données.
isAfterLast()
ResultSet se situe après le premier enregistrement de données.
isFirst()
ResultSet est le premier enregistrement de données.
isLast()
ResultSet est le dernier enregistrement de données.

Modification des enregistrements de données

Si un objet ResultSet a été créé avec la valeur ResultSetConcurrency = UPDATEABLE, son contenu est modifiable. Ceci s'applique seulement tant que l'instruction SQL permet la réécriture des données dans la base de données (dépend du principe). Par exemple, ceci n'est pas possible pour les instructions SQL complexes avec des colonnes liées ou des valeurs cumulées.

Les méthodes Update de l'objet ResultSet permettent de modifier les valeurs. Ces méthodes sont structurées de la même manière que les méthodes get qui permettent de récupérer des valeurs. La méthode updateString, par exemple, permet l'écriture d'une chaîne.

Après modification, les valeurs doivent être transférées dans la base de données à l'aide de la méthode updateRow(). Si l'appel n'est pas effectué avant la prochaine commande de navigation, les valeurs sont perdues.

Toute erreur effectuée pendant les modifications peut être annulée à l'aide de la méthode cancelRowUpdates(). Cet appel n'est possible que si les données n'ont pas été réécrites dans la base de données à l'aide de la méthode updateRow().

Content on this page is licensed under the Public Documentation License (PDL).
Personal tools