Charger un fichier pdf dans une base oracle?

Résolu/Fermé
than24 Messages postés 63 Date d'inscription dimanche 27 septembre 2009 Statut Membre Dernière intervention 30 septembre 2012 - 4 avril 2010 à 20:50
than24 Messages postés 63 Date d'inscription dimanche 27 septembre 2009 Statut Membre Dernière intervention 30 septembre 2012 - 5 avril 2010 à 12:47
BONJOUR !!!
dans mon application java je veux rajouter la possibiliter d'imprimer des factures en forma pdf,je voulai savoir si c'est possible de remplire une table avec des fichiers de format pdf si c oui comment le faire et coment les extraire afin de les affichier dans une application java .
merci de me repondre

2 réponses

chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
5 avril 2010 à 11:33
En effet, y'a de belles coquille!!

Pour lire:(mais ne l'affiche pas!! elle recupere juste la data!!!)
CREATE OR REPLACE PROCEDURE lire ( nom_fichier IN varchar2, nom_clients IN varchar2) AS
Img BLOB;
Amount INTEGER ;
Position INTEGER;
Buffer RAW (32767);

BEGIN
Amount:= 32767;
Position:=1;
SELECT illustration INTO Img FROM lire3 WHERE nom_client =nom_clients;
DBMS_LOB.OPEN(Img, DBMS_LOB.LOB_READONLY);
DBMS_LOB.READ(Img,Amount,Position,Buffer);
DBMS_LOB.CLOSE(Img);
END;
/
Pour insérer:
CREATE OR REPLACE PROCEDURE l_test (num_clients IN VARCHAR2,nom_clients IN VARCHAR2,prenoms IN VARCHAR2,texts IN VARCHAR2) AS
src_file BFILE;
dst_file BLOB;
lgh_file BINARY_INTEGER;
begin
src_file := bfilename('PIMAGES',texts);
INSERT INTO lire3 (num_client,nom_client,prenom,texte,illustration) VALUES (
num_clients,nom_clients ,prenoms,texts,
EMPTY_BLOB()
) RETURNING illustration INTO dst_file;
SELECT illustration
INTO dst_file
FROM lire3
WHERE num_client=num_clients
FOR UPDATE;
dbms_lob.OPEN(src_file, dbms_lob.file_readonly);

-- determine length
lgh_file := dbms_lob.getlength(src_file);

-- read the file
dbms_lob.LOADFROMFILE(dst_file, src_file, lgh_file);

-- update the blob field
UPDATE lire3
SET illustration = dst_file
WHERE num_client=num_clients;
commit;
-- close file
DBMS_LOB.CLOSE(src_file);
end;
/
La Table (pour mon test
CREATE TABLE lire3 (
num_client varchar(10) PRIMARY KEY,
nom_client varchar(35),
prenom varchar(35),
texte varchar(255),
illustration BLOB
);
//Creation du directory où tu mets tes fichiers pdf avant que ceux-ci soit dans la table.
CREATE DIRECTORY pImages AS 'c:\mesimages';
//Il faut mettre les droits a ton schema qui se connectera et qui lancera la procedure (tu te connectes en sysdba et tu fais: GRANT READ,WRITE on directory pImages to Mon_USER;)
1
than24 Messages postés 63 Date d'inscription dimanche 27 septembre 2009 Statut Membre Dernière intervention 30 septembre 2012 8
5 avril 2010 à 12:02
BONJOUR§§ C TRES GENTIL , de m'aider .
ce create directory c une requette a part ou bien je l'inclue avec la creation de la table,?
MERCI
0
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
5 avril 2010 à 12:08
c'est à part!!
0
than24 Messages postés 63 Date d'inscription dimanche 27 septembre 2009 Statut Membre Dernière intervention 30 septembre 2012 8
5 avril 2010 à 12:13
ca marche pas
erreur :ORA-00955: ce nom d'objet existe deja ,
et qd je change directory en directory1 par exemple il affiche l'erreur
ORA-00901:commande create non valide
0
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
5 avril 2010 à 12:14
en dba:
select * from all_directories;
qu'est-ce que tu as?
0
than24 Messages postés 63 Date d'inscription dimanche 27 septembre 2009 Statut Membre Dernière intervention 30 septembre 2012 8
5 avril 2010 à 12:18
effectivement le c:\mesimages existe
0
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
Modifié par chuka le 4/04/2010 à 21:02
Salut
Tu peux utiliser les LOB....ou sinon stocker le chemin dans ta base et ton appli les chargent...
http://www.rcweb.fr/bd/lob.html
@+
Sur un malentendu, ca peut marcher!!
0
than24 Messages postés 63 Date d'inscription dimanche 27 septembre 2009 Statut Membre Dernière intervention 30 septembre 2012 8
4 avril 2010 à 21:35
merci de m'avoir repondu c tres gentil, je voulais avoir plus d'info sur sa , et pour mon application je la charge par rapport a l'identifiat c ca? chaque fichier on lui fait correspondre un identifiant?
0
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
4 avril 2010 à 21:48
Tout dépend de la manière dont tu stock tes data..
A priori tu auras par ligne:
un index, le nom du fichier, le chemin ou directement le BLOB, des infos complementaires (genre la date de creation,l'ID client certainent etc...).,
Dans ton appli tu va récupérer la ligne grâce à ta requête, et charger le fichier suivant la façon dont tu stockes le fichier (un chemin ou un BLOB) .
Pour un chemin, en java tu dois avoir un objet de type reader qui va te l'ouvrir grâce au chemin passé (je pense que c'est la solution la plus simple et la moins lourde au niveau base de données) sinon tu déclencheras une procédure stockée avec les parametres qui vont bien pour que tu puisse lire le fichier.
0
than24 Messages postés 63 Date d'inscription dimanche 27 septembre 2009 Statut Membre Dernière intervention 30 septembre 2012 8
4 avril 2010 à 22:05
quand vous parler d requete c pas une requete special on utilise un select non ?ET QD JE RECUPERE le lien je l'ouvre avec ce reader.
c'est bien ca?
0
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
Modifié par chuka le 4/04/2010 à 22:21
Oui, un select classique si tu utilise la manière de stocker les données avec un chemin.
Si tu utilise un BLOB, tu pourra lancer directement la procedure avec les argument qui vont bien:
si ta procedure est du style:
CREATE OR REPLACE PROCEDURE lire ( nom_fichier IN varchar2, nom_client IN varchar2) IS
Img BLOB;
Amount INTEGER = 32767;
Position INTEGER = 1;
Buffer RAW (32767);

BEGIN
SELECT illustration INTO Img FROM lire3 WHERE Client =nom_client and Fichier=nom_fichier ;
DBMS_LOB.OPEN(Img, DBMS_LOB.LOB_READONLY); --à vérifier
DBMS_LOB.READ(Img,Amount,Position,Buffer);
DBMS_LOB.CLOSE();
END
Apres il faut voir dans le driver Java pour oracle comment lancer la procédure...mais ca doit se trouver!!;)
https://java.developpez.com/faq/jdbc?page=Les-procedures-stockees-et-fonctions-moins-CallableStatement#INCallableStatement
0
than24 Messages postés 63 Date d'inscription dimanche 27 septembre 2009 Statut Membre Dernière intervention 30 septembre 2012 8
Modifié par than24 le 4/04/2010 à 22:32
pour cette procedure illustration represente le fichier? et vous avez utiliser un into et un from au meme temps j pas tres bien compris
0