0

次のテーブル定義があります

create table samples (
   channel text,
   eventType text,
   data json NOT NULL
);

dataまた、列をclob, text, java_object,として定義しようとしましvarcharother。次の API を使用して、h2 にデータを挿入しています。

def insert(sample: Sample): Unit = DB localTx { implicit session =>
    val propertiesJson = new PGobject()
    propertiesJson.setType("json")
    propertiesJson.setValue(sample.properties.toJson.toString)
    sql"""
         insert into samples
         (channel,eventType,data) values (${sample.channel}, ${sample.eventType},$propertiesJson )
    """.update().apply()

}

これはデータを取得するためのものです

  def find(channel: String): List[Sample] = DB readOnly { implicit session =>
    sql"""
     select * from samples where channel = $channel
     """.map(rs => {

     Sample(
       channel = rs.string("channel"),
       properties = rs.string("data").parseJson.convertTo[Map[String, String]],
       eventType = rs.string("eventType")
     )
    }
    ).list().apply()
   }

sprayおよびscalikejdbcドライバーを使用して暗黙的な変換を使用しています。

列のデータ型に応じて、さまざまなエラーが発生しdataます。

  • 、、および: h2にデータを挿入できますが、取得しようとすると取得されCLOBますVARCHARTEXTJAVA_OBJECT

    spray.json.JsonParser$ParsingException: Unexpected character 'a' at input index 0 (line 1, position 1), expected JSON Value: aced00057372001c6f72672e706f737467726573716c2e7574696c2e50476f626a656374f903de2682bdcb3b0200024c0004747970657400124c6a6176612f6c616e672f537472696e673b4c000576616c756571007e000178707400046a736f6e74001f7b2270726f7041223a2276616c41222c2270726f7042223a2276616c42227d
    
  • のためJSONに。h2にデータを挿入することさえできません。私は得ています

    Caused by: org.h2.jdbc.JdbcSQLDataException: Data conversion error converting "OTHER to JSON" [22018-200]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:457)
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:429)
    ... 114 more
    

使用するときに、ここで提案されたJSONこのディレクティブも試しましたformat json

json リテラル文法も参照してください。byte[] にマップされます。PreparedStatement で java.lang.String を使用して JSON 値を設定するには、FORMAT JSON データ形式 (INSERT INTO TEST(ID, DATA) VALUES (?, ? FORMAT JSON)) を使用します。データ形式がない場合、VARCHAR 値は JSON 文字列値に変換されます。

しかし、エラーはまだ同じでした。

アイデアはありますか?h2 データベースから JSON データを正常に挿入および取得するにはどうすればよいですか? 私のアプローチに何か問題がありますか?

4

1 に答える 1