如何使用ScalaQuery插入BLOB字段?
我使用了 ScalaQuery 和 Scala。
如果我有一个 Array[Byte] 对象,如何将其插入表中?
object TestTable extends BasicTable[Test]("test") {
def id = column[Long]("mid", O.NotNull)
def extInfo = column[Blob]("mbody", O.Nullable)
def * = id ~ extInfo <> (Test, Test.unapply _)
}
case class Test(id: Long, extInfo: Blob)
我可以定义使用的方法def extInfo = column[Array[Byte]]("mbody", O.Nullable)
,如何对BLOB类型字段进行操作(UPDATE、INSERT、SELECT)?
顺便说一句:没有 ScalaQuery 标签
I used ScalaQuery and Scala.
If I have an Array[Byte] object, how do I insert it into the table?
object TestTable extends BasicTable[Test]("test") {
def id = column[Long]("mid", O.NotNull)
def extInfo = column[Blob]("mbody", O.Nullable)
def * = id ~ extInfo <> (Test, Test.unapply _)
}
case class Test(id: Long, extInfo: Blob)
Can I define the method used def extInfo = column[Array[Byte]]("mbody", O.Nullable)
, how to operate(UPDATE, INSERT, SELECT) with the BLOB type field?
BTW: no ScalaQuery tag
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
由于 BLOB 字段可为空,因此我建议将其 Scala 类型更改为 Option[Blob],用于以下定义:
如果您愿意,可以使用原始的、可为空的 Blob 值,但需要在列上使用 orElse(null)实际上从中获取 null 值(而不是抛出异常):
现在进行实际的 BLOB 处理。读取很简单:你只需在结果中得到一个由 JDBC 驱动程序实现的 Blob 对象,例如:
如果你想插入或更新数据,你需要创建自己的 BLOB。 JDBC 的 RowSet 功能提供了独立 Blob 对象的合适实现:
编辑:这是 Postgres 的 TypeMapper[Array[Byte]](ScalaQuery 尚不支持其 BLOB):
Since the BLOB field is nullable, I suggest changing its Scala type to Option[Blob], for the following definition:
You can use a raw, nullable Blob value if you prefer, but then you need to use orElse(null) on the column to actually get a null value out of it (instead of throwing an Exception):
Now for the actual BLOB handling. Reading is straight-forward: You just get a Blob object in the result which is implemented by the JDBC driver, e.g.:
If you want to insert or update data, you need to create your own BLOBs. A suitable implementation for a stand-alone Blob object is provided by JDBC's RowSet feature:
Edit: And here's a TypeMapper[Array[Byte]] for Postgres (whose BLOBs are not yet supported by ScalaQuery):
我刚刚发布了 Scala 和 SQ 的更新代码,也许它会为某人节省一些时间:
然后使用,例如:
I just post an updated code for Scala and SQ, maybe it will save some time for somebody:
and then usage, for example: