【发布时间】:2015-10-27 05:47:56
【问题描述】:
我有一个旧的列族,它有一个名为“value”的列,它被定义为 blob 数据类型。此列通常包含两个用下划线分隔的数字,例如“421_2”。
当我使用 python datastax 驱动程序并执行查询时,结果返回该字段解析为字符串:
In [21]: session.execute(q)
Out[21]:
[Row(column1=4776015, value='145_0'),
Row(column1=4891778, value='114_0'),
Row(column1=4891780, value='195_0'),
Row(column1=4893662, value='105_0'),
Row(column1=4893664, value='115_0'),
Row(column1=4898493, value='168_0'),
Row(column1=4945162, value='148_0'),
Row(column1=4945163, value='131_0'),
Row(column1=4945168, value='125_0'),
Row(column1=4945169, value='211_0'),
Row(column1=4998426, value='463_0')]
当我使用 java 驱动程序时,我得到一个 com.datastax.driver.core.Row 对象。例如,当我尝试通过row.getString("value") 读取值字段时,我得到了预期的InvalidTypeException: Column value is of type blob。似乎读取该字段的唯一方法是通过 row.getBytes("value") 然后我得到一个 java.nio.HeapByteBuffer 对象。
问题是,我似乎无法以简单的方式将此对象转换为字符串。谷歌搜索从 2012 年得到了两个答案,表明如下:
String string_value = new String(result.getBytes("value"), "UTF-8");
但是这样的 String 构造函数似乎已经不存在了。 所以,我的问题是:
- 如何将 HeapByteBuffer 转换为字符串?
- 为什么python驱动很容易转换blob而java没有?
旁注: 我可以调试 python 驱动程序,但目前这对于应该是微不足道的事情来说似乎太多了。 (事实上没有人问过这件事表明我在这里遗漏了一些简单的东西..)
【问题讨论】:
标签: java cassandra blob cql datastax