9
votes

Comment pourrais-je savoir si une table de base de données si elle existe dans la requête Scala

J'essaie Scalaquery, c'est vraiment incroyable. Je pourrais défini la table de base de données à l'aide de la classe Scala et la questionner facilement.

Mais j'aimerais savoir, dans le code suivant, comment puis-je vérifier si une table est existez, donc je n'appellerai pas 'table.ddl .Create 'deux fois et obtenez une exception lorsque j'exécute ce programme deux fois? P>

object Users extends Table[(Int, String, String)]("Users") {
    def id = column[Int]("id")
    def first = column[String]("first")
    def last = column[String]("last")
    def * = id ~ first ~ last
}

object Main
{
    val database = Database.forURL("jdbc:sqlite:sample.db", driver = "org.sqlite.JDBC")

    def main(args: Array[String]) {
        database withSession {
            // How could I know table Users is alrady in the DB?
            if ( ??? )  {
                Users.ddl.create
            }
        }
    }
}


0 commentaires

6 Réponses :


1
votes

avec java.sql.databasemetadata (interface). Selon votre base de données, plus ou moins de fonctions peuvent être mises en œuvre.


3 commentaires

Donc, je suppose qu'il n'y a pas de solution scalaquery pourrait faire cela?


Je ne trouve rien, et de ce que j'ai trouvé ( l'utilisateur étend le tableau [(tuple de types)] ), je suppose que l'objectif est d'utiliser la typing anticipé. Je ne vois pas comment vous pouvez vous aider à intégrer vous-même des tables définies dynamiques vous-même, mais je n'ai pas utilisé de réflexion souvent, alors peut-être qu'il y a un moyen, et je ne peux tout simplement pas le voir. La documentation est un peu maigre. Il existe des méta -Classes, mais je n'ai pas trouvé d'exemples comment les utiliser dans le wiki ou le blog. :)


Je ne trouve rien non plus. Donc, je suppose que c'est la réponse. Et juste une note, la session # des métadonnées pourrait obtenir le java.sq.databasemetatata de la session de base de données actuelle.




2
votes

Voici une solution complète qui vérifie l'application Démarrer à l'aide d'un DB PostgreSQL pour Playframework xxx


0 commentaires

7
votes

Ce fil est un peu vieux, mais peut-être que quelqu'un trouvera cela utile. Tous mes DAOS incluent ceci: xxx


1 commentaires

Merci, c'est génial. Fonctionne avec slick 2.1.x



0
votes

Voir aussi la discussion liée ici. Je préfère personnellement la suggestion de Hezamu et l'étendre comme suit pour le garder au sec: xxx

alors vous pouvez simplement créer vos tables avec la session implicite: xxx


0 commentaires

0
votes

Vous pouvez définir dans votre DAO impliquer la méthode suivante (prise de SLICK MTABLABLE.GETTABLE échoue toujours avec une exception inattendue [JDBCSQXException: Valeur non valide 7 pour le paramètre Colonnierex [90008-60]] ) qui vous donne un true O FALSE Selon une table définie dans votre DB:

    import slick.jdbc.meta._


0 commentaires