2017-10-20 7 views
1

私は2つの行と列の値を返すSQLクエリがあります。私はそのデータを取得し、空であるかどうかをチェックしたい。どうやってやるの? 私はplayframeworkとスケーラの新鮮な男のいずれかがここで私を助けてくれることができます。 モデルクラスを使用してレスポンスを格納し、json形式で表示しましたが、データの条件をチェックする方法を知りたいと思います。Scala。再生:データとテスト結果を取得

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

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

ここで、SQLが次の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

次のような演奏/美しい例についての調査を少し試してみてください。https://github.com/playframework/play-slick/tree/master/samples/basic希望があれば..あなたにもいくつかのオプションがあります私はあなたがスリックを使用していると思うでしょう – Pavel

+0

それは間違いなく私:) :)しかし、私は非常に基本的な質問ですが、理由はないdownvoteときどき理由が疑うでしょう。テーブルからデータを読み込むことはできますか? – Pavel

+0

@Pavel、申し訳ありませんが、実際には私はあなたを意味します、私は一般的に尋ねていました。はい、私はオブジェクトにマップし、私は別々に2つのテーブルからデータを表示することができますが、私は満足するために条件を確認することはできません、私はおそらく型キャスティングでエラーが発生している! –

答えて

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

私は試したコードを書いています。私がその部分で私を助けようとしていた "とstackoverflow.com/questions/46881981/i-need-help-in-fetch-the-data-from-sql-and-test-the-result-using-conditions-a"私はメソッドを呼び出して2番目のクエリを実行する必要があります –

+0

getOnetaskは常にエラーをスローするので、doQueryIgnoreRowErrorsからFutureを返す必要があります。そのため、getOnetaskを変更してqueryHandlerを使用するか、doQueryIgnoreRowErrorsを書き直す必要があります。 – Pavel

+0

getonetaskを実際に削除しました。だから、私は私の完全なコードを "https://stackoverflow.com/questions/46881981/i-need-help-in-fetchching-the-data-from-sql-and-test-the-result-using-条件-a "、pleseは私をそれの中で導くことができますか? –

関連する問題