Erforderliche Schritte zur Verwendung der MySQL-Datenbank mit Play Framework 2.0

Ich bin neu im Play Framework. Ich versuche, die MySQL-Datenbank als Datenquelle für Play Ebeans zu konfigurieren.

Könnten Sie jemandem bitte die Schritte erklären, die zur Konfiguration von MySQL mit dem Play 2.0-Framework erforderlich sind (z. B. Herunterladen von Treibern, Hinzufügen von Abhängigkeiten usw.).

Antworten auf die Frage(10)

auf die ich gestoßen bin, erklären nicht, wie eine Verbindung hergestellt und Daten aus dem Modell abgerufen werden. In meiner Anwendung verwende ich sowohl MongoDB als auch eine externe MySQL-Datenbank. Also hier ist, wie ich (die MySQL-Seite der) Dinge getan habe:

Fügen Sie für Play 2.3.3 in der Datei build.sbt die mysql-spezifische Zeile in die libraryDependencies ein:

<code>libraryDependencies ++= Seq(
    "mysql" % "mysql-connector-java" % "5.1.27"
)
</code>

Fügen Sie in der Datei /conf/application.conf Folgendes hinzu:

<code>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
</code>

Sie können "myotherdb" durch "default" ersetzen, falls Sie die Standarddatenbank verwenden möchten oder durch einen anderen Namen, den Sie verwenden möchten. Ersetzen Sie "xxx.xxx.xxx.xxx" durch die IP-Adresse des Servers, auf dem sich Ihre Datenbank befindet (im Falle einer externen Datenbank) oder durch localhost (oder 127.0.0.1) für die lokale Datenbank. Ersetzen Sie "NameOfOtherDB" durch den Namen der Datenbank, die Sie verwenden möchten, "MyOtherDbUSername" durch Ihren Datenbankbenutzernamen und "MyOtherDbPass" durch Ihr Datenbankkennwort.

Fügen Sie in Ihrem Modell (/app/models/MyModel.scala) Folgendes hinzu:

<code>val connection = DB.getConnection("myotherdb")
</code>

Erstellen Sie die Anweisung, die Abfrage und führen Sie sie aus:

<code>val statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)
val query = "SELECT * FROM myTableName"
val resultset = statement.executeQuery(query)
</code>

Dann können Sie mit den abgerufenen Daten fortfahren. Zum Beispiel:

<code>while (resultset.next()) {
    resultset.getString("columnName")
}
</code>

Dabei ist "Spaltenname" der Name der DB-Tabellenspalte / des DB-Tabellenfelds, die / das Sie abrufen möchten.

Zu guter Letzt möchte ich darauf hinweisen, dass Sie die Verbindung möglicherweise durch einen Anruf beenden möchtenschließen()

 lomse12. Okt. 2014, 17:38
Ihr Beispiel ist sehr nützlich. Wie würde es für Play Java aussehen?

im Stammverzeichnis des Projekts hinzufügen.

<code>  "mysql" % "mysql-connector-java" % "5.1.27"
</code>

Und spielen lädt automatisch den Treiber herunter. Build.scala wird dafür anscheinend nicht mehr benötigt. Änderungen an der application.conf sollten angewendet werden, wie die oben genannten Kommentatoren erwähnt haben.

 Dao Lam08. Juni 2014, 07:40
Vielen Dank!!! Für Leute, die detaillierte Anweisungen benötigen, wie ich, gehen Sie im Grunde zu build.sbt und fügen Sie diese Zeile hinzulibraryDependencies ++= Seq(jdbc,anorm,cache,"mysql" % "mysql-connector-java" % "5.1.27")
 Jack Slingerland30. Nov. 2013, 14:56
Das hat mich gerettet. Verwenden von Play 2.10.3 und dies war die richtige Vorgehensweise.
 Damir Olejar18. Nov. 2015, 00:31
Vergessen Sie bei Leuten wie mir nicht, den ./activator zu stoppen und dann erneut auszuführen :)

kann es aus der Dokumentation abgerufen werden, aber hier ist eine Zusammenfassung:

Stellen Sie sicher, dass Sie die Abhängigkeit in konfiguriert haben/project/Build.scala

<code>val appDependencies = Seq(
    // Add your project dependencies here,
    "mysql" % "mysql-connector-java" % "5.1.18"
)
</code>

Fügen Sie eine korrekte Konfiguration der Datenbank hinzu (ersetzen Sie die Standard-H2-Konfiguration)/conf/application.conf:

(Codierung nicht von URL entfernen):

<code>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
</code>

Suchen Sie in derselben Datei und vergewissern Sie sich, dass diese Zeile NICHT kommentiert ist:

<code>ebean.default="models.*"
</code>

