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

Kotlin Discussion :

Kotlin Connexion avec base de données PostgreSql


Sujet :

Kotlin

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 21
    Points : 20
    Points
    20
    Par défaut Kotlin Connexion avec base de données PostgreSql
    Bonsoir,

    je débute en programmation et j'essaie de trouver comment on se connecte à une base de données PostgreSql avec Kotlin mais pas de résultat positif.

    J'ai trouvé des codes en Java que j'ai converti en Kotlin avec Intelli J mais cela ne fonctionne pas...

    Merci d'avance du temps investi...

    NOM DE LA BASE: VillesFrance
    USER: postgre
    PASSWORD: qwerty
    LOCALHOST

    dans la partie du code ci dessous j'ai rajouté pour information ce que Intelli J m'indique (les HINTS): url: user: password:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    try {
                Class.forName("org.postgresql.Driver")
                c = DriverManager.getConnection( url: "jdbc:postgresql://localhost:5432/VillesFrance",
                       user: "postgres", password: "qwerty")


    Code Kotlin (Converti depuis code Java):

    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
    import java.sql.Connection
    import java.sql.DriverManager
     
    object PostgreSQLJDBC {
        @JvmStatic
        fun main(args: Array<String>) {
            var c: Connection? = null
            try {
                Class.forName("org.postgresql.Driver")
                c = DriverManager
                    .getConnection(
                        "jdbc:postgresql://localhost:5432/VillesFrance",
                        "postgres", "qwerty"
                    )
            } catch (e: Exception) {
                e.printStackTrace()
                System.err.println(e.javaClass.name + ": " + e.message)
                System.exit(0)
            }
     
            println("Opened database successfully")
        }
    }
    Message d'erreurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/bin/java "-javaagent:/Applications/IntelliJ IDEA CE.app/Contents/lib/idea_rt.jar=59504:/Applications/IntelliJ IDEA CE.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath "/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/lib/tools.jar:/Users/jcmac/IdeaProjects/Apprentissage Kotlin/out/production/Geolocalisation:/Users/jcmac/Library/Application Support/IdeaIC2018.3/Kotlin/kotlinc/lib/kotlin-stdlib.jar:/Users/jcmac/Library/Application Support/IdeaIC2018.3/Kotlin/kotlinc/lib/kotlin-reflect.jar:/Users/jcmac/Library/Application Support/IdeaIC2018.3/Kotlin/kotlinc/lib/kotlin-test.jar:/Users/jcmac/Library/Application Support/IdeaIC2018.3/Kotlin/kotlinc/lib/kotlin-stdlib-jdk7.jar:/Users/jcmac/Library/Application Support/IdeaIC2018.3/Kotlin/kotlinc/lib/kotlin-stdlib-jdk8.jar" fr.jcboussiquet.geo.PostgreSQLJDBC
    java.lang.ClassNotFoundException: org.postgresql.Driver
    	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    	at java.lang.Class.forName0(Native Method)
    	at java.lang.Class.forName(Class.java:264)
    	at fr.jcboussiquet.geo.PostgreSQLJDBC.main(PostgreSQLJDBC.kt:11)
    java.lang.ClassNotFoundException: org.postgresql.Driver
     
    Process finished with exit code 0

  2. #2
    Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2018
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Je ne fais pas de Kotlin mais je pense avoir une idée de ton soucis :
    Tu disposes bien de l'interface de connexion JDBC mais tu n'as pas le driver pour PostgreSql .
    ==> java.lang.ClassNotFoundException: org.postgresql.Driver
    En gros, il te faut embarquer dans tes dépendances le driver PostgreSql .


    Par contre, au lieu de compiler des codes JAVA en Kotlin, il existe des lib de dialogue SQL pour Kotlin.
    J'ai pu trouver sur Github un repo de JetBrains offrant une lib de dialect SQL supportant PostgreSql .
    Il s'agit du repo de JetBrain : https://github.com/JetBrains/Exposed

    En espérant que mon aide ne soit pas à côté de la plaque vu que je n'ai pas encore touché à Kotlin (stay on Java )

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 21
    Points : 20
    Points
    20
    Par défaut
    Merci cailliaud pour ta réponse.

    Si j'ai bien compris , c'est : Class.forName("org.postgresql.Driver") qui charge le driver.

    Je continue à chercher sur le net, mon driver ne serait pas disponible apparement... voir ci dessous

    J'espère qu'une personne pourra m'aider...

    documentation Postgresql:

    31.2.2. Charger le pilote

    Avant de vous connecter à une base de données, vous avez besoin de charger le pilote. Deux méthodes sont disponibles et celui à utiliser dépend de votre code.

    Dans la première méthode, votre code charge implicitement le pilote en utilisant la méthode Class.forName(). Pour PostgreSQL, vous devriez utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Class.forName("org.postgresql.Driver");
    Ceci charge le pilote et, pendant le chargement, le pilote s'enregistre lui-même avec JDBC.

    Note : La méthode forName() peut renvoyer ClassNotFoundException si le pilote n'est pas disponible.

    C'est la méthode la plus communément utilisée mais elle oblige votre code à utiliser uniquement PostgreSQL. Si votre code peut accéder à d'autres systèmes de bases de données dans le futur et que vous ne souhaitez pas utiliser d'extensions spécifiques à PostgreSQL, alors la deuxième méthode est conseillée.

    La seconde méthode passe le pilote en paramètre à la JVM lors de son lancement en utilisant l'argument -D. Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -Djdbc.drivers=org.postgresql.Driver example.ImageViewer
    Dans cet exemple, la JVM tentera de charger le pilote pendant son initialisation. Ceci fait, ImageViewer est lancée.

    Cette méthode est la meilleure car elle permet à votre code d'être utilisé avec d'autres paquets de bases de données sans recompiler le code. Le seul élément qui pourrait changer est l'URL de connexion. Ce point est traité tout de suite après.

    Une dernière chose : Quand votre code essaie d'ouvrir une Connection et que vous obtenez une SQLException de type No driver available, ceci est probablement dû au fait que pilote ne fait pas partie du chemin de classe ou que la valeur du paramètre n'est pas correcte.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 21
    Points : 20
    Points
    20
    Par défaut Solutions connexion base de données Postgresql
    C'est bon, j'ai trouvé.

    Démarches:

    Téléchargement du driver postgresql-42.2.5.jar, le placer dans la librairie de Java de l'ordinateur:

    Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/lib/

    Dans l'IDE (dans mon cas IntelliJ IDEA), Click droit sur la librairie <1.8>Library/Java/JavaVirtual... open Library Settings
    ajout du chemin d'accès de postgesql-42.2.5.jar

    Voilà! Pas grand chose mais quand on ne sait pas... Pour le code ci-dessous, j'imagine qu'il faut plus étoffer le catch {} mais pour le moment je ne sais pas.

    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
    package fr.jcboussiquet.test
     
    import java.sql.Connection
    import java.sql.DriverManager
     
     
    fun main(args: Array<String>) {
     
     
        var c: Connection? = null
     
        try {
            Class.forName("org.postgresql.Driver")
            c = DriverManager.getConnection(
                "jdbc:postgresql://localhost:5432/SQLvillefrance",
                "postgres",
                "qwerty")
        }
        catch ( e: Exception ) {
            println("ERROR: $e")
        }
        finally {
            println("Connexion Database ok !")
        }
     
    }

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

Discussions similaires

  1. connexion à une base de donnée postgresql
    Par chimouch dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 09/04/2011, 19h06
  2. problème de connexion avec base de donnée
    Par granit dans le forum VB.NET
    Réponses: 0
    Dernier message: 04/11/2009, 14h41
  3. connexion à une base de donnée PostgreSQL avec Psycopg
    Par mon_proj dans le forum Bibliothèques tierces
    Réponses: 1
    Dernier message: 06/03/2008, 12h58
  4. Connexion à une Base de données PostgreSQL distante
    Par soumou dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 02/05/2007, 13h16
  5. Réponses: 3
    Dernier message: 11/12/2006, 19h57

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