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

API standards et tierces Android Discussion :

Connexion à un serveur Oracle via une appli Android


Sujet :

API standards et tierces Android

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 18
    Points : 12
    Points
    12
    Par défaut Connexion à un serveur Oracle via une appli Android
    Bonjour à toutes et à tous,

    Je m'arrache les cheveux depuis 2 jours en essayant de me connecter une base de données Oracle depuis une application Android que je développe.

    Pour être plus précis : mon application doit aller chercher des informations sur un serveur Oracle sur le réseau local. Elle va stocker les informations récupérées dans la base SQLite d'Android. L'utilisateur passera ensuite dans un mode "non-connecté", et modifiera sans doute les informations contenues dans l'application. Une fois de retour sur le réseau local, les informations modifiées seront synchronisées avec la base de données Oracle.

    Mon code est le suivant, il tient en 2 classes distinctes (pour être propre) : une classes OracleDB (contenant toute la connexion à la BDD via JDBC) et une classe JDBCAndroid qui sert de "launcher" avec la méthode onCreate().

    OracleDB : http://pastebin.archlinux.fr/432146
    JDBCAndroid : http://pastebin.archlinux.fr/432148 (avec le logcat des erreurs).


    Mon projet contient bien l'archive ojdbc14.jar, mais comme vous pouvez le voir, toutes les classes ne sont pas reconnues. Je développe en 2.3.3, mais il y a les mêmes erreurs en 2.2 (j'ai testé). L'application en Java 100% (même code) fonctionne et arrive à se connecter à la BDD.

    Si certains d'entre vous ont réussi à se connecter à une BDD Oracle via le réseau, je serai ravi de savoir comment ; et si certains voient comment corriger l'erreur, je les en remercie.

    Autres remarques : j'ai trouvé une "solution" dans un produit d'Oracle : Oracle Database Lite, mais j'ai pas du tout compris comment ça marchait, même après avoir potassé une bonne partie de leur doc (immonde d'ailleurs ). Donc, idem, je suis preneur d'explications

    Merci par avance !

  2. #2
    Membre confirmé
    Homme Profil pro
    IUT Informatique
    Inscrit en
    Mars 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : IUT Informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 412
    Points : 486
    Points
    486
    Par défaut
    Salut,

    Normalement pour se connecter à une base de donnée il est conseillé de faire appel à une page php qui se connecte et qui effectuera les requêtes dont tu as besoin, tu récupère les résultats, et tu traite comme bon te semble.

    En tout cas c'est ce qui est conseiller de faire pour une BDD MySQL, et je pense que ca doit être pareil pour Oracle.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par malgache Voir le message
    Salut,

    Normalement pour se connecter à une base de donnée il est conseillé de faire appel à une page php qui se connecte et qui effectuera les requêtes dont tu as besoin, tu récupère les résultats, et tu traite comme bon te semble.

    En tout cas c'est ce qui est conseiller de faire pour une BDD MySQL, et je pense que ca doit être pareil pour Oracle.
    Salut malgache, merci beaucoup pour ta réponse.

    Alors, la solution web service est ressortie pas mal des endroits où j'ai cherché la solution à mon problème. Je la garde sous le coude, mais c'est la dernière solution que je cherche à appliquer, car elle implique l'installation et le déploiement d'un serveur web chez le client en plus du serveur Oracle. Cela demande également plus de travail car il faut développer le webservice également.

    Donc, tu me confortes dans l'idée que le webservice fonctionne bien. N'en ayant jamais fait, j'avoue que j'ai du mal à voir comment installer tout ça.

    Néanmoins, cela m'aiderait grandement si j'arrivais à me connecter à la BDD directement depuis l'application pour diverses raisons (utilisation d'une API déjà écrite et qui servirait pour une fois par exemple... )

  4. #4
    Membre confirmé
    Homme Profil pro
    IUT Informatique
    Inscrit en
    Mars 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : IUT Informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 412
    Points : 486
    Points
    486
    Par défaut
    T'as pas un serveur web pour stocker toi-même le php?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par malgache Voir le message
    T'as pas un serveur web pour stocker toi-même le php?
    Pour faire les tests oui. Mais une fois le produit fini, il se mettra à fonctionner chez différents clients (grosses structures), chacun avec sa propre BDD locale (non accessible depuis l'extérieur). Ça signifie donc 1 client (personne physique ^^ ) = 1 serveur Oracle + 1 serveur web. Donc à déployer et à maintenir surtout, ça fait pas mal.

    Donc c'est pas le nombre de serveur pour stocker le PHP qui pose problème, c'est plus les choses en plus que demande la mise en place de cette solution.

    C'est pourquoi, une connexion directe à la BDD Oracle serait parfaite. De plus, je trouve quand même que monter un serveur web pour être utilisé uniquement sur le réseau local, ça fait un peu "too much" xD, même si sans doute nécessaire

  6. #6
    Membre confirmé
    Homme Profil pro
    IUT Informatique
    Inscrit en
    Mars 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : IUT Informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 412
    Points : 486
    Points
    486
    Par défaut
    Ah oui si chaque client a sa propre BDD ça change tout lol.

    Ben à mon avis l'idée que tu as trouvé sur le net doit être la seule.

    Bon courage en tout cas ^^

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Merci pour ton aide, malgache

    Je suis donc en train de potasser la solution trouvée via Oracle Database Lite, mais c'est vraiment une usine à gaz leur truc.

    Personne pour trouver comment corriger les erreurs du logcat (cf 1er post, 2ème lien) ? J'en ai marre de cette exception >.<

    Merci par avance

  8. #8
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Personne pour trouver comment corriger les erreurs du logcat (cf 1er post, 2ème lien) ? J'en ai marre de cette exception >.<

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    04-22 08:17:52.509: ERROR/AndroidRuntime(346): Caused by: java.lang.ArrayIndexOutOfBoundsException
    04-22 08:17:52.509: ERROR/AndroidRuntime(346):     at oracle.jdbc.driver.T4CTTIoauthenticate.setSessionFields(T4CTTIoauthenticate.java:1019)
    04-22 08:17:52.509: ERROR/AndroidRuntime(346):     at com.example.OracleDB.connect(OracleDB.java:36)
    Tu as un tableau qui explose , et on dirait que c'est lors du connect de t
    a BD.

    Ca a l'air de venir directement du driver

    J'ai trouvé un lien parlant du problème , après je ne sais pas si ca marche
    http://karaf.922171.n3.nabble.com/Ka...td1781634.html
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Merci de prendre du temps pour me répondre. J'avoue que je commence à désespérer après 2 jours passés dessus.

    Ca a l'air de venir directement du driver
    C'est bien ce qu'il me semblait. J'avais un doute, mais ta pensée me confirme que ça vient bien de là.


    J'ai trouvé un lien parlant du problème , après je ne sais pas si ça marche
    http://karaf.922171.n3.nabble.com/Ka...td1781634.html
    Alors, merci d'avoir déniché ça. En revanche, ce n'est pas utile : ils n'ont trouvé aucune solution, le demandeur a abandonné. En revanche, il a posé la question sur les forums d'Oracle, mais il n'a pas eu une réponse satisfaisante, si ce n'est qu'une confirmation sur le fait que ça semble provenir du driver.

    J'ai donc également posté sur le forum d'Oracle, le topic se trouve ici. On verra si j'ai plus de succès...

    Je suis donc toujours preneur d'idée ! Si quelqu'un a réussit à se connecter à une BDD Oracle depuis son application Android et sans webservices, je suis preneur !
    Ou si quelqu'un a réussit à contourner le problème que j'ai, je suis ouvert à la solution

    Merci par avance !

  10. #10
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    En revanche, il a posé la question sur les forums d'Oracle, mais il n'a pas eu une réponse satisfaisante, si ce n'est qu'une confirmation sur le fait que ça semble provenir du driver.
    oui j'avais vu .

    Mais un des intervenant précise que pour lui cela marche .
    I have seen a similar (if not the same error). When you use dbcpb & spring you must keep in mind that the properties will be set on the JDBC driver instance using reflection. In some cases this can be source of problems.

    Anyway here is something that works for me (using managed datasource):
    <bean id="myDataSource" class="org.apache.commons.dbcp.managed.BasicManagedDataSource" destroy-method="close">
    <property name="driverClassName" value="${db.driver.class}"/>
    <property name="url" value="${db.url}"/>
    <property name="username" value="${db.user}"/>
    <property name="password" value="${db.password}"/>
    <property name="maxIdle" value="10"/>
    <property name="maxActive" value="100"/>
    <property name="maxWait" value="10000"/>
    <property name="validationQuery" value="select 1 from dual"/>
    <property name="testOnBorrow" value="false"/>
    <property name="testWhileIdle" value="true"/>
    <property name="timeBetweenEvictionRunsMillis" value="1200000"/>
    <property name="minEvictableIdleTimeMillis" value="1800000"/>
    <property name="numTestsPerEvictionRun" value="5"/>
    <property name="defaultAutoCommit" value="false"/>
    <property name="transactionManager" ref="transactionManager"/>
    </bean>

    I have tried that using version 10.2.0.2 oracle driver from springsource ebr and dbcp version 1.4.
    db.url = jdbc:oracle:thin:@${IP}:${PORT}:${DB}
    db.driver.class = oracle.jdbc.driver.OracleDriver

    I have successfully deployed that inside karaf.
    Regarde peut être par là .

    Comme as tu vérifier la connexion de ta bd comme le propose au autre intervenant

    The validation query is simply something like SELECT 1 from dual
    Just to check the connection and validate it.
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Le truc, c'est qu'ils sont dans un contexte d'exécution particulier (moi aussi, mais c'est justement pas le même du tout) : ils utilisent des Beans, et moi Android :$ Donc, je vais essayer de changer quelques propriétés de la connexion, mais à mon avis, sans grand espoir : le seul paramètre valable à indiquer serait le setAutoCommit(false); Toutes les autres propriétés ne me parlent pas du tout, et à mon avis, ne seront jamais utilisées (dans mon programme en tout cas).

    Concernant la vérification de la connexion à la BDD, je fais une requête SELECT nom FROM mproduit, qui est une requête très simple et s'exécutant parfaitement si la BDD est bien connectée.

    En effet, le code que vous avez en pastebin, est exactement le même que celui d'une application Java que j'ai faite pour tester la connexion via JDBC. Juste que le static void main(String[] args) est devenu onCreate(); .

    Et cette application Java se connecte parfaitement à la BDD. Et là, j'ai fait un copier/coller du code de l'application Java pour le mettre dans un projet Android (celui en pastebin), et boum, ça plante Alors que je sais que ce code fonctionne, du coup, c'est ça le plus désespérant...

  12. #12
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Bonjour à tous.

    J'ai résolu le problème, si on peut dire !

    J'arrive donc actuellement à me connecter directement à une BDD Oracle depuis mon projet Android, et ce, via le driver ojdbc.

    Le driver contenu dans le ojdbc14.jar du site d'Oracle ne fonctionne pas, pour des raisons que j'ignore, n'ayant pas accès au code source.

    Oracle propose en revanche un produit, Oracle Database Lite, qui permet de faire la synchronisation sur une application mobile avec une BDD Oracle externe. En fouillant un peu dans le répertoire d'installation du truc, on tombe sur un dossier jdbc, lui-même contenant un ojdbc14.jar. Il faut donc utiliser celui-ci, et tout baigne

    Merci Oracle de garder jalousement planqué ce jar merveilleux !

    Merci à tous ceux qui ont essayé de m'aider, pour leur patience et leurs conseils

    Cordialement,
    Eriatolc

  13. #13
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Enfin ouvrir l'accès à la base de données à tous vents, c'est quand même un poil dangereux tout de même, genre les mots de passe de la DB vont circuler sur le réseau mobile. C'est genre un modèle de sécurité

    C'est principalement pour ça que l'on fait en sorte dans la plupart des applis un tant soit peu bien construites qu'un serveur s'intercale entre la base de données et les clients, afin de:

    1. Eviter que n'importe qui se connecte n'importe comment sur la base (et vu que la base est ouverte à un réseau externe, le n'importe qui peut vraiment être une personne de non confiance absolue).
    2. Contrôler en un point centralisé les requêtes émise en direction de la base. En effet le moindre client possédant les creddentials de la base pourra plus ou moins passer n'importe quel ordre DML (voir DDL), et donc des delete/update en série (sans parler des DROP).

    Dans l'ensemble je vous conseille très fortement de revoir votre architecture. La moindre cellule d'archi/sécurité voyant ce genre de choses risque fort de vous tomber sur le coin du rable... Sans parler des crises d'apoplexie chez les DBA. Et je suppose qu'un client se payant de l'Oracle a au moins un DBA, un archi qui traîne, si ce n'est plusieurs. Sans parler des politiques de firewall...
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par sinok Voir le message
    Enfin ouvrir l'accès à la base de données à tous vents, c'est quand même un poil dangereux tout de même, genre les mots de passe de la DB vont circuler sur le réseau mobile. C'est genre un modèle de sécurité

    C'est principalement pour ça que l'on fait en sorte dans la plupart des applis un tant soit peu bien construites qu'un serveur s'intercale entre la base de données et les clients, afin de:

    1. Eviter que n'importe qui se connecte n'importe comment sur la base (et vu que la base est ouverte à un réseau externe, le n'importe qui peut vraiment être une personne de non confiance absolue).
    2. Contrôler en un point centralisé les requêtes émise en direction de la base. En effet le moindre client possédant les creddentials de la base pourra plus ou moins passer n'importe quel ordre DML (voir DDL), et donc des delete/update en série (sans parler des DROP).

    Dans l'ensemble je vous conseille très fortement de revoir votre architecture. La moindre cellule d'archi/sécurité voyant ce genre de choses risque fort de vous tomber sur le coin du rable... Sans parler des crises d'apoplexie chez les DBA. Et je suppose qu'un client se payant de l'Oracle a au moins un DBA, un archi qui traîne, si ce n'est plusieurs. Sans parler des politiques de firewall...
    Bonsoir,

    Merci du conseil, mais je le redis. Cette application ne fonctionnera que sur des tablettes uniquement connectées sur un réseau local sécurisé. Aucun accès internet, la BDD n'est donc pas exposée à l'extérieur. Elle se situe dans un réseau local, et il faut être sur ce réseau local pour utiliser la BDD. Je pense donc qu'au contraire les risques d'un point de vue sécurité sont faibles étant donné que nous sommes dans une enveloppe restreinte.

    Imaginez une application Android qui ne fonctionnerait pleinement que lorsque vous êtes connecté sur le réseau local de votre entreprise (via wifi, avec en plus bien sûr, un firewall, et un filtrage). En dehors de ce réseau local, vous ne pouvez profiter de l'application.
    Vous allez me dire "c'est idiot !", mais vous ne connaissez pas le contexte complet de cette application, et pour des raisons professionnelles que vous comprendrez, je ne peux en dire plus. Mais cette architecture est adaptée d'une part aux besoins du (des) client(s), et à un souci de sécurité.

    --
    EDIT : je rajoute que concernant les droits sur la base de données, ils sont assez détaillés. Il s'agit d'un milieu professionnel qui en plus, est très à cheval juridiquement parlant, et donc, tout est fait pour garantir au maximum la sécurité des données.
    --

    Merci encore pour vos précieux conseils. Cordialement,

    Eriatolc

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajouter des données dans un serveur de données MySQL via une application Android
    Par af.zakaria dans le forum API standards et tierces
    Réponses: 0
    Dernier message: 30/07/2012, 16h25
  2. Connexion a pentaho BI via une bd (ORACLE)
    Par clemsso dans le forum Pentaho
    Réponses: 1
    Dernier message: 15/07/2011, 14h09
  3. connexion oracle d'une appli avec WIFI
    Par lca94 dans le forum Connexions aux bases de données
    Réponses: 2
    Dernier message: 10/01/2010, 13h14
  4. Aide pour une connexion à sql serveur 2005 via Delphi 7
    Par fabpan dans le forum Bases de données
    Réponses: 2
    Dernier message: 10/11/2009, 20h52
  5. Aide pour une connexion à sql serveur 2005 via Delphi 7
    Par fabpan dans le forum Développement
    Réponses: 0
    Dernier message: 10/11/2009, 15h56

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