Charger un fichier pdf dans une base oracle?
Résolu
than24
Messages postés
63
Date d'inscription
Statut
Membre
Dernière intervention
-
than24 Messages postés 63 Date d'inscription Statut Membre Dernière intervention -
than24 Messages postés 63 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- Oracle bfile vs blob
- Udp vs tcp - Guide
- Mb vs mo ✓ - Forum Matériel & Système
- Samsung a15 vs a16 - Accueil - Téléphones
- Psp street vs psp 3000 - Forum PSP
- Oracle liste des tables ✓ - Forum Oracle
2 réponses
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;)
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;)
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!!
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!!
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.
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.
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
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
ce create directory c une requette a part ou bien je l'inclue avec la creation de la table,?
MERCI
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
select * from all_directories;
qu'est-ce que tu as?