Java tutorial
/* * Copyright (c) 2013, OpenCloudDB/MyCAT and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software;Designed and Developed mainly by many Chinese * opensource volunteers. you can redistribute it and/or modify it under the * terms of the GNU General Public License version 2 only, as published by the * Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Any questions about this component can be directed to it's project Web address * https://code.google.com/p/opencloudb/. * */ package com.tuxt.learn.dao.handler; import java.sql.CallableStatement; import java.sql.Date; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.regex.Pattern; import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.TypeHandler; public class DateHandler implements TypeHandler<Object> { public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException { if (parameter != null && !"".equals(parameter)) { if (parameter instanceof String) { String date = (String) parameter; int length = date.length(); if (length == 8) { if (isNumeric(date)) { date = date.substring(0, 4) + "-" + date.substring(4, 6) + "-" + date.substring(6, 8); } ps.setDate(i, Date.valueOf(date)); } else { date = date.replaceAll("(\\d{4}).{0,1}(\\d{2}).{0,1}(\\d{2})(.*)", "$1-$2-$3$4"); if (length == 10) { ps.setDate(i, Date.valueOf(date)); } else { ps.setTimestamp(i, Timestamp.valueOf(date)); } } } else if (parameter instanceof java.util.Date) { java.util.Date date = (java.util.Date) parameter; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateStr = sdf.format(date); if (dateStr.indexOf("00:00:00") != -1) { ps.setDate(i, new Date(((java.util.Date) parameter).getTime())); } else { ps.setTimestamp(i, new Timestamp(((java.util.Date) parameter).getTime())); } } else if (parameter instanceof Date) { ps.setDate(i, (Date) parameter); } else if (parameter instanceof Timestamp) { ps.setTimestamp(i, (Timestamp) parameter); } } else { ps.setTimestamp(i, null); } } public Object getResult(ResultSet rs, String columnName) throws SQLException { Object o = rs.getObject(columnName); if (o instanceof Date) { return (Date) o; } else if (o instanceof Timestamp) { return (Timestamp) o; } else { return o; } } private static boolean isNumeric(String str) { Pattern pattern = Pattern.compile("[0-9]*"); return pattern.matcher(str).matches(); } public Object getResult(ResultSet rs, int columnIndex) throws SQLException { Object o = rs.getObject(columnIndex); if (o instanceof Date) { return (Date) o; } else if (o instanceof Timestamp) { return (Timestamp) o; } else { return o; } } public Object getResult(CallableStatement cs, int columnIndex) throws SQLException { Object o = cs.getObject(columnIndex); if (o instanceof Date) { return (Date) o; } else if (o instanceof Timestamp) { return (Timestamp) o; } else { return o; } } }