ฉันยังใหม่กับ Play framework ฉันพยายามกำหนดค่าฐานข้อมูล MySQL เป็นแหล่งข้อมูลที่จะใช้กับ Play Ebeans
คุณช่วยอธิบายขั้นตอนที่จำเป็นในการกำหนดค่า MySQL ด้วยกรอบงาน Play 2.0 (เช่นการดาวน์โหลดไดรเวอร์การเพิ่มการอ้างอิง ฯลฯ )
ฉันยังใหม่กับ Play framework ฉันพยายามกำหนดค่าฐานข้อมูล MySQL เป็นแหล่งข้อมูลที่จะใช้กับ Play Ebeans
คุณช่วยอธิบายขั้นตอนที่จำเป็นในการกำหนดค่า MySQL ด้วยกรอบงาน Play 2.0 (เช่นการดาวน์โหลดไดรเวอร์การเพิ่มการอ้างอิง ฯลฯ )
คำตอบ:
ดูหน้านี้จากเอกสารของ Play มันบอกว่า:
นอกเหนือจากฐานข้อมูลในหน่วยความจำ h2 ส่วนใหญ่มีประโยชน์ในโหมดการพัฒนา Play 2.0 ไม่มีไดรเวอร์ฐานข้อมูลใด ๆ ดังนั้นในการปรับใช้ในการผลิตคุณจะต้องเพิ่มไดรเวอร์ฐานข้อมูลของคุณเป็นการพึ่งพาแอปพลิเคชัน
ตัวอย่างเช่นหากคุณใช้ MySQL5 คุณต้องเพิ่มการอ้างอิงสำหรับตัวเชื่อมต่อ:
val appDependencies = Seq(
// Add your project dependencies here,
...
"mysql" % "mysql-connector-java" % "5.1.18"
...
)
SBT จะดาวน์โหลดไดรเวอร์ให้คุณ นอกจากนี้คุณยังควรตรวจสอบส่วนที่เกี่ยวกับการจัดการการอ้างอิง
ในการเชื่อมต่อกับ MySQL คุณจะต้องเปลี่ยนการตั้งค่าบางอย่างในapplication.conf
:
db.default.driver=com.mysql.jdbc.Driver
db.default.url="mysql://root:secret@localhost/myDatabase"
ดังที่ Carsten เขียนไว้สามารถดึงข้อมูลได้จากเอกสารอย่างไรก็ตามนี่คือบทสรุป:
ตรวจสอบให้แน่ใจว่าคุณได้กำหนดค่าการอ้างอิงใน /project/Build.scala
val appDependencies = Seq(
// Add your project dependencies here,
"mysql" % "mysql-connector-java" % "5.1.18"
)
เพิ่มการกำหนดค่าที่เหมาะสมของ DB (แทนที่ค่าเริ่มต้น H2 config) ใน/conf/application.conf
:
(อย่าลบการเข้ารหัสออกจาก 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
ในไฟล์เดียวกันให้ค้นหาและตรวจสอบว่าไม่มีความคิดเห็นในบรรทัดนี้:
ebean.default="models.*"
เพียงเท่านี้ให้รีสตาร์ทแอปของคุณ (หรือเรียกใช้ในโหมด dev) จากนั้นจะสร้าง DDL และขอให้คุณใช้งาน
localhost
127.0.0.1
ในแง่ specifict ใช้MariaDB (ลดลงของออราเคิลฟรีแทนสำหรับ MySQL) จาก MacPorts ผมต้องแสดงความคิดเห็นออกข้ามเครือข่ายในmy.cnf
และใช้ที่อยู่ IP แทนการlocalhost
ที่จะมีการเล่นการเชื่อมต่อที่ประสบความสำเร็จ
ฉันใช้ play 2.2.0 และฉันต้องเพิ่มบรรทัดต่อไปนี้เพื่อ build.sbt ในโฟลเดอร์รูทของโปรเจ็กต์
"mysql" % "mysql-connector-java" % "5.1.27"
และเล่นโดยอัตโนมัติดาวน์โหลดไดรเวอร์ ดูเหมือนว่า Build.scala ไม่จำเป็นสำหรับสิ่งนี้อีกต่อไป การเปลี่ยนแปลง application.conf ควรใช้ตามที่ผู้แสดงความคิดเห็นด้านบนได้กล่าวถึง
libraryDependencies ++= Seq(jdbc,anorm,cache,"mysql" % "mysql-connector-java" % "5.1.27")
วิธีการเข้าถึงฐานข้อมูล mysql ส่วนใหญ่ที่ฉันพบไม่ได้อธิบายวิธีสร้างการเชื่อมต่อและดึงข้อมูลจากภายใน Model ในแอปพลิเคชันของฉันฉันใช้ทั้ง mongoDB และฐานข้อมูล mysql ภายนอก นี่คือวิธีที่ฉันทำ (ด้าน mysql):
สำหรับ Play 2.3.3 ในไฟล์ build.sbt ให้เพิ่มบรรทัดเฉพาะ mysql ใน libraryDependencies:
libraryDependencies ++= Seq(
"mysql" % "mysql-connector-java" % "5.1.27"
)
ในไฟล์ /conf/application.conf ให้เพิ่มสิ่งนี้:
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
คุณสามารถแทนที่ "myotherdb" เป็น "ค่าเริ่มต้น" ในกรณีที่คุณต้องการใช้ฐานข้อมูลเริ่มต้นหรือด้วยชื่ออื่นที่คุณต้องการใช้ แทนที่ "xxx.xxx.xxx.xxx" ด้วยที่อยู่ IP ของเซิร์ฟเวอร์ที่ฐานข้อมูลของคุณตั้งอยู่ (ในกรณีของฐานข้อมูลภายนอก) หรือ localhost (หรือ 127.0.0.1) สำหรับฐานข้อมูลภายใน แทนที่ "NameOfOtherDB" ด้วยชื่อของฐานข้อมูลที่คุณต้องการใช้ "MyOtherDbUSername" ด้วยชื่อผู้ใช้ฐานข้อมูลของคุณและ "MyOtherDbPass" ด้วยรหัสผ่านฐานข้อมูลของคุณ
ภายในโมเดลของคุณ (/app/models/MyModel.scala) ให้เพิ่มสิ่งนี้:
val connection = DB.getConnection("myotherdb")
สร้างคำสั่งแบบสอบถามและดำเนินการ:
val statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)
val query = "SELECT * FROM myTableName"
val resultset = statement.executeQuery(query)
จากนั้นคุณสามารถดำเนินการต่อกับสิ่งที่คุณต้องการทำกับข้อมูลที่ดึงมา ตัวอย่างเช่น:
while (resultset.next()) {
resultset.getString("columnName")
}
โดยที่ "columnName" คือชื่อของคอลัมน์ / ฟิลด์ตาราง DB ที่คุณต้องการดึงข้อมูล
สุดท้าย แต่ไม่ท้ายสุดฉันต้องการทราบว่าคุณอาจต้องการปิดการเชื่อมต่อโดยการโทรปิด ()
ติดอยู่กับการกำหนดค่า MySQL ของฉันจนกระทั่งฉันพบสิ่งนี้
สิ่งที่สำคัญที่สุดนำมาจากคำตอบของ @biesior:
/project/Build.scala
)play dependencies
เพื่อแก้ไขตัวเชื่อมต่อ MySQL / การพึ่งพา J ที่เพิ่มใหม่ebean.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
มันช่วยวันของฉัน
สำหรับการเล่น 2.3.1ให้ทำตามขั้นตอนต่อไปนี้
1) เพิ่มตัวเชื่อมต่อ MySQL / J ในการอ้างอิงของโปรเจ็กต์ (ซึ่งอยู่ภายใน /project/build.sbt)
libraryDependencies ++= Seq( javaJdbc, javaEbean, "mysql" % "mysql-connector-java" % "5.1.29"
2) Uncomment default ebean configuration line ebean.default = "models. *"
3) กำหนดค่าฐานข้อมูล MySQL อย่างถูกต้องด้วยการเข้ารหัสอักขระที่เหมาะสม
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) Imp ส่วนใหญ่ รันคำสั่งreloadในคอนโซล
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
และเพิ่มเข้าไปใน/etc/environment
(ตามที่อธิบายไว้ในhelp.ubuntu.com/community/JDBCAndMySQL ) มันยังใช้ไม่ได้
ฉันสามารถทำงานนี้ได้โดยการรวบรวมข้อมูลจากคำตอบก่อนหน้าทั้งหมดเข้าด้วยกัน ดังนั้นนี่คืออีกสิ่งหนึ่งที่หวังว่าจะเป็นข้อมูลล่าสุดหรือเป็นประโยชน์กับผู้ที่มีสภาพแวดล้อมคล้ายกัน
รายละเอียดสภาพแวดล้อม: ( นี่คือสิ่งที่ฉันใช้ )
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
บันทึก:
3306
ในตัวอย่างเพราะปกติแล้วจะเป็นค่าเริ่มต้นสำหรับ MYSQLbuild.sbt
เพิ่มบรรทัดด้านล่างนี้ในไฟล์ build.sbt ของคุณ สิ่งนี้ควรดำเนินไปหลังจากการlibraryDependencies ++= Seq()
ประกาศ
libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.36"
สุดท้าย
activator reload
สำหรับโปรเจ็กต์ play java โดยใช้ SBT
เปลี่ยน libraryDependency เป็น llok แบบนี้ใน "build.sbt"
libraryDependencies ++= Seq(
javaJdbc,
javaEbean,
cache,
javaWs,
"mysql" % "mysql-connector-java" % "5.1.27"
)
ดำเนินโครงการของคุณโดยใช้ "activator run"
เล่นจะลงตัวเชื่อมต่อ jdbc ที่จำเป็น
ฉันมีปัญหาเดียวกันในกรอบการเล่นล่าสุด 2.4.x พร้อมตัวกระตุ้น 1.3.6
นี่คือขั้นตอน ฉันทำตามขั้นตอนที่อธิบายไว้ที่นี่https://www.playframework.com/documentation/2.4.x/JavaDatabase
นี่คือไฟล์ 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.*"]
ที่นี่คือ 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")
นี่คือขั้นตอนที่สำคัญ
activator run
หลังจากตั้งค่าขั้นตอนข้างต้นไปที่บรรทัดคำสั่งหยุดการกระตุ้นของคุณและเรียกใช้คำสั่ง ในสถานการณ์ของฉันฉันได้รับข้อผิดพลาดunable to find mysql drivers
อยู่เรื่อย ๆ หลังจากเรียกใช้activator run
ตัวกระตุ้นจะดาวน์โหลดไดรเวอร์ MySQL และจะแก้ไขการอ้างอิง นั่นคือขั้นตอนสำคัญที่ช่วยแก้ไขปัญหาของฉัน
สำหรับฉันงานนี้เพิ่มบรรทัดด้านล่างนี้ในการอ้างอิงของคุณ:
"mysql" % "mysql-connector-java" % "5.1.36"
นี่คือรหัส:
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()