我試圖利用TypeSafe
的光滑庫與MySQL服務器進行交互。所有開始/教程示例使用withSession{}
,其中框架將自動創建會話,執行{}
中的查詢,然後在該塊的結尾處終止會話。保持數據庫會話打開
我的程序相當囉嗦,我想在整個腳本執行過程中保持一個持續連接。到目前爲止,我已將這些代碼拼湊在一起,以明確創建和關閉會話。
val db = Database.forURL("jdbc:mysql://localhost/sandbox", user = "root", password="***", driver = "com.mysql.jdbc.Driver")
val s = db.createSession()
...
s.close()
我可以在哪裏執行查詢。然而,當我嘗試執行命令,如
(曲+ 「插入TEST(名稱)VALUES( ' 」+姓名+「')」)。執行
它崩潰,因爲它找不到隱式會話。我不完全瞭解syntax of the execute definition in the documentation,但似乎可能有一個可選參數傳遞顯式會話。我試過使用.execute(s),但是吐出一個警告,說明(s)在純粹的經驗中不會做任何事情。
如何顯式指定預先存在的會話以運行查詢?
追加:試用代碼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:缺少擴展功能的參數類型
[錯誤]匿名函數的參數類型必須完全已知。 (SLS 8.5)
[錯誤]預期類型是:?
[錯誤] {
[錯誤]^
[錯誤]一個錯誤發現
這需要什麼似乎並沒有爲我的執行力度工作。我有一個演員接收我想要記錄在數據庫中的消息。這些消息是通過receive()接口異步接收的。我試着圍繞receive()定義包裝withSession {},但scala不喜歡我在匿名函數中進行定義。 –
另外,是的,我打算在下一次處理事務/預處理語句後,我可以使用基本查詢爲我的會話設置獲得工作PoC。 :) –
斯卡拉不喜歡它什麼?無可否認,我並沒有在上下文管理器中使用併發性,但我不明白爲什麼匿名函數中的定義與命名函數中的定義有任何不同。也許還有另外一個問題呢? – JAB