Respostas:
Veja esta página da documentação do Play. Diz:
Exceto para o banco de dados h2 in-memory, útil principalmente no modo de desenvolvimento, o Play 2.0 não fornece nenhum driver de banco de dados. Consequentemente, para implantar na produção, você terá que adicionar seu driver de banco de dados como uma dependência do aplicativo.
Por exemplo, se você usa MySQL5, precisa adicionar uma dependência para o conector:
val appDependencies = Seq(
// Add your project dependencies here,
...
"mysql" % "mysql-connector-java" % "5.1.18"
...
)
O SBT fará o download do driver para você. Você também deve verificar a seção sobre gerenciamento de dependências .
Para se conectar ao MySQL, você também precisará alterar algumas configurações em application.conf
:
db.default.driver=com.mysql.jdbc.Driver
db.default.url="mysql://root:secret@localhost/myDatabase"
Como Carsten escreveu, ele pode ser obtido na documentação, mas aqui está um resumo:
certifique-se de ter a dependência configurada em /project/Build.scala
val appDependencies = Seq(
// Add your project dependencies here,
"mysql" % "mysql-connector-java" % "5.1.18"
)
Adicione uma configuração adequada do banco de dados (substitua a configuração H2 padrão) em /conf/application.conf
:
(não remova a codificação do 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
no mesmo arquivo, localize e certifique-se de que esta linha NÃO seja comentada:
ebean.default="models.*"
Isso é tudo, reinicie seu aplicativo (ou execute no modo dev), então ele criará um DDL e pedirá que você o aplique.
localhost
podem precisar ser substituídas por 127.0.0.1
. Em termos specifict, utilizando MariaDB (uma queda da Oracle-livre substituto para MySQL) de MacPorts Eu tinha que comentar skip-networking em my.cnf
e usar o endereço IP em vez de localhost
ter Jogar com sucesso de conexão.
Estou usando o play 2.2.0 e só tive que adicionar a seguinte linha a build.sbt na pasta raiz do projeto.
"mysql" % "mysql-connector-java" % "5.1.27"
E o play baixa automaticamente o driver. Parece que Build.scala não é mais necessário para isso. Mudanças em application.conf devem ser aplicadas como os comentaristas acima mencionaram.
libraryDependencies ++= Seq(jdbc,anorm,cache,"mysql" % "mysql-connector-java" % "5.1.27")
A maioria dos métodos de acesso a um banco de dados mysql que encontrei não explica como estabelecer uma conexão e recuperar dados de dentro do modelo. Em meu aplicativo, estou usando o mongoDB e um banco de dados externo do mysql. Então, aqui está como eu fiz (o lado mysql de) coisas:
Para Play 2.3.3, no arquivo build.sbt, adicione a linha específica do mysql em libraryDependencies:
libraryDependencies ++= Seq(
"mysql" % "mysql-connector-java" % "5.1.27"
)
No arquivo /conf/application.conf, adicione isto:
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
Você pode substituir "myotherdb" por "default" no caso de desejar usar o banco de dados padrão ou com qualquer outro nome que você deseja usar. Substitua "xxx.xxx.xxx.xxx" pelo endereço IP do servidor onde seu banco de dados está localizado (no caso de um banco de dados externo) ou localhost (ou 127.0.0.1) para banco de dados local. Substitua "NameOfOtherDB" pelo nome do banco de dados que deseja usar, "MyOtherDbUSername" pelo nome de usuário do banco de dados e "MyOtherDbPass" pela senha do banco de dados.
Dentro do seu modelo (/app/models/MyModel.scala), adicione isto:
val connection = DB.getConnection("myotherdb")
Crie a declaração, a consulta e execute-a:
val statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)
val query = "SELECT * FROM myTableName"
val resultset = statement.executeQuery(query)
Em seguida, você pode continuar com o que deseja fazer com os dados recuperados. Por exemplo:
while (resultset.next()) {
resultset.getString("columnName")
}
Onde "columnName" é o nome da coluna / campo da tabela do banco de dados que você deseja recuperar.
Por último, mas não menos importante, gostaria de observar que talvez você queira encerrar a conexão chamando close ()
Fiquei preso na configuração do MySQL até que encontrei isso.
As coisas mais importantes tiradas da resposta de @biesior:
/project/Build.scala
)play dependencies
para resolver o conector MySQL / dependência J recém-adicionadoebean.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
Isso salvou meu dia.
Para jogar 2.3.1 , siga estas etapas.
1) Adicione o conector MySQL / J na dependência do projeto (que está dentro de /project/build.sbt)
libraryDependencies ++= Seq( javaJdbc, javaEbean, "mysql" % "mysql-connector-java" % "5.1.29"
2) Remova o comentário da linha de configuração ebean padrão ebean.default = "models. *"
3) Configure o banco de dados MySQL corretamente com a codificação de caracteres adequada
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) Mais Imp. Execute um comando reload no 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 também o adicionei /etc/environment
(conforme descrito em help.ubuntu.com/community/JDBCAndMySQL ). Ainda não funciona.
Consegui fazer isso funcionar juntando pedaços de informações de todas as respostas anteriores. Portanto, aqui está outro, que é esperançosamente mais atualizado ou útil para aqueles com um ambiente semelhante.
Detalhes do ambiente: ( é isso que estou 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
o exemplo porque geralmente é o padrão para MYSQL.build.sbt
Adicione esta linha abaixo ao seu arquivo build.sbt. Isso deve ir após a libraryDependencies ++= Seq()
declaração.
libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.36"
Finalmente
activator reload
Para jogar projeto java usando SBT
Altere o libraryDependency para funcionar assim em "build.sbt"
libraryDependencies ++= Seq(
javaJdbc,
javaEbean,
cache,
javaWs,
"mysql" % "mysql-connector-java" % "5.1.27"
)
Execute seu projeto usando "ativação do ativador"
A reprodução desligará o conector jdbc necessário.
Eu tive o mesmo problema na última plataforma de jogo 2.4.x com ativador 1.3.6.
Aqui estão as etapas. Eu segui as etapas descritas aqui https://www.playframework.com/documentation/2.4.x/JavaDatabase
Aqui está o meu 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.*"]
Aqui está 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")
Aqui está o passo importante.
Após configurar as etapas acima, vá para a linha de comando, pare o ativador e execute o comando
activator run
. Na minha situação, continuava recebendo o errounable to find mysql drivers
. Depois de executar oactivator run
, o ativador realmente baixaria os drivers do MySQL e resolveria as dependências. Essa é a etapa importante que resolveu meu problema.
Para mim, este trabalho, adicione esta linha abaixo em suas dependências:
"mysql" % "mysql-connector-java" % "5.1.36"
Aqui está o código:
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()