web-dev-qa-db-fra.com

Étapes à suivre pour utiliser la base de données MySQL avec Play Framework 2.0

Je suis nouveau dans le framework Play. J'essaie de configurer la base de données MySQL en tant que source de données à utiliser avec Play Ebeans.

Pourriez-vous, s'il vous plaît, expliquer les étapes nécessaires à la configuration de MySQL avec l'infrastructure Play 2.0 (téléchargement de pilotes, ajout de dépendances, etc.).

91
Veera

Regardez cette page dans la documentation de Play. Ça dit:

À l'exception de la base de données h2 en mémoire, particulièrement utile en mode développement, Play 2.0 ne fournit aucun pilote de base de données. Par conséquent, pour déployer en production, vous devrez ajouter votre pilote de base de données en tant que dépendance d'application.

Par exemple, si vous utilisez MySQL5, vous devez ajouter une dépendance pour le connecteur:

val appDependencies = Seq(
    // Add your project dependencies here,
    ...
    "mysql" % "mysql-connector-Java" % "5.1.18"
    ...
)

SBT téléchargera le pilote pour vous. Vous devriez également consulter le section sur la gestion des dépendances .

Pour vous connecter à MySQL, vous devrez également modifier certains paramètres de votre application.conf:

db.default.driver=com.mysql.jdbc.Driver
db.default.url="mysql://root:secret@localhost/myDatabase"
101
Carsten

Comme Carsten l'a écrit, il peut être récupéré à partir de la documentation, mais voici un résumé:

assurez-vous que la dépendance est configurée dans /project/Build.scala

val appDependencies = Seq(
    // Add your project dependencies here,
    "mysql" % "mysql-connector-Java" % "5.1.18"
)

Ajoutez une configuration appropriée de la base de données (remplacez la configuration H2 par défaut) dans /conf/application.conf:

(ne supprimez pas le codage de l'URL):

db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://localhost/your_db_name?characterEncoding=UTF-8"
db.default.user=your_login
db.default.password=your_pass

dans le même fichier, recherchez et assurez-vous que cette ligne n'est PAS commentée:

ebean.default="models.*"

C'est tout, redémarrez votre application (ou exécutez-le en mode dev), puis il créera un DDL et vous demandera de l'appliquer.

94
biesior

J'utilise play 2.2.0 et je viens juste d'ajouter la ligne suivante à build.sbt dans le dossier racine du projet.

  "mysql" % "mysql-connector-Java" % "5.1.27"

Et jouer télécharge automatiquement le pilote. Il semble que Build.scala n’est plus nécessaire pour cela. Les modifications apportées à application.conf doivent être appliquées comme indiqué par les commentateurs ci-dessus.

10
jrook

La plupart des méthodes d'accès à une base de données mysql que j'ai rencontrées n'expliquent pas comment établir une connexion et récupérer des données à partir du modèle. Dans mon application, j'utilise à la fois mongoDB et une base de données mysql externe. Alors voici comment j'ai fait (le côté mysql) de choses:

  1. Pour Play 2.3.3, dans le fichier build.sbt, ajoutez la ligne spécifique à mysql dans libraryDependencies:

    libraryDependencies ++= Seq(
        "mysql" % "mysql-connector-Java" % "5.1.27"
    )
    
  2. Dans le fichier /conf/application.conf, ajoutez ceci:

    db.myotherdb.driver = com.mysql.jdbc.Driver
    db.myotherdb.url = "jdbc:mysql://xxx.xxx.xxx.xxx/NameOfOtherDB?characterEncoding=UTF-8"
    db.myotherdb.user = MyOtherDbUSername
    db.myotherdb.password = MyOtherDbPass
    

    Vous pouvez remplacer "myotherdb" par "default" si vous souhaitez utiliser la base de données par défaut ou tout autre nom que vous souhaitez utiliser. Remplacez "xxx.xxx.xxx.xxx" par l'adresse IP du serveur sur lequel se trouve votre base de données (dans le cas d'une base de données externe) ou localhost (ou 127.0.0.1) pour la base de données locale. Remplacez "NameOfOtherDB" par le nom de la base de données que vous souhaitez utiliser, "MyOtherDbUSername" par votre nom d'utilisateur et "MyOtherDbPass" par votre mot de passe.

  3. Dans votre modèle (/app/models/MyModel.scala), ajoutez ceci:

    val connection = DB.getConnection("myotherdb")
    
  4. Créez la déclaration, la requête et exécutez-la:

    val statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)
    val query = "SELECT * FROM myTableName"
    val resultset = statement.executeQuery(query)
    
  5. Ensuite, vous pouvez continuer avec ce que vous voulez faire avec les données récupérées. Par exemple:

    while (resultset.next()) {
        resultset.getString("columnName")
    }
    

    Où "columnName" est le nom de la colonne/du champ de la table de la base de données que vous souhaitez récupérer.

Dernier point mais non le moindre, je voudrais noter que vous voudrez peut-être fermer la connexion en appelant close ()

8
consuela

Je suis resté coincé avec ma configuration MySQL jusqu'à ce que je trouve cela.

Les choses les plus importantes tirées de @biesior répondent:

  • Ajouter le connecteur MySQL/J dans la dépendance du projet (qui se trouve dans /project/Build.scala)
  • Après avoir ajouté une dépendance, lancez play dependencies pour résoudre les dépendances MySQL/J récemment ajoutées
  • Décommenter la ligne de configuration ebean par défaut ebean.default="models.*"
  • Configurez correctement la base de données MySQL avec le codage de caractères approprié db.default.driver=com.mysql.jdbc.Driver db.default.url="jdbc:mysql://www.sample.com:3306/test?characterEncoding=UTF-8" db.default.user=playuser db.default.pass=playuser

Cela m'a sauvé la journée.

6
ck1910

Jouez à 2.4.3 & MYSQL 5.7.9

J'ai pu obtenir ce travail en rassemblant des morceaux d'informations de toutes les réponses précédentes. En voici donc un autre, qui, espérons-le, est plus à jour ou utile pour ceux qui évoluent dans un environnement similaire.

Détails de l'environnement: ( c'est ce que j'utilise)

  • Jouer 2.4.3 cela vient avec activator-1.3.7-minimal
  • JDK8, vous devriez déjà l'avoir car je ne pense pas que cette version du jeu fonctionne avec JDK7
  • MYSQL 5.7.9

appication.conf

db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://localhost:3306/testSchema?characterEncoding=UTF-8"
db.default.user=yourDBUserName
db.default.password=yourDBUserPass

Remarque:

  • testSchema dans l'URL est le nom de votre base de données. Si vous utilisez quelque chose comme MYSQL Workbench , vous verrez ceci énuméré dans la section SCHEMAS. J'ai appelé le mien testSchema. D'autres peuvent l'appeler quelque chose comme "myDatabase"
  • Le port doit être le port MYSQL. Pas votre port d'application. Je mets 3306 Dans l'exemple car c'est généralement la valeur par défaut pour MYSQL.

build.sbt

Ajoutez cette ligne ci-dessous à votre fichier build.sbt. Cela devrait aller après la déclaration libraryDependencies ++= Seq().

libraryDependencies += "mysql" % "mysql-connector-Java" % "5.1.36"

Enfin

  • lancez cette commande à partir de la racine de votre projet -> activator reload
  • redémarrez votre application
4
Kris Hollenbeck

Pour jouer 2.3.1, procédez comme suit.

1) Ajouter le connecteur MySQL/J dans la dépendance du projet (qui se trouve dans /project/build.sbt)

libraryDependencies ++= Seq( javaJdbc, javaEbean, "mysql" % "mysql-connector-Java" % "5.1.29"

2) Ne commentez pas la ligne de configuration ebean par défaut ebean.default = "models. *"