Das ist alles, starten Sie Ihre App neu (oder führen Sie sie im Dev-Modus aus), dann erstellt sie eine DDL und fordert Sie auf, sie anzuwenden.

 BenMorganIO31. Mai 2014, 22:59
Warum haben Sie jdbc am Anfang der db-URL hinzugefügt?
 biesior01. Juni 2014, 23:06
@BenMorganIO, weil wir den JDBC-Treiber verwenden müssen, eine solche Syntax, mehr nicht
 Michael Lafayette20. Jan. 2016, 19:49
Ich bin verwirrt. Was ist der Zweck von "jdbc: mysql:" in der URL? Ist "jdbc: mysql" der Name der Datenbank?
 seron16. März 2014, 09:55
Sie sollten auch sicherstellen, dass MySQL nicht nur auf Socket-Verbindungen (Mac / Linux) beschränkt istlocalhost muss möglicherweise durch ersetzt werden127.0.0.1. In bestimmten Begriffen mitMariaDB (ein Oracle-freier Ersatz für MySQL) von MacPorts musste ich auskommentierenüberspringen-Vernetzung immy.cnf und verwenden Sie die IP-Adresse anstelle vonlocalhost um Play erfolgreich verbinden zu lassen.
 Lavixu23. Dez. 2013, 13:31
Können Sie bitte auch hier die Dokumentation aktualisieren?github.com/playframework/playframework/blob/2.2.x/documentation/… Damit alle profitieren können? Vielen Dank!
Lösung für das Problem

diese Seite aus der Dokumentation von Play. Es sagt:

Anders als für die speicherinterne h2-Datenbank, die hauptsächlich im Entwicklungsmodus nützlich ist, bietet Play 2.0 keine Datenbanktreiber. Folglich müssen Sie zur Bereitstellung in der Produktion Ihren Datenbanktreiber als Anwendungsabhängigkeit hinzufügen.

Wenn Sie beispielsweise MySQL5 verwenden, müssen Sie eine Abhängigkeit für den Connector hinzufügen:

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

SBT lädt den Treiber für Sie herunter. Sie sollten auch das überprüfenAbschnitt zum Verwalten von Abhängigkeiten.

Um eine Verbindung zu MySQL herzustellen, müssen Sie auch einige Einstellungen in Ihrem ändernapplication.conf:

<code>db.default.driver=com.mysql.jdbc.Driver
db.default.url="mysql://root:[email protected]/myDatabase"
</code>
 Sparko21. Feb. 2014, 12:14
Nach dem Einbeziehen der obigen Einstellungen war es erforderlich, "Abhängigkeiten" anstelle von "Update" (von @KinjalDixit erwähnt) in der Spielekonsole auszuführen.
 Carsten04. Apr. 2012, 13:04
@biesior: Danke! Du hast recht, ich habe es behoben.
 johanandren17. Jan. 2014, 14:37
Wenn Sie es zum Laufen bringen, sollten Sie auch den Thread-Pool-Abschnitt der Dokumentation lesen und Ihre Konfiguration entsprechend aktualisieren, da jdbc eine blockierende API ist.playframework.com/documentation/2.2.x/ThreadPools
 bharal29. Dez. 2016, 18:34
sollte evtl. mit dem neuen build.sbt befehl oder einer umrissenen version aktualisiert werden?
 Kinjal Dixit01. Juni 2013, 07:18
Spiel Framework 2.1.1 hier. nach dem updaten der build.sbt solltest du im play terminal den befehl 'update' eingeben
 Veera04. Apr. 2012, 10:09
Vielen Dank. Wenn dies erledigt ist, welche Konfigurationsänderungen sollte ich dann in der Datei application.conf vornehmen? (db.default.driver, db.default.url usw.)
 Adrian Scott27. Dez. 2013, 19:39
Heutzutage sollte es auf der Root-Ebene des Projekts in die build.sbt eingefügt werden, zB: libraryDependencies ++ = Seq (javaJdbc, javaEbean, "mysql"% "mysql-connector-java"% "5.1.28", Zwischenspeicher )
 biesior04. Apr. 2012, 10:32
@Carsten, URL ohne Anführungszeichen geben wird fehlschlagen
 Carsten04. Apr. 2012, 10:26
Oh, richtig, sorry. Ich habe sie zu meiner Antwort hinzugefügt.
<code>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()
</code>
Spielen Sie 2.4.3 & MySQL 5.7.9

indem ich Informationen aus allen vorherigen Antworten zusammensetzte. Hier ist also eine andere, die hoffentlich aktueller oder für diejenigen mit einer ähnlichen Umgebung nützlich ist.

Umgebungsdetails: (das ist was ich benutze)

Play 2.4.3 das kommt mitAktivator-1.3.7-minimalJDK8, Sie sollten dies bereits haben, da ich nicht denke, dass diese Version des Spiels mit JDK7 funktioniertMYSQL 5.7.9

