que fait ce code de ORDImage

que fait ce code de ORDImage - Java - Programmation

Marsh Posté le 03-06-2011 à 00:46:57    

bonsoir j'ai réussie de connecté la base de donnée et j'ai tout faire et ça va bien marche mais lorsque je vais jeter un coup d'œil dans la table dans la BD oracle j'ai rien trouvé donc l'ajout ne fonctionne pas et aussi y'a aucune requete insert  comment il peut ajouter une image???
[java]// 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" );
}[/java]


---------------
saluuut
Reply

Marsh Posté le 03-06-2011 à 00:46:57   

Reply

Marsh Posté le 07-06-2011 à 23:07:34    

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 :
  1. // Importation des packages importants
  2. import java.sql.*; // Pour la connexion avec Oracle
  3. import java.io.*; // Pour les entrée sorties
  4. import oracle.jdbc.*; // Pour les pilotes Oracle
  5. import oracle.sql.*; // Pour les spécificités SQL d'Oracle
  6. import oracle.ord.im.OrdImage; // Pour la classe OrdImage
  7. import oracle.ord.im.OrdImageSignature; // Pour la classe OrdImageSignature
  8. public class Ajout_OrdImage {
  9. public static void main(String[] args) {
  10. try {
  11. // Etape 1 : Création de la connexion avec la base
  12. // Enregistrement du pilote Oracle
  13. DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
  14. // Ouverture de la connexion avec la BD
  15. Connection conn = DriverManager.getConnection(
  16. "jdbc:oracle:thin:@host:1521:nomdb", // url de la base
  17. "benoit", // utilisateur
  18. "secret" ); // mot de passe
  19. // Etape 2 : Mise à false de l'autocommit
  20. conn.setAutoCommit(false);
  21. // Etape 3 : Initialisation de l'attribut ORDImage
  22. // Ecriture de la requête SQL
  23. String sql = "UPDATE MaTable SET image=ORDSYS.ORDImage.init() WHERE id=1";
  24. // Création d'une instance d'un Objet Statement
  25. Statement stmt = conn.createStatement();
  26. // Execution de la requête
  27. stmt.execute(sql);
  28. // Etape 4 : Récupération du descripteur
  29. // Ecriture de la requête SQL
  30. String sql2 = "SELECT image FROM MaTable WHERE id=1 FOR UPDATE";
  31. // Execution de la requête et récupération du résultat
  32. OracleResultSet rset=(OracleResultSet) stmt.executeQuery(sql2);
  33. // S'il y a un résultat
  34. if( rset.next()) {
  35. // Récupération du descripteur d'OrdImage
  36. OrdImage imgObj = (OrdImage) rset.getORAData(1, OrdImage.getORADataFactory() );
  37. // Etape 5 : Envoi de l'image
  38. // Création d'un bloc try{}catch pour l'exception d'entrée/sortie
  39. try{
  40. // Envoi de l'image dans l'attribut localData du type ORDImage
  41. imgObj.loadDataFromFile("c:\\image.jpg" );
  42. }


 
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())

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed