प्ले फ्रेमवर्क 2.0 के साथ MySQL डेटाबेस का उपयोग करने के लिए आवश्यक कदम


91

मैं प्ले फ्रेमवर्क में नया हूं। मैं MySQL डेटाबेस को Play Ebeans के साथ उपयोग किए जाने वाले डेटा स्रोत के रूप में कॉन्फ़िगर करने का प्रयास कर रहा हूं।

क्या आप कुछ लोगों को प्ले 2.0 फ्रेमवर्क के साथ MySQL को कॉन्फ़िगर करने के लिए आवश्यक चरणों की व्याख्या कर सकते हैं (जैसे, ड्राइवरों को डाउनलोड करना, निर्भरता जोड़ना आदि)।

जवाबों:


102

को देखो यह पेज प्ले के दस्तावेज़ से। इसे कहते हैं:

H2 इन-मेमोरी डेटाबेस के अलावा, ज्यादातर विकास मोड में उपयोगी है, प्ले 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"

धन्यवाद। एक बार ऐसा हो जाने के बाद, मुझे application.conf फ़ाइल में कॉन्फ़िगरेशन में क्या बदलाव करने चाहिए? (db.default.driver, db.default.url, इत्यादि)
वीरा

@ करंट, बिना उद्धरण के यूआरएल देना विफल हो जाएगा
biesior

3
प्ले फ्रेमवर्क 2.1.1 यहाँ। build.sbt को अपडेट करने के बाद, आपको प्ले टर्मिनल में कमांड 'अपडेट' देना चाहिए
किंजल दीक्षित

9
आजकल, इसे प्रोजेक्ट के मूल-स्तर पर build.sbt में जोड़ा जाना चाहिए, जैसे: LibraryD dependencies ++ = Seq (javaJdbc, javaEbean, "mysql"% "myqql-कनेक्टर-जावा"% "5.1.28",) कैश)
एड्रियन स्कॉट

जब आपको यह काम करने लगे तो आपको डॉक्स के थ्रेड पूल सेक्शन को भी पढ़ना चाहिए और अपने कॉन्डोम को तदनुसार अपडेट करना चाहिए क्योंकि jdbc एक ब्लॉकिंग एपीआई है। playframework.com/documentation/2.2.x/ThreadPools
johanandren

94

जैसा कि कार्स्टन ने लिखा है कि इसे प्रलेखन से प्राप्त किया जा सकता है, हालांकि यहां एक सारांश है:

सुनिश्चित करें कि आपके पास निर्भरता कॉन्फ़िगर है /project/Build.scala

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

DB का एक उचित विन्यास जोड़ें (डिफ़ॉल्ट H2 विन्यास बदलें) /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.*"

यह सब है, अपने ऐप को पुनरारंभ करें (या देव मोड में चलाएं), फिर यह एक डीडीएल बनाएगा और आपको इसे लागू करने के लिए कहेगा।


क्या आप कृपया यहाँ भी प्रलेखन अपडेट कर सकते हैं github.com/playframework/playframework/blob/2.2.x/documentation/… ताकि सभी को लाभ हो सके? धन्यवाद!
लवीक्स

अन्य बातों पर विचार करना यह सुनिश्चित करने के लिए है कि MySQL केवल सॉकेट (मैक / लिनक्स) तक ही सीमित नहीं है और इसके localhostसाथ बदलने की आवश्यकता हो सकती है 127.0.0.1। विशिष्ट शब्दों में, MacPorts से MariaDB (MySQL के लिए ओरेकल-फ्री ड्रॉप में) का उपयोग करते हुए मुझे स्किप-नेटवर्किंग में टिप्पणी करनी थी my.cnfऔर localhostप्ले सफलतापूर्वक कनेक्ट होने के बजाय IP पते का उपयोग करना था ।
सेरॉन

आपने db url की शुरुआत में jdbc को क्यों जोड़ा?
बेनमैर्गियो

@BenMorganIO कारण हमें JDBC ड्राइवर का उपयोग करने की आवश्यकता है, इस तरह के वाक्यविन्यास, और कुछ नहीं
21

मैं उलझन में हूं। URL में "jdbc: mysql:" का उद्देश्य क्या है? "Jdbc: mysql" डेटाबेस का नाम है?
माइकल Lafayette

10

मैं 2.2.0 प्ले का उपयोग कर रहा हूं और मुझे प्रोजेक्ट के रूट फ़ोल्डर में build.sbt के लिए सिर्फ निम्न पंक्ति को जोड़ना था।

  "mysql" % "mysql-connector-java" % "5.1.27"

