Risposte:
Guarda questa pagina dalla documentazione di Play. Dice:
A parte il database in memoria h2, utile soprattutto in modalità di sviluppo, Play 2.0 non fornisce alcun driver di database. Di conseguenza, per distribuire in produzione sarà necessario aggiungere il driver del database come dipendenza dell'applicazione.
Ad esempio, se utilizzi MySQL5, devi aggiungere una dipendenza per il connettore:
val appDependencies = Seq(
// Add your project dependencies here,
...
"mysql" % "mysql-connector-java" % "5.1.18"
...
)
SBT scaricherà il driver per te. Dovresti anche controllare la sezione sulla gestione delle dipendenze .
Per connetterti a MySQL, dovrai anche modificare alcune impostazioni nel tuo application.conf
:
db.default.driver=com.mysql.jdbc.Driver
db.default.url="mysql://root:secret@localhost/myDatabase"
Come ha scritto Carsten, può essere recuperato dalla documentazione, tuttavia ecco un riepilogo:
assicurati di avere la dipendenza configurata in /project/Build.scala
val appDependencies = Seq(
// Add your project dependencies here,
"mysql" % "mysql-connector-java" % "5.1.18"
)
Aggiungi una configurazione corretta del DB (sostituisci la configurazione H2 predefinita) in /conf/application.conf
:
(non rimuovere la codifica dall'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
nello stesso file trova e assicurati che questa riga NON sia commentata:
ebean.default="models.*"
Questo è tutto, riavvia la tua app (o esegui in modalità sviluppatore), quindi creerà un DDL e ti chiederà di applicarlo.
localhost
potrebbe essere necessario sostituirlo con 127.0.0.1
. In termini specifici, utilizzando MariaDB (un drop senza Oracle in sostituzione di MySQL) da MacPorts ho dovuto commentare saltare il collegamento in retemy.cnf
e utilizzare l'indirizzo IP invece di localhost
avere Play connesso correttamente.
Sto usando play 2.2.0 e ho dovuto aggiungere la seguente riga a build.sbt nella cartella principale del progetto.
"mysql" % "mysql-connector-java" % "5.1.27"
E il gioco scarica automaticamente il driver. Sembra che Build.scala non sia più necessario per questo. Le modifiche a application.conf dovrebbero essere applicate come menzionato dai commentatori sopra.
libraryDependencies ++= Seq(jdbc,anorm,cache,"mysql" % "mysql-connector-java" % "5.1.27")
La maggior parte dei metodi di accesso a un database mysql che ho incontrato non spiega come stabilire una connessione e recuperare i dati dall'interno del modello. Nella mia applicazione, utilizzo sia mongoDB che un database mysql esterno. Quindi ecco come ho fatto (il lato mysql delle) cose:
Per Play 2.3.3, nel file build.sbt aggiungi la riga specifica di mysql nella libraryDependencies:
libraryDependencies ++= Seq(
"mysql" % "mysql-connector-java" % "5.1.27"
)
Nel file /conf/application.conf aggiungi questo:
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
Puoi sostituire "myotherdb" con "default" nel caso in cui desideri utilizzare il database predefinito o con qualsiasi altro nome che desideri utilizzare. Sostituisci "xxx.xxx.xxx.xxx" con l'indirizzo IP del server in cui si trova il tuo database (nel caso di un database esterno) o localhost (o 127.0.0.1) per il database locale. Sostituire "NameOfOtherDB" con il nome del database che si desidera utilizzare, "MyOtherDbUSername" con il nome utente del database e "MyOtherDbPass" con la password del database.
All'interno del tuo modello (/app/models/MyModel.scala) aggiungi questo:
val connection = DB.getConnection("myotherdb")
Crea l'istruzione, la query ed eseguila:
val statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)
val query = "SELECT * FROM myTableName"
val resultset = statement.executeQuery(query)
Quindi puoi continuare con quello che vuoi fare con i dati recuperati. Per esempio:
while (resultset.next()) {
resultset.getString("columnName")
}
Dove "columnName" è il nome della colonna / campo della tabella DB che si desidera recuperare.
Ultimo ma non meno importante, vorrei sottolineare che potresti voler chiudere la connessione chiamando close ()
Sono rimasto bloccato con la mia configurazione MySQL fino a quando non l'ho trovato.
Cose più importanti prese dalla risposta di @biesior:
/project/Build.scala
)play dependencies
per risolvere il connettore MySQL / dipendenza J appena aggiuntoebean.default="models.*"
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
Mi ha salvato la giornata.
Per giocare 2.3.1 , segui questi passaggi.
1) Aggiungi il connettore MySQL / J nella dipendenza del progetto (che si trova all'interno di /project/build.sbt)
libraryDependencies ++= Seq( javaJdbc, javaEbean, "mysql" % "mysql-connector-java" % "5.1.29"
2) Rimuovere il commento dalla riga di configurazione ebean predefinita ebean.default = "models. *"
3) Configurare correttamente il database MySQL con la corretta codifica dei caratteri
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 maggior parte degli imp. Esegui un comando di ricarica nella console.
java.sql.SQLException: No suitable driver found for mysql://...
.
sudo apt-get install mysql-client; sudo apt-get install libmysql-java
put export CLASSPATH=/usr/share/java/mysql-connector-java.jar
e l' ho anche aggiunto /etc/environment
(come descritto su help.ubuntu.com/community/JDBCAndMySQL ). Ancora non funziona.
Sono stato in grado di farlo funzionare mettendo insieme bit di informazioni da tutte le risposte precedenti. Quindi eccone un altro, che si spera sia più aggiornato o utile a chi ha un ambiente simile.
Dettagli sull'ambiente: ( questo è quello che sto usando )
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
Nota:
3306
l'esempio perché di solito è l'impostazione predefinita per MYSQL.build.sbt
Aggiungi questa riga di seguito al tuo file build.sbt. Questo dovrebbe andare dopo la libraryDependencies ++= Seq()
dichiarazione.
libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.36"
Finalmente
activator reload
Per il gioco java project utilizzando SBT
Cambia la libraryDependency in llok in questo modo in "build.sbt"
libraryDependencies ++= Seq(
javaJdbc,
javaEbean,
cache,
javaWs,
"mysql" % "mysql-connector-java" % "5.1.27"
)
Esegui il tuo progetto utilizzando "activator run"
La riproduzione interromperà il connettore jdbc richiesto.
Ho avuto lo stesso problema nell'ultimo framework di gioco 2.4.x con l'attivatore 1.3.6.
Ecco i passaggi. Ho seguito i passaggi descritti qui https://www.playframework.com/documentation/2.4.x/JavaDatabase
Ecco il mio 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.*"]
Qui è 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")
Ecco il passaggio importante.
Dopo aver configurato i passaggi precedenti, vai alla riga di comando, arresta l'attivatore ed esegui il comando
activator run
. Nella mia situazione, continuavo a ricevere l'erroreunable to find mysql drivers
. Dopo aver eseguitoactivator run
, l'attivatore scarica effettivamente i driver MySQL e risolve le dipendenze. Questo è il passaggio importante che ha risolto il mio problema.
Per me questo lavoro, aggiungi questo sotto la riga nelle tue dipendenze:
"mysql" % "mysql-connector-java" % "5.1.36"
Ecco il codice:
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()