我正在使用MSMS数据库的sourceforge JDBC驱动程序来读取数据,然后对其进行处理。
这是数据读取的样子:
def calculateHashedMessages() {
log.info('CalculatedHashedMessages')
def hashedMessages = [:]
def digestCalculator = MessageDigest.getInstance("SHA-1")
db.eachRow("""
select top 1000 phone, text, id
from proxyTable
where dlr_description is null
and processed_at is null
and hashed is null
""") { row ->
hashedMessages[row['id']] = calculateHashForRow(row, digestCalculator)
}
hashedMessages
}
然后按以下方式处理电话和文字:
def calculateHashForRow(row, digestCalculator) {
log.info('calculateHashForRow')
log.info("PHONE: ${row['phone']} || TEXT ${row['text']}")
def phone = row['phone']
def text = row['text']
def token = "${phone}_${text}"
log.info("${token}")
digestCalculator.update(token.getBytes())
//(digestCalculator.digest()).toString()
new BigInteger(1, digestCalculator.digest()).toString(16).padLeft(40, '0')
}
但这不起作用,通过记录我发现以下内容被转发到calculateHashForRow方法:
电话:net.sourceforge.jtds.jdbc.ClobImpl@27d3bfc1
TEXT:net.sourceforge.jtds.jdbc.ClobImpl@3ed22c54
有谁可以告诉我为什么这会包含在 row ['phone'] 和 row ['text'] 而不是插入数据库中的值?< / p>
P.S。这段代码并非完全由我编写,它实际上可以在不同的机器上运行(具有相同的设置),所以我有点困惑,为什么它在这里不起作用。
答案 0 :(得分:2)
尝试
log.info("PHONE: ${row['phone'].characterStream.text} || TEXT ${row['text'].characterStream.text}")