Inserer un fichier dans oracle (8i et plus)

MarsOran Messages postés 4 Date d'inscription jeudi 9 novembre 2006 Statut Membre Dernière intervention 12 novembre 2007 - 7 nov. 2007 à 13:23
amedlang1 Messages postés 8 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 15 mars 2008 - 4 mars 2008 à 18:40
Bonjour,

Je souhaite insérer un fichier dans oracle dans un champs de type BLOB.

En regardant sur le forum (et sur le net), je trouve une proposition
qui est de passer par le BlobDomain ! cette solution ne dit pas comment
insérer le fichier une fois transformé en un blobDomain !!

question : ou trouver le package oracle.jbo ? (j'utilise le fameux classe12.jar, qui ne contient pas oracle.jbo... !).

si quelqu'un connait la démarche complète pour insérer le BlobDomaine je suis preneur.

d'ailleurs, je serais aussi preneur pour une autre solution, le but
étant d'insérer un fichier dans un champ blob d'Oracle (c'est fou comme
je ne trouve pas d'exemples sur le net pour un sujet assez courant à
mon sens ).

Merci beaucoup de votre aide.

salut.

5 réponses

the_wwt Messages postés 177 Date d'inscription jeudi 5 octobre 2006 Statut Membre Dernière intervention 16 janvier 2009 1
7 nov. 2007 à 14:37
Bonjour,
en fait il faut pas gérer cela avec java.sql.Blob mais avec l'implementation faite par oracle.
Télécharge le jdbc oracle.
Puis tu fais cela:

public static void main(String[] args) throws ClassNotFoundException, SQLException{        String fileName args.length 1 ? args[0] : "toto.txt";
        Class.forName("oracle.jdbc.driver.OracleDriver");
        Connection connexion = DriverManager.getConnection("jdbc:oracle:thin@localhost:1521:mydb","sa","");
        PreparedStatement st = connexion.prepareStatement("insert into blobs values(?, ?)");
        st.setLong(1, 1l);
        prepareStatementOracleBlob(st, readFile(fileName), 2);
        st.execute();
        st.close();
        connexion.close();
    }
   
    /**
     * Set a blob into a OraclePreparedStatement.
     * @param st The statement instanceof OraclePreparedStatement
     * @param content The blob content
     * @param index The index of the blob in the sql expression.
     * @throws SQLException If an error occurs while setting blob.
     */
    public static void prepareStatementOracleBlob(PreparedStatement st, byte[] content, int index) throws SQLException{
        if (content == null) {
            st.setNull(index, Types.BINARY);
        } else if (st instanceof oracle.jdbc.OraclePreparedStatement) {
            oracle.jdbc.OraclePreparedStatement ost = (oracle.jdbc.OraclePreparedStatement) st;
            oracle.sql.BLOB blob = oracle.sql.BLOB.createTemporary(st
                    .getConnection(), false, oracle.sql.BLOB.DURATION_SESSION);

            blob.open(oracle.sql.BLOB.MODE_READWRITE);

            OutputStream out = blob.getBinaryOutputStream();

            try {
                out.write((byte[]) content);
                out.flush();
                out.close();
            } catch (IOException e) {
                throw new SQLException("Failed write to blob " + e.getMessage());
            }
            blob.close();
           
            ost.setBLOB(
                    index,
                    blob);
           
        } else
            throw new InvalidParameterException("The prepared statement is not an instance of oracle.jdbc.OraclePreparedStatement, it is a " + st.getClass());
    }
   
    private static byte[] readFile(String fileName) {
        byte[] content = new byte[0];
        byte[] buffer = new byte[ (int) (5 * Math.pow(2, 20)) ]; // 5 mo
        int read = 0;
        BufferedInputStream bi = null;
        try{
            bi = new BufferedInputStream( new FileInputStream( fileName ) );
            while( ( read = bi.read( buffer ) ) > 0 ){
                byte[] tmp = content;
                content = new byte[tmp.length + read];
                System.arraycopy(tmp, 0, content, 0, tmp.length);
                System.arraycopy(buffer, 0, content, tmp.length, read);
            }
        }catch (Exception e) {
            e.printStackTrace();
        }finally{
            try{
                if( bi != null )
                    bi.close();
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
        return content;
    }
0
MarsOran Messages postés 4 Date d'inscription jeudi 9 novembre 2006 Statut Membre Dernière intervention 12 novembre 2007
12 nov. 2007 à 10:44
Merci pour ta réponse.
je ne savais qu'il existait un jdbc oracle !
ou je peux le télécharger ?
sinon, as tu la méthode inverse (pour lire un fichier de Oracle).
t'aurais pas par hasar une doc ou un lien vers un article (exemples, tutos..etc) traitant du sujet ? j'ai du mal à trouver quelque chose de sérieux sur le sujet.
encore une fois, merci pour ta réponse.
MarsOran.
0
the_wwt Messages postés 177 Date d'inscription jeudi 5 octobre 2006 Statut Membre Dernière intervention 16 janvier 2009 1
12 nov. 2007 à 10:53
Bonjour,
Pour le driver oracle tu tapes jdbc oracle et tu vas tomber sur le site d'Oracle...
Ensuite pour lire un blob, no problem, c'est comme si tu lisais n'importe kel autre type.
C'est juste l'écriture qui diffère car tu prend "un socket write error" si tu ne le fais pas comme cité précedement.
( SQL limite la taille des colonnes à 4 kilo alors qu'un lob peut contenir 4go).
De la doc, il n'y en pas trop dessus, essaye d'associer hibernate dans ta recherche car c'est ainsi que j'ai trouvé le bout de code précédant.
En tout cas, c'est la galère pour les infos car la politique pour la gestion des fichiers est l'externalisation, autrement dit avec le système de fichiers du serveur et non dans la base. Ca se discute...
Bon courage,
cordialement
Pierrick
0
amedlang1 Messages postés 8 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 15 mars 2008
3 mars 2008 à 15:09
salut tous:
quelqu'un me permet d'aider  de creer  un code java me permet de connecter a oracle8i en detailler toutes les instructions necessaires pour la configuration ...
et merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
amedlang1 Messages postés 8 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 15 mars 2008
4 mars 2008 à 18:40
téléchargement de classe12.jar?
qq'un me permet d'aider?
0
Rejoignez-nous