और स्वचालित रूप से ड्राइवर को डाउनलोड करें। ऐसा लगता है कि Build.scala को अब इसके लिए ज़रूरत नहीं है। उपर्युक्त टीकाकारों ने उल्लेख किया है कि आवेदन में परिवर्तन किया जाना चाहिए।


इसने मुझे बचा लिया। प्ले 2.10.3 का उपयोग करना और यह इसे करने का सही तरीका था।
जैक स्लिंगरलैंड

3
धन्यवाद!!! उन लोगों के लिए जिन्हें मेरे जैसे विस्तृत निर्देशों की आवश्यकता है, आप मूल रूप से build.sbt पर जाएं और उस लाइन को जोड़ देंlibraryDependencies ++= Seq(jdbc,anorm,cache,"mysql" % "mysql-connector-java" % "5.1.27")
Dao Lam

1
मेरे जैसे लोगों के लिए, ./activator को रोकना न भूलें, और फिर इसे फिर से चलाएं :)
दामिर ओलेजर

8

एक mysql डेटाबेस तक पहुँचने के तरीकों में से अधिकांश जो मैं आया हूं, यह नहीं समझाता कि कैसे कनेक्शन स्थापित करना है और मॉडल के भीतर से डेटा पुनर्प्राप्त करना है। अपने आवेदन में, मैं mongoDB और एक बाहरी mysql डेटाबेस दोनों का उपयोग कर रहा हूं। तो यहाँ है कि मैंने कैसे (mysql पक्ष की) बातें की:

  1. Play 2.3.3 के लिए, build.sbt फ़ाइल में लाइब्रेरीडिपेंडेंसी में mysql विशिष्ट लाइन जोड़ें:

    libraryDependencies ++= Seq(
        "mysql" % "mysql-connector-java" % "5.1.27"
    )
  2. /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

    यदि आप डिफ़ॉल्ट डेटाबेस का उपयोग करना चाहते हैं या किसी अन्य नाम के साथ जिसे आप उपयोग करना चाहते हैं, तो आप "डिफ़ॉल्ट" द्वारा "माइथर्डब" को बदल सकते हैं। सर्वर के आईपी पते के साथ "xxx.xxx.xxx.xxx" बदलें जहां आपका डेटाबेस स्थित है (बाहरी डेटाबेस के मामले में) या स्थानीय डेटाबेस के लिए लोकलहोस्ट (या 127.0.0.1)। "NameOfOtherDB" को उस डेटाबेस के नाम से बदलें, जिसे आप उपयोग करना चाहते हैं, "MyOtherDbUSername" अपने डेटाबेस उपयोगकर्ता नाम और "MyOtherDbPass" अपने डेटाबेस पासवर्ड के साथ।

  3. अपने मॉडल (/app/models/MyModel.scala) के अंदर इसे जोड़ें:

    val connection = DB.getConnection("myotherdb")
  4. कथन बनाएँ, क्वेरी करें और उस पर अमल करें:

    val statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)
    val query = "SELECT * FROM myTableName"
    val resultset = statement.executeQuery(query)
  5. फिर आप पुनर्प्राप्त डेटा के साथ जो कुछ भी करना चाहते हैं उसे जारी रख सकते हैं। उदाहरण के लिए:

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

    जहाँ "columnName" DB तालिका कॉलम / फ़ील्ड का नाम है जिसे आप पुनः प्राप्त करना चाहते हैं।

अंतिम लेकिन कम से कम, मैं यह नोट करना चाहूंगा कि आप निकट कॉल करके कनेक्शन बंद करना चाहते हैं ()


1
आपका उदाहरण बहुत उपयोगी है। Play Java के लिए यह कैसा लगेगा?
लोमस

6

मेरे MySQL विन्यास के साथ अटक गया जब तक मुझे यह नहीं मिला।

@ महत्वपूर्ण उत्तर से ली गई सबसे महत्वपूर्ण बातें:

  • प्रोजेक्ट की निर्भरता में MySQL कनेक्टर / J जोड़ें (जो कि अंदर है /project/Build.scala )
  • निर्भरता जोड़ने के बाद, भागो play dependencies नए जोड़े गए MySQL कनेक्टर / J निर्भरता को हल करने के लिए
  • Uncomment डिफ़ॉल्ट ईबे कॉन्फ़िगरेशन लाइन ebean.default="models.*"
  • उचित वर्ण एन्कोडिंग के साथ MySQL डेटाबेस को सही ढंग से कॉन्फ़िगर करें 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

इसने मेरा दिन बचाया।


4

2.3.1 खेलने के लिए , इन चरणों का पालन करें।

1) प्रोजेक्ट की निर्भरता में MySQL कनेक्टर / J जोड़ें (जो कि /project/build.sbt के अंदर है)

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

2) Uncomment default ebean कॉन्फ़िगरेशन लाइन ebean.default = "मॉडल। *"

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) सबसे छोटा सा भूत। कंसोल में एक रीलोड कमांड चलाएँ ।


यह मेरे लिए स्थानीय स्तर पर पूरी तरह से ठीक है। लेकिन जब मैं एक डिस्ट पैकेज बनाता हूं, तो पैकेज को उबंटू सर्वर पर अपलोड कर देता हूं और जो एप्लिकेशन मुझे मिलता है उसे शुरू करने की कोशिश करता है java.sql.SQLException: No suitable driver found for mysql://...
निक

अपने mysql ड्राइवर को classpath में डालने का प्रयास करें।
काम कर रहा है

मैंने इसे अपने build.sbt (जो इसे स्थानीय स्तर पर काम करता है) में LibraryD निर्भरता में जोड़ दिया है और सर्वर पर मैंने इसे sudo apt-get install mysql-client; sudo apt-get install libmysql-javaपुट के साथ स्थापित किया है export CLASSPATH=/usr/share/java/mysql-connector-java.jarऔर इसे भी जोड़ दिया है /etc/environment(जैसा कि help.ubuntu.com/community/JDBCAndMySQL पर वर्णित है )। यह अभी भी काम नहीं करता है।
निक

4

प्ले 2.4.3 और MYSQL 5.7.9

मैं पिछले सभी उत्तरों से जानकारी के बिट्स को एक साथ जोड़कर इस काम को प्राप्त करने में सक्षम था। तो यहां एक और है, जो समान पर्यावरण वाले लोगों के लिए उम्मीद से अधिक या उपयोगी है।

पर्यावरण विवरण: ( यह वही है जो मैं उपयोग कर रहा हूं )

  • प्ले 2.4.3 यह एक्टिवेटर-1.3.7-न्यूनतम के साथ आता है
  • JDK8, आपके पास पहले से ही यह होना चाहिए क्योंकि मुझे नहीं लगता कि यह संस्करण 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

ध्यान दें:

  • URL में testSchema आपका डेटाबेस नाम है, यदि आप MYSQL कार्यक्षेत्र जैसी किसी चीज़ का उपयोग कर रहे हैं, तो आप इसे SCHEMAS अनुभाग के अंतर्गत सूचीबद्ध देखेंगे। मैंने खान को टेस्टस्मेमा कहा। अन्य इसे "myDatabase" जैसा कुछ कह सकते हैं
  • पोर्ट MYSQL पोर्ट होना चाहिए। आपका एप्लिकेशन पोर्ट नहीं है। मैंने 3306उदाहरण में रखा क्योंकि यह आमतौर पर MYSQL के लिए डिफ़ॉल्ट है।

build.sbt

अपनी बिल्ड.sbt फ़ाइल के नीचे इस पंक्ति को जोड़ें। यह libraryDependencies ++= Seq()घोषणा के बाद जाना चाहिए ।

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

आखिरकार

  • अपने प्रोजेक्ट रूट -> से इस कमांड को रन करें activator reload
  • अपने appplication को पुनः आरंभ करें

1

खेलने के लिए जावा परियोजना SBT का उपयोग कर

"Build.sbt" में इस तरह से पुस्तकालय करने के लिए पुस्तकालय निर्भरता बदलें

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

"एक्टिवेटर रन" का उपयोग करके अपना प्रोजेक्ट चलाएं

Play आवश्यक jdbc कनेक्टर को नीचे कर देगा।


1

मेरे पास नवीनतम प्ले फ्रेमवर्क 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 driversactivator runएक्टिवेटर को चलाने के बाद , वास्तव में MySQL ड्राइवर डाउनलोड करेगा और निर्भरता को हल करेगा। यह महत्वपूर्ण कदम है जिसने मेरे मुद्दे को हल कर दिया है।


1

मेरे लिए इस काम के लिए, अपनी निर्भरता में यह नीचे की पंक्ति जोड़ें:

"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()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.