Les balises [Java], c'était bien essayé mais non, il fallait bien laisser les balises cpp
Pour plus de lisibilité, je remets ton code dans un bloc :
Code :
- // Importation des packages importants
- import java.sql.*; // Pour la connexion avec Oracle
- import java.io.*; // Pour les entrée sorties
- import oracle.jdbc.*; // Pour les pilotes Oracle
- import oracle.sql.*; // Pour les spécificités SQL d'Oracle
- import oracle.ord.im.OrdImage; // Pour la classe OrdImage
- import oracle.ord.im.OrdImageSignature; // Pour la classe OrdImageSignature
- public class Ajout_OrdImage {
- public static void main(String[] args) {
- try {
- // Etape 1 : Création de la connexion avec la base
- // Enregistrement du pilote Oracle
- DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
- // Ouverture de la connexion avec la BD
- Connection conn = DriverManager.getConnection(
- "jdbc:oracle:thin:@host:1521:nomdb", // url de la base
- "benoit", // utilisateur
- "secret" ); // mot de passe
- // Etape 2 : Mise à false de l'autocommit
- conn.setAutoCommit(false);
- // Etape 3 : Initialisation de l'attribut ORDImage
- // Ecriture de la requête SQL
- String sql = "UPDATE MaTable SET image=ORDSYS.ORDImage.init() WHERE id=1";
- // Création d'une instance d'un Objet Statement
- Statement stmt = conn.createStatement();
- // Execution de la requête
- stmt.execute(sql);
- // Etape 4 : Récupération du descripteur
- // Ecriture de la requête SQL
- String sql2 = "SELECT image FROM MaTable WHERE id=1 FOR UPDATE";
- // Execution de la requête et récupération du résultat
- OracleResultSet rset=(OracleResultSet) stmt.executeQuery(sql2);
- // S'il y a un résultat
- if( rset.next()) {
- // Récupération du descripteur d'OrdImage
- OrdImage imgObj = (OrdImage) rset.getORAData(1, OrdImage.getORADataFactory() );
- // Etape 5 : Envoi de l'image
- // Création d'un bloc try{}catch pour l'exception d'entrée/sortie
- try{
- // Envoi de l'image dans l'attribut localData du type ORDImage
- imgObj.loadDataFromFile("c:\\image.jpg" );
- }
|
Maintenant, regardons l'étape 2, tu mets ta connexion en autocommit="false".
Du coup, quand tu fais des modifs en base, elles ne seront pas effectuées tant que tu n'auras pas fait un commit.
Et, dans la plupart des SGBD, tu ne peux pas voir les données qui ne sont pas commités (cad, tu ne les récupères pas avec un select).
C'est pour ça que tu ne le récupère pas à l'étape 4.
Donc tu as 2 solutions:
- Virer l'étape 2. (pas très propre)
- faire un commit juste avant l'étape 4 (tu as sûrement un méthode Connection.commit())