appication.conf

<code>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
</code>

Hinweis:

testSchema in der URL ist Ihr Datenbankname, wenn Sie etwas wie verwendenMYSQL-Workbench Sie sehen dies in der Rubrik SCHEMAS. Ich habe mein testSchema angerufen. Andere nennen es vielleicht so etwas wie "myDatabase"Der Port sollte der MYSQL-Port sein. Nicht Ihr Anwendungsport. ich setze3306 In diesem Beispiel ist dies normalerweise die Standardeinstellung für MYSQL.

build.sbt

Fügen Sie diese Zeile unten zu Ihrer build.sbt-Datei hinzu. Das sollte nach dem gehenlibraryDependencies ++= Seq() Erklärung.

<code>libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.36"
</code>

Endlich

Führen Sie diesen Befehl in Ihrem Projektstamm aus ->activator reloadStarten Sie Ihre Anwendung neu

ivator 1.3.6.

Hier sind die Schritte. Ich habe die hier beschriebenen Schritte ausgeführthttps://www.playframework.com/documentation/2.4.x/JavaDatabase

Hier ist meinapplication.conf

<code># 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.*"]</code>

Hier istbuild.sbt

<code>libraryDependencies ++= Seq(
  javaJdbc,
  cache,
  javaWs,
  javaJpa,
  evolutions,
  "mysql" % "mysql-connector-java" % "5.1.27"
)</code>

plugins.sbt

<code>// 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")</code>

Hier ist der wichtige Schritt.

Nachdem Sie die obigen Schritte konfiguriert haben, rufen Sie die Befehlszeile auf, stoppen Sie den Aktivierer und führen Sie den Befehl ausactivator run. In meiner Situation bekam ich immer wieder den Fehlerunable to find mysql drivers. Nach dem Ausführen deractivator run, activator würde tatsächlich die MySQL-Treiber herunterladen und die Abhängigkeiten auflösen. Das ist der wichtige Schritt, der mein Problem gelöst hat.

Ändern Sie die libraryDependency in "build.sbt" auf llok.

<code>libraryDependencies ++= Seq(
  javaJdbc,
  javaEbean,
  cache,
  javaWs,
  "mysql" % "mysql-connector-java" % "5.1.27"
)
</code>

Führen Sie Ihr Projekt mit "activator run" aus

Die Wiedergabe setzt den erforderlichen JDBC-Anschluss herab.

spielen 2.3.1, Folge diesen Schritten.

1) Fügen Sie MySQL-Connector / J in die Abhängigkeit des Projekts ein (innerhalb von /project/build.sbt).

<code>libraryDependencies ++= Seq( javaJdbc, javaEbean, "mysql" % "mysql-connector-java" % "5.1.29"
</code>

2) Kommentieren Sie die Standard-ebean-Konfigurationszeile aus. Ebean.default = "models. *"

3) Konfigurieren Sie die MySQL-Datenbank korrekt mit der richtigen Zeichenkodierung

<code>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
</code>

4) Die meisten Imp. Führen Sie einneu laden Befehl in der Konsole.

 Nick19. Aug. 2014, 00:20
Ich habe es zu libraryDependencies in meiner build.sbt hinzugefügt (wodurch es lokal funktioniert) und auf dem Server, auf dem ich es installiert habesudo apt-get install mysql-client; sudo apt-get install libmysql-java stellenexport CLASSPATH=/usr/share/java/mysql-connector-java.jar und fügte es auch hinzu/etc/environment (wie beschrieben amhelp.ubuntu.com/community/JDBCAndMySQL). Es funktioniert immer noch nicht.
 working19. Aug. 2014, 00:08
Versuchen Sie, Ihren MySQL-Treiber in classpath zu setzen.
 Nick18. Aug. 2014, 23:42
Dies funktioniert alles perfekt für mich vor Ort. Aber wenn ich ein dist-Paket erstelle, lade ich das Paket auf einen Ubuntu-Server hoch und versuche, die Anwendung zu starten, die ich bekommejava.sql.SQLException: No suitable driver found for mysql://....

Das Wichtigste aus der Antwort von @biesior:

Fügen Sie MySQL Connector / J in die Abhängigkeit des Projekts ein (die darin enthalten ist)/project/Build.scala)Führen Sie nach dem Hinzufügen der Abhängigkeit den Befehl ausplay dependencies Auflösen der neu hinzugefügten MySQL Connector / J-AbhängigkeitKommentieren Sie die Standard-ebean-Konfigurationszeile ausebean.default="models.*"Konfigurieren Sie die MySQL-Datenbank korrekt mit der richtigen Zeichenkodierungdb.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

Es hat meinen Tag gerettet.

Ihre Antwort auf die Frage