设置一个应用程序,使用groovy对呼叫日志进行一些报告。我想使用mysql是后台并将数据从外部上传到数据库(即每隔午夜运行一个加载今天调用的脚本) 我已经获得了mysql和groovy(有点)工作之间的联系,它清楚地验证了数据库,即使我不能提取或存储其中的任何数据。
但是,外部日志中的一个值是持续时间,通常格式为“00:05:42”(%H:%m:%s),但是,我有一些问题如何存储它在mysql中以一种groovy很满意的方式。首先尝试日期,但这给了我一个日历日期作为其中一部分的问题。 然后我开始尝试使用grovy.time。*中的TimeDuration。但是这似乎将事物存储为一个小小的事物。那么,是否有一个适用于mysql和groovy喜欢的Time版本(尝试了许多不同的版本,虽然mysql似乎很开心,groovy似乎不知道如何处理它。
此刻的域名如下:
import groovy.time.*
import java.sql.Time
import java.sql.Timestamp
class Calls {
Time CallTime
TimeDuration Length
int Line
String SourceNr
String Direction
String DialNr
String Phone
String User
static constraints = {
}
static mapping = {
version false
}
// id generator: 'hilo',
// params: [table: 'hi_value', column: 'next_value', max_lo: 100]
//id composite: ['DateTime', 'SourceNr','DialNr']
}
答案 0 :(得分:1)
如果你找不到可以解析你描述的格式并且在MySQL中正确存储的持续时间类型,我建议在几秒钟内使用一个简单的long值,并在getter和setter中转换为/来自字符串。
(这只是一些快速代码,在使用它之前对边界情况做一些正确的测试,加上可能还有一些输入验证。)
class Calls {
long length
/** Parse a string with format hhh:mm:ss into a value in seconds. */
public void setLength(String s) {
length = s.split(':').collect(Integer.&parseInt).inject {
a, b -> a * 60 + b
}
}
/** Format a number in seconds into a hhh:mm:ss string. */
public String getLength() {
def a = [length]
for (i in [1, 2]) {
a << (long)(a[-1] / 60)
a[-2] %= 60
}
String.format("%02d:%02d:%02d", *a.reverse())
}
}