3) Configurer correctement la base de données MySQL avec le codage de caractères approprié

db.default.driver=com.mysql.jdbc.Driver    //this is com. and not org.
db.default.url="jdbc:mysql://127.0.0.1/test?characterEncoding=UTF-8"
db.default.user=playuser
db.default.pass=playuser

4) la plupart des Imp. Exécutez une commande reload dans la console.

4
working
For me this work ,Add this below line into your Dependencies

**"mysql" % "mysql-connector-Java" % "5.1.36"**


So , here is the code

      import Java.sql.Connection

      val driver = "com.mysql.jdbc.Driver"
      val url = "jdbc:mysql://localhost/world"
      val username = "root"
      val password = "root"
      var connection: Connection = null

  try {         // make the connection
                Class.forName(driver)
                connection = DriverManager.getConnection(url, username, password)

                // create the statement, and run the select query
                val statement = connection.createStatement()
                val resultSet = statement.executeQuery("SELECT id , name FROM bar")

                val sql: SqlQuery = SQL("select * from products order by name asc")

                while (resultSet.next()) {
                  val id = resultSet.getString("id")
                  val name = resultSet.getString("name")
                  println(id, name)
                }
              } catch {
                case e: Exception => println("exception caught: " + e);
              }
              connection.close()
1
SwwapnilShirke

J'ai eu le même problème dans le dernier framework de jeu 2.4.x avec l'activateur 1.3.6.

Voici les étapes. J'ai suivi les étapes décrites ici https://www.playframework.com/documentation/2.4.x/JavaDatabase

Voici mon application.conf

# MySQL DB Configuration
db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://{hostname or ipaddres}/{db name}?characterEncoding=UTF-8"
db.default.username=username  // Note that user id deprecated, instead use username. Though that is not a major issue
db.default.password="password"

# JPA Configurations
jpa.default=defaultPersistenceUnit
PlayKeys.externalizeResources = false

# JavaEbean configuration
ebean.default = ["models.*"]

Voici build.sbt

libraryDependencies ++= Seq(
  javaJdbc,
  cache,
  javaWs,
  javaJpa,
  evolutions,
  "mysql" % "mysql-connector-Java" % "5.1.27"
)

plugins.sbt

// The Play plugin
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.4.3")

// Web plugins
addSbtPlugin("com.typesafe.sbt" % "sbt-coffeescript" % "1.0.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.0.6")
addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.3")
addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.7")
addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.1.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-mocha" % "1.1.0")

// Play enhancer - this automatically generates getters/setters for public fields
// and rewrites accessors of these fields to use the getters/setters. Remove this
// plugin if you prefer not to have this feature, or disable on a per project
// basis using disablePlugins(PlayEnhancer) in your build.sbt
addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.1.0")

// Play Ebean support, to enable, uncomment this line, and enable in your build.sbt using
// enablePlugins(SbtEbean). Note, uncommenting this line will automatically bring in
// Play enhancer, regardless of whether the line above is commented out or not.
addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "1.0.0")

Voici l'étape importante.

Après avoir configuré les étapes ci-dessus, accédez à la ligne de commande, arrêtez votre activateur et exécutez la commande activator run. Dans ma situation, je continuais à avoir l'erreur unable to find mysql drivers. Après avoir exécuté le activator run, activateur téléchargerait les pilotes MySQL et résoudrait les dépendances. C’est l’étape importante qui a résolu mon problème.

1
Manjunath Reddy

Pour jouer Java projet utilisant SBT

Changez la dépendance de la bibliothèque pour qu'elle ressemble à ceci dans "build.sbt"

libraryDependencies ++= Seq(
  javaJdbc,
  javaEbean,
  cache,
  javaWs,
  "mysql" % "mysql-connector-Java" % "5.1.27"
)

Exécutez votre projet en utilisant "activator run"

Jouez avec le connecteur JDBC requis.

1
Anand Kumar