2013-06-04 5 views
7

मैं एक MySQL सर्वर के साथ इंटरफेस करने के लिए TypeSafe की स्लिम लाइब्रेरी का लाभ उठाने का प्रयास कर रहा हूं। सभी होस्टिंगस्टार्ट/ट्यूटोरियल उदाहरण withSession{} का उपयोग करते हैं जहां ढांचा स्वचालित रूप से सत्र बनायेगा, {} के भीतर क्वेरी निष्पादित करेगा, फिर ब्लॉक के अंत में सत्र समाप्त करें।डेटाबेस सत्र को खोलना

मेरा कार्यक्रम बदमाश है, और मैं स्क्रिप्ट के निष्पादन के दौरान एक सतत कनेक्शन बनाए रखना चाहता हूं। अब तक मैंने स्पष्ट रूप से सत्र बनाने और बंद करने के लिए इस कोड को एक साथ जोड़ दिया है।

val db = Database.forURL("jdbc:mysql://localhost/sandbox", user = "root", password="***", driver = "com.mysql.jdbc.Driver") 
val s = db.createSession() 
... 
s.close() 

जहां मैं बीच में क्वेरी निष्पादित कर सकता हूं। हालांकि, जब मैं इस तरह के

के रूप में एक आदेश पर अमल करने की कोशिश (क्यू + '+ नाम + ")" "टेस्ट (नाम) मूल्यों (में डालने"')। निष्पादित

यह क्योंकि दुर्घटनाओं यह निहित सत्र नहीं मिल रहा है। मैं syntax of the execute definition in the documentation को पूरी तरह से समझ नहीं पा रहा हूं, लेकिन ऐसा लगता है कि एक स्पष्ट सत्र पास करने के लिए एक वैकल्पिक पैरामीटर हो सकता है। मैंने .execute (ओं) का उपयोग करने का प्रयास किया है, लेकिन यह एक चेतावनी थूकता है कि शुद्ध व्यय में कुछ भी नहीं करता है।

मैं क्वेरी चलाने के लिए पूर्व-मौजूदा सत्र को स्पष्ट रूप से कैसे निर्दिष्ट करूं?

संलग्न: JAB के समाधान के लिए ट्रायल कोड

class ActorMinion(name: String) extends Actor 
{ 
    Database.forURL("jdbc:mysql://localhost/sandbox", user = "root", password="****", driver = "com.mysql.jdbc.Driver") withSession 
    { 
     def receive = 
     { 
      case Execute => 
      { 
       (Q.u + "insert into TEST (name) values('"+name+"')").execute 

       sender ! DoneExecuting(name,output,err.toString) 
      } 
     } 
    } 
} 

कौन सा संकलन त्रुटि देता है

[त्रुटि] /home/ubuntu/helloworld/src/main/scala/hw.scala: 41: विस्तारित फ़ंक्शन

[त्रुटि] अज्ञात फ़ंक्शन के तर्क प्रकारों को पूरी तरह से जाना जाना चाहिए। (एसएलएस 8.5)

[त्रुटि] अपेक्षित प्रकार था:?

[त्रुटि] {

[त्रुटि]^

[त्रुटि] एक त्रुटि

उत्तर

7

मैं कर रहा था निकाले जाते हैं कि मैं क्या this answer

//imports at top of file 
//import Database.threadLocalSession <--this should be commented/removed 
import scala.slick.session.Session // <-- this should be added 
...... 
//These two lines in actor constructor 
val db = Database.forURL("jdbc:mysql://localhost/sandbox", user = "root", password="****", driver = "com.mysql.jdbc.Driver") 
implicit var session: Session = db.createSession() 
...... 
session.close() //This line in actor destructor 
2

पाया बस withSession{} में अपनी स्क्रिप्ट के प्रासंगिक भाग संलग्न है। ध्यान दें कि यदि आप थोड़ी देर के लिए सत्र खोल रहे हैं/डेटाबेस मैनिप्ल्यूशन प्रश्नों के बहुत सारे प्रदर्शन कर रहे हैं, तो आपको लेनदेन का लाभ उठाने में भी देखना चाहिए।

और यदि डेटा में संभावित बाहरी स्रोत है तो आपको वास्तव में आवेषण के लिए तैयार कथन का उपयोग करना चाहिए।

+0

इस से जरूरत मेरी implimentation के लिए काम करने के लिए प्रतीत नहीं होता। मेरे पास एक अभिनेता संदेश प्राप्त कर रहा है जिसे मैं डेटाबेस में दर्ज करना चाहता हूं। संदेशों को प्राप्त() इंटरफेस पर असीमित रूप से आ रहा है। मैंने प्राप्त() परिभाषा के आस-पास सत्र {} को लपेटने की कोशिश की, लेकिन स्कैला मुझे एक अज्ञात फ़ंक्शन के अंदर परिभाषाएं पसंद नहीं करता है। –

+0

इसके अलावा, हाँ, मैं मूलभूत क्वेरी का उपयोग करके अपने सत्र सेटअप के लिए एक कामकाजी पीओसी प्राप्त करने के बाद, लेनदेन/तैयार बयानों से निपटने का इरादा रख रहा हूं। :) –

+0

स्कैला इसके बारे में क्या पसंद नहीं करता है? माना जाता है कि मैंने संदर्भ प्रबंधकों में समेकन के साथ काम नहीं किया है, लेकिन मुझे नहीं पता कि एक अज्ञात फ़ंक्शन के अंदर एक परिभाषा नामित फ़ंक्शन के अंदर परिभाषा से अलग क्यों होगी। शायद एक और मुद्दा शामिल है? – JAB

संबंधित मुद्दे