IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

Connection via JDBC sur bases ODB


Sujet :

JDBC Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Août 2002
    Messages : 35
    Points : 37
    Points
    37
    Par défaut Connection via JDBC sur bases ODB
    Bonjour !

    J'ai un gros problème d'utilisation du driver JDBC pour me connecter sur des bases ODB ( OpenOffice Base ).
    J'ai fait des recherches et le seul moyen que j'ai trouvé, c'est de passer par HSQLDB. Le problème est que ce driver crée des bases virtuelles et n'attaque pas directement les bases ODB...

    Comment puis-je attaquer les bases ODB directement ? ( tel qu'on le fait pour les bases access, en passant par ODBC )

    Merci pour votre aide...

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    J'ai le même souci - j'utilise un accès jdbc à de petits fichiers Access et voudrais passer sur OpenOffice mais je ne sais pas comment me connecter aux fichiers OpenOffice.
    As tu trouver la solution ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 3
    Points : 5
    Points
    5
    Par défaut connection à une base openoffice via jdbc
    [avez vous trouvé une solution ???

  4. #4
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    bonjour,

    Visiblement c'est pas possible directement !
    Avez vous une raison précise de vouloir utiliser la base d'open Office ?

  5. #5
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 60
    Points : 73
    Points
    73
    Par défaut
    Bonjour,

    Je ne sais pas si ce post est encore d'actualité mais étant tombé dessus en cherchant la même chose que l'auteur, j'ai trouvé la réponse sur un autre site :

    Il n'est pas possible de se connecter à un ODB directement via JDBC ou ODBC car le fichier est un container zippé. Il y a besoin de l'extraire pour pouvoir accéder aux données.

    L'exemple suivant va ouvrir un fichier Base via la classe Java ZIP, extraire les fichiers nécessaires dans un répertoire temporaire et créer une connexion JDBC en utilisant le pilote HSQLDB, faire une requête et détruire les fichiers temporaires. Le fichier en question sera localisé dans ~/OODatabase/employeeDatabase.odb. La requête ramène le prénom et le nom (nm_emp_first, nm_emp_last) depuis la base.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    import java.sql.*;
    import java.util.zip.*;
    import java.io.*;
    import org.hsqldb.jdbcDriver;
    import java.util.*;
     
    public class Test {
         public static void main(String[] args) {
              jdbcDriver j = new jdbcDriver(); //Instantiate the jdbcDriver from HSQL
              Connection con = null; //Database objects
              Statement com = null;
              ResultSet rec = null;
              ZipFile file = null; //For handeling zip files
              ZipEntry ent = null;
              Enumeration en = null; //For the entries in the zip file
              BufferedOutputStream out = null; //For the output from the zip class
              InputStream in = null; //for reading buffers from the zip file
              File f = null; //Used to get a temporary file name, not actually used for anything
              int len; //General length counter for loops
              List v = new ArrayList(); //Stores list of unzipped file for deletion at end of program
     
              //Unzip zip file, via info from
              //http://www.devx.com/getHelpOn/10MinuteSolution/20447
     
              try
              {
                   //Open the zip file that holds the OO.Org Base file
                   file = new ZipFile("/home/digiassn/OODatabase/employeeDatabase.odb");
     
                   //Create a generic temp file. I only need to get the filename from
                   //the tempfile to prefix the extracted files for OO Base
                   f = File.createTempFile("ooTempDatabase", "tmp");
                   f.deleteOnExit();
     
                   //Get file entries from the zipfile and loop through all of them
                   en = file.entries();
                   while (en.hasMoreElements())
                   {
                        //Get the current element
                        ent = (ZipEntry)en.nextElement();
     
                        //If the file is in the database directory, extract it to our
                        //temp folder using the temp filename above as a prefix
                        if (ent.getName().startsWith("database/"))
                        {
                             System.out.println("Extracting File: " + ent.getName());
                             byte[] buffer = new byte[1024];
     
                             //Create an input stream file the file entry
                             in = file.getInputStream(ent);
     
                             //Create a output stream to write out the entry to, using the
                             //temp filename created above
                             out = new BufferedOutputStream(new FileOutputStream("/tmp/" + f.getName() + "." + ent.getName().substring(9)));
     
                             //Add the newly created temp file to the tempfile vector for deleting
                             //later on
                             v.add("/tmp/" + f.getName() + "." + ent.getName().substring(9));
     
                             //Read the input file into the buffer, then write out to
                             //the output file
                             while((len = in.read(buffer)) >= 0)
                             out.write(buffer, 0, len);
     
                             //close both the input stream and the output stream
                             out.close();
                             in.close();
                        }
                   }
                   //Close the zip file since the temp files have been created
                   file.close();
     
                   //Create our JDBC connection based on the temp filename used above
                   con = DriverManager.getConnection("jdbc:hsqldb:file:/tmp/" + f.getName(), "SA", "");
     
                   //Create a command object and execute, storing the results in the rec object
                   com = con.createStatement();
                   rec = com.executeQuery("select * from \"employees\"");
     
                   //GO through the resultset, and output the results
                   while (rec.next())
                        System.out.println("Last Name: " + rec.getString("nm_emp_last") + " First Name: " + rec.getString("nm_emp_first"));
     
                   //Close all the database objects
                   rec.close();
                   com.close();
                   con.close();
     
                   //Delete the temporary files, which file names are stored in the v vector
                   for (len = 0; len < v.size(); len++)
                   (new File((String)v.get(len))).delete();
              }
              catch (Exception e)
              {
                   e.printStackTrace();
              }
         }
    }

    Valà, en espérant que cette réponse sera utile à quelqu'un !

Discussions similaires

  1. Erreur connection via JDBC au serveur
    Par pbaudru dans le forum JDBC
    Réponses: 16
    Dernier message: 30/11/2010, 17h04
  2. Connexion JDBC sur base sqlite distante
    Par legui dans le forum Applets
    Réponses: 3
    Dernier message: 28/11/2008, 03h31
  3. Problème connexion en jdbc sur base MySQL
    Par Staron dans le forum JDBC
    Réponses: 2
    Dernier message: 07/03/2008, 13h32
  4. Impossible de se connecter via ODBC à ma base de données
    Par gbaz dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 12/09/2005, 11h50
  5. [JDBC]connection via JDBC
    Par ENIT-Info dans le forum JDBC
    Réponses: 4
    Dernier message: 18/03/2005, 17h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo