2017-10-20 80 views
1

我有一個SQL查詢返回兩個行和列的值。我想獲取這些數據並檢查它是否爲空。我怎樣才能做到這一點? 我是一個新鮮的男人scala與playframework可以任何人請幫助我在這裏。 我已經使用模型類來存儲響應和以json格式顯示,但我想知道如何檢查數據的條件。斯卡拉。播放:獲取數據和測試結果

val query= s""" select * from table""" 

override def map2Object(implicit map: Map[String, Any]): HierarchyEntryBillingRoleCheck = { 
    HierarchyEntryBillingRoleCheck(str("roleName"), oint("PersonID")) 
} 

現在我想知道如何檢查條件是否返回空數據或真正的數據廣告我想執行下一個SQL查詢。

所以我有嘗試了一些方法,使我得到錯誤的類型轉換:

override val singleQuery = s"""select * from Sitable""" 
override val allQuery= s"""select * from Sitable1""" 
override def map2Object(implicit map: Map[String, Any]): HierarchyEntryBillingRoleCheck = { 
    HierarchyEntryBillingRoleCheck(str("roleName"), oint("PersonID")) 
} 

def map2ObjectBilling(implicit map: Map[String, Any]): HierarchyEntryBilling = { 
    HierarchyEntryBilling(str("Name"), str("Provider"), oint("Year"), 
    ostr("Month"), ostr("Status"), ostr("ProviderType")) 
} 

def getAll(implicit loginName: String): Future[Seq[HierarchyEntryBillingRoleCheck]] = { 
    doQueryIgnoreRowErrors(allQuery, "loginName" -> loginName) 

    result.map { 
    if (map2Object.roleName !="" && map2Object.PersonID.isEmpty) { 
     "error" 
    } else { 
     getOnetask() 
    } //GEtting error with unit type cannot resolve future[seq[]] 
    } 

    def getOnetask(): Future[Seq[HierarchyEntryBilling]] = { 
    doQueryIgnoreRowErrors(singleQuery) 
    } //Getting error with type unit does not confirm Future[Seq[]] 

.// doQueryignore錯誤簽名=>

protected def doQueryIgnoreRowErrors(query: String, args: NamedParameter*) 
    = { 

logger.debug(s"SQL: $query, args: $args") 

TimedFuture(actualityTimeout) { 
    queryHandler.doQuery(query, args: _*) map { list => 
    // ignore mapping errors of specific rows 
    list.flatten 
    } 
    } flatMap { 
    case scala.util.Success(s) => Future.successful(s) 
    case Failure(ex) if ex.isInstanceOf[SQLException] && 
    ex.getMessage == "The executeQuery method must return a result set." => 
    Future.successful(Nil) 
    case Failure(fail)   => 
    Future.failed(fail) 
+0

嘗試做一些關於play/slick示例的研究,例如:https://github.com/playframework/play-slick/tree/master/samples/basic希望這有助於..還有一些選項獲取提取數據與玩,我會假設你使用光滑 – Pavel

+0

其絕對不是我:)但我懷疑這是非常基本的問題的原因,但有時人們downvote沒有理由。你能從表中讀取數據嗎? – Pavel

+0

@Pavel,對不起,我真正的意思是你,我一直在問,還有從表中讀取數據?是的,我把它映射到一個對象,我能夠分別顯示兩個表中的數據,但仍然無法檢查滿足的條件,我很可能在輸入類型時出錯! –

回答

1

請你檢查簽名的doQueryIgnoreRowErrors方法 我會懷疑它應該是這樣的:

def doQueryIgnoreRowErrors(sql: String, name: String): Future[Seq[HierarchyEntryBillingRoleCheck]] = { 
    // next lines instead of calling data sources 
    Future[Seq[HierarchyEntryBillingRoleCheck]] { 
     List(HierarchyEntryBillingRoleCheck(1, "Data")) 
    } 
    } 

我會假設你得到的結果是這樣的:

def getAll(implicit loginName: String): Future[Seq[HierarchyEntryBillingRoleCheck]] = { 

val result = doQueryIgnoreRowErrors(allQuery, "loginName") 
.. 
} 

讓我知道你是否還在爲此而苦苦掙扎。

+0

我已經給了我完整的代碼,我嘗試了,我需要幫助,所以你可以看看這個「https:// stackoverflow.com/questions/46881981/i-need-help-in-fetching-the-data-from-sql-and-test-the-result-using-conditions-a「,並試圖幫助我在這部分是我需要調用方法並執行第二個查詢 –

+0

getOnetask將始終引發錯誤,您必須從doQueryIgnoreRowErrors返回Future。所以它要麼你需要改變getOnetask使用queryHandler或重寫doQueryIgnoreRowErrors – Pavel

+0

我已經刪除了getonetask其實我dint在路由中提到該方法名稱,所以我刪除它。所以我給我完整的代碼嘗試在「https://stackoverflow.com/questions/46881981/i-need-help-in-fetching-the-data-from-sql-and-test-the-result-using-條件 - 一個「,你可以在這方面引導我。 –