Méthode générale d'accès à une BD en lecture par un langage de programmation
Définition : Pointeur sur un résultat de requête
Lorsqu'un programme exécute une requête dans une BD, il récupère un pointeur sur un résultat de requête permettant de parcourir le tableau résultant de l'exécution de la requête ligne par ligne.
En effet :
Une requête SQL retourne toujours un tableau (même si parfois il n'a qu'une ligne et une colonne), c'est le fondement du modèle relationnel
En général il n'est pas souhaitable que ce tableau soit transmis directement sous la forme d'une structure en mémoire (
array
), car le résultat d'une requête peut être aussi volumineux que la BD complète stockée en mémoire secondaireLa solution générale est donc que la BD fournisse le résultat ligne par ligne
Le pointeur permet de :
Retourner la ligne pointée sous la forme d'un vecteur (tableau à une seule ligne)
Passer à la ligne suivante
Savoir si l'on a atteint la fin du tableau (ligne N)

Méthode :
Connexion à la base de données et récupération d'un identifiant de connexion
Écriture de la requête de sélection
Exécution de la requête sur la connexion ouverte et récupération d'un pointeur sur un résultat de requête
Parcours du pointeur dans une boucle permettant rapporter (fetch) et traiter (afficher par exemple) le tableau ligne par ligne
Clôture de la connexion
Méthode : Pseudo-code
// Connexion à la base de données
$vHost = "foo.fr"
$vPort = "6666"
$vData = "myDatabase"
$vUser = "me"
$vPass = "secret"
$vConn = CONNECT ($vHost, $vPort, $vDb, $vUser, $vPass)
// Connexion à la base de données $vHost = "foo.fr" $vPort = "6666" $vData = "myDatabase" $vUser = "me" $vPass = "secret" $vConn = CONNECT ($vHost, $vPort, $vDb, $vUser, $vPass)
// Traitement du résultat
IF (NOT $vPointeur) THEN MESSAGE("Échec de l'exécution")
ELSE
WHILE ($vPointeur)
FETCH $vPointeur IN $vResult[]
PRINT $vResult[1]
PRINT $vResult[2]
NEXT $vPointeur
END WHILE
END IF
// Traitement du résultat IF (NOT $vPointeur) THEN MESSAGE("Échec de l'exécution") ELSE WHILE ($vPointeur) FETCH $vPointeur IN $vResult[] PRINT $vResult[1] PRINT $vResult[2] NEXT $vPointeur END WHILE END IF
Exemple : Fonction PHP
<?php
function fSelect () {
// Connexion à la base de données
$vHost = "foo.fr" ;
$vPort = "5432" ;
$vData = "myDatabase" ;
$vUser = "me" ;
$vPass = "secret" ;
$vConn = new PDO('pgsql:host=$vHost;port=$vPort;dbname=$vData', '$vUser', '$vPass');
// Écriture, préparation et exécution de la requête
$vSql = "SELECT a, b FROM t;"
$vResultSet = $connexion->prepare($vSql);
$vResultSet->execute();
// Traitement du résultat
while ($vRow = $vResultSet->fetch(PDO::FETCH_ASSOC)) {
echo $row['a'];
echo " ";
echo $row['b'];
}
// Clôture de la connexion
pg_close($vConn)
}
?>
<?php function fSelect () { // Connexion à la base de données $vHost = "foo.fr" ; $vPort = "5432" ; $vData = "myDatabase" ; $vUser = "me" ; $vPass = "secret" ; $vConn = new PDO('pgsql:host=$vHost;port=$vPort;dbname=$vData', '$vUser', '$vPass'); // Écriture, préparation et exécution de la requête $vSql = "SELECT a, b FROM t;" $vResultSet = $connexion->prepare($vSql); $vResultSet->execute(); // Traitement du résultat while ($vRow = $vResultSet->fetch(PDO::FETCH_ASSOC)) { echo $row['a']; echo " "; echo $row['b']; } // Clôture de la connexion pg_close($vConn) } ?>
Exemple : Procédure VBA
Sub fSelect()
vSql = "select a, b from t"
Set vRs = CurrentDb.CreateQueryDef("", vSql).OpenRecordset
Do While Not vRs.EOF
Debug.Print vRs.Fields(0)
Debug.Print vRs.Fields(1)
vRs.MoveNext
Loop
End Sub
Sub fSelect() vSql = "select a, b from t" Set vRs = CurrentDb.CreateQueryDef("", vSql).OpenRecordset Do While Not vRs.EOF Debug.Print vRs.Fields(0) Debug.Print vRs.Fields(1) vRs.MoveNext Loop End Sub
Exemple : Programme Java
class fInsert {
public static void main(String[] args) {
try {
// Connexion
DriverManager.registerDriver (new OracleDriver());
Connection vCon = DriverManager.getConnection("jdbc:oracle:thin:nf17/nf17@localhost:1521:test");
// Exécution de la requête
Statement vSt = vCon.createStatement();
ResultSet vRs = vSt.executeQuery("SELECT a, b FROM t");
// Affichage du résultat
while(vRs.next()){
String vA = vRs.getString(1);
String vB = vRs.getString(2);
System.out.println(vA + " - " + vB));
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}
class fInsert { public static void main(String[] args) { try { // Connexion DriverManager.registerDriver (new OracleDriver()); Connection vCon = DriverManager.getConnection("jdbc:oracle:thin:nf17/nf17@localhost:1521:test"); // Exécution de la requête Statement vSt = vCon.createStatement(); ResultSet vRs = vSt.executeQuery("SELECT a, b FROM t"); // Affichage du résultat while(vRs.next()){ String vA = vRs.getString(1); String vB = vRs.getString(2); System.out.println(vA + " - " + vB)); } } catch (Exception e) { e.printStackTrace(); } } }