2016-03-29 15 views
0

私はScala and Playフレームワークが初めてです。私は、データテーブルから選択した列のすべてのデータを照会し、Excelファイルとして保存しようとします。列は通常(ヌル「」空の文字列に変換)、私はすべての値の型を変換するなどのInt、筋力、タイムスタンプ、など、さまざまなタイプ、Anorm:暗黙の変換[すべての値(include null)]から[String]

を持って 文字列にnullを含める選択

知らず列の実際の型です。そのため、コードはどの表にも使用できます。

Playのドキュメントによれば、以下の暗黙のコンバータを記述できますが、これはnullを処理できません。これは長い間googled、解決策を見つけることができません。誰かが暗黙のコンバータでnullを処理する方法を教えてもらえますか?予め

おかげ〜

implicit def valueToString: anorm.Column[String] = 
    anorm.Column.nonNull1[String] { (value, meta) => 
     val MetaDataItem(qualified, nullable, clazz) = meta 
     value match { 
      case s: String    => Right(s) // Provided-default case 
      case i: Int     => Right(i.toString()) // Int to String 
      case t: java.sql.Clob  => Right(t.toString()) // Blob/Text to String 
      case d: java.sql.Timestamp => Right(d.toString()) // Datatime to String 
      case _      => Left(TypeDoesNotMatch(s"Cannot convert $value: ${value.asInstanceOf[AnyRef].getClass} to String for column $qualified")) 
     } 

    } 
+0

実行時にどのようなエラーが表示されますか? – tryx

+0

エラーメッセージ:java.lang.RuntimeException:左(UnexpectedNullableFound(ColumnName(.valuea、Some(valuea)))) atorm.MayErr $$ anonfun $ get $ 1.apply(MayErr.scala:35) – WeiJ

答えて

1

Column[T]場合種類Tの列の構文解析し、カラム(単数または複数)はnullにすることができれば、その後Option[T]がなければならない可能に、documentationに示すようにジェネリックサポートのメリットはOption[T]です。

そこにはカスタムColumn[String](提供されていないものを使用してください)がありますので、Option[String]に質問してください。

import myImplicitStrColumn 
val parser = get[Option[String]]("col") 
+0

こんにちは、はい、私はこれを試しました: 'implicit def valueToString:anorm.Column [Option [String]] = anorm.Column.nonNull1 [Option [String]] {(値、メタ)=> val MetaDataItem(修飾子付き、nullable、clazz )=メタ 値一致{ ケース:オプション[文字列] => .... ケースi:オプション[Int] => ... ケースt:オプション[java.sql.Clob] => .. 。 ケースd:オプション[java.sql.Timestamp] => ... ケース_ => .. } } 'エラーを返す" Intを文字列に変換することはできません.... " – WeiJ

+0

このように、' Column [Option] [T]]を定義するのではなく、 'Column [T]' + 'サポート – cchantep

+0

私は見る...ありがとう〜私はそれを試してみる...私はAnormがnullを処理するためのより簡単な方法を提供するかもしれないと思った、これは非常に一般的です。 – WeiJ