日期类型(Date datatype)
Elasticsearch7 日期表达成类型:
- 日期格式化的字符串,比如: “2015-01-01” 或者 “2015/01/01 12:10:30”;
- 毫秒级别的 long 类型
- 秒级别的 integer 类型
MySQL8 Timestamp与String 日期格式类型转换
// 2.1 String ->Timestamp
// 使用Timestamp的valueOf()方法
@org.junit.Test
public void testStringToTimestamp() {
// 注:String的类型必须形如: yyyy-mm-dd hh:mm:ss[.f...] 这样的格式,中括号表示可选,否则报错!!!
// 如果String为其他格式,可考虑重新解析下字符串,再重组~~
String tsStr = "2011-05-09 11:49:45";
Timestamp ts = Timestamp.valueOf(tsStr); // 2011-05-09 11:49:45.0
System.out.println(ts);
}
// 2.2 Timestamp -> String
@org.junit.Test
public void testTimestampToString() {
Timestamp ts = new Timestamp(System.currentTimeMillis());
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//方法一:优势在于可以灵活的设置字符串的形式。
String tsStr = sdf.format(ts);
System.out.println(tsStr); // 2017-01-15 21:17:04
//方法二
tsStr = ts.toString();
System.out.println(tsStr); // 2017-01-15 21:17:04.7
}
ElasticSearch7 实际开发中应用案例:
1、判断数据库取值对象类型是否为:java.sql.Timestamp
2、条件一成立:将java.sql.Timestamp 转换为String 日期格式,进行elasticsearch 7 数据填充
public void batchInsert(String sql, Connection conn, Integer pageNo, Integer pageSize, BulkProcessor bulkProcessor){
ResultSet rs = null;
PreparedStatement ps = null;
try{
ps = conn.prepareStatement(String.format(sql, pageNo, pageSize), ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
ps.setFetchSize(Integer.MIN_VALUE);
rs = ps.executeQuery();
ResultSetMetaData colData = rs.getMetaData();
ArrayList<HashMap<String, Object>> dataList = new ArrayList<HashMap<String, Object>>();
HashMap<String, Object> map = null;
String c = null;
Object v = null;
while (rs.next()) {
map = new HashMap<String, Object>(100);
for (int i = 1; i <= colData.getColumnCount(); i++) {
//c = colData.getColumnName(i);
c = colData.getColumnLabel(i);
v = rs.getObject(c);
if(v instanceof java.sql.Timestamp){
// 处理java.sql.Timestamp 与es 日期个数转换
if(v != null){
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String str = dateFormat.format(v);
map.put(c, str);
}
} else {
map.put(c, v);
}
}
dataList.add(map);
}
for (HashMap<String, Object> hashMap2 : dataList) {
bulkProcessor.add(new IndexRequest("fileinfo").source(hashMap2));
}
logger.info("-------------------------- Finally insert number total");
// 将数据刷新到es, 注意这一步执行后并不会立即生效,取决于bulkProcessor设置的刷新时间
bulkProcessor.flush();
}catch(Exception e){
e.printStackTrace();
logger.error(e.getMessage());
}finally {
try {
rs.close();
ps.close();
} catch (Exception e) {
e.printStackTrace();
logger.error(e.getMessage());
}
}
}