H2数据库自定义函数方式
2014-12-26 13:47
429 查看
关于H2的其他信息这里就不过多的介绍了,详细参考:点击打开链接
通过源代码方式创建H2数据库的自定义函数,首先通过JDBC的方式连接数据库,通过JDBC执行SQL语句方式创建自定义函数,详情直接参考下面的类源码;
创建语句格式:
调用类的的方法:
CALL 方法名(参数1,参数2)
由于H2由Java编写,用源码创建自定义函数时可进行debug调试。
通过源代码方式创建H2数据库的自定义函数,首先通过JDBC的方式连接数据库,通过JDBC执行SQL语句方式创建自定义函数,详情直接参考下面的类源码;
创建语句格式:
CREATE ALIAS 方法名 FOR \"com.s.gis.middleware.db.h2.H2Function.getOffset\";//类的包名 + 类名
调用类的的方法:
CALL 方法名(参数1,参数2)
由于H2由Java编写,用源码创建自定义函数时可进行debug调试。
public class H2Function { public static void main(String[] args) throws Exception { // DatabaseConnection.getInstance().execSQLQuery("CALL GETOFFSET(1,2,0)"); // DatabaseConnection.getInstance().execSQL("CREATE ALIAS GETOFFSET FOR \"com.s.gis.middleware.db.h2.H2Function.getOffset\";"); // ResultSet rs = // DatabaseConnection.getInstance().execSQLQuery("SELECT * FROM CORRECT_AREA_BAIDU"); // while(rs.next()){ // System.out.println(rs.getInt("lat")); // } // DatabaseConnection.getInstance().execSQL("CREATE TABLE correct_area_baidu(lng INT NOT NULL, lat INT NOT NULL, lng_offset INT NOT NULL, lat_offset INT NOT NULL,create_time datetime NOT NULL,CONSTRAINT correct_area_baidu_PK PRIMARY KEY(lng,lat));"); // DatabaseConnection.getInstance().execSQL("INSERT INTO correct_area_baidu VALUES(1,2,1,1,'2014-12-25 15:20:22');"); //DatabaseConnection.getInstance().execSQL("CREATE ALIAS UPDATEOFFSET FOR \"com.s.gis.middleware.db.h2.H2Function.updateOffset\";"); // DatabaseConnection.getInstance().execSQLQuery("CALL UPDATEOFFSET(2,3,2,2,0)"); } /** * * @param lng * @param lat * @param type */ public static ResultSet getOffset(int lng, int lat, int type) { StringBuffer sql = new StringBuffer( "SELECT lng_offset,lat_offset FROM "); if (type == GisConstants.GIS_TYPE_BAIDU) sql.append("correct_area_baidu"); else if (type == GisConstants.GIS_TYPE_GOOGLE) sql.append("correct_area_google"); sql.append(" WHERE lng=" + lng); sql.append(" AND lat=" + lat); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); String date = format.format(getDateBefore(new Date(), 180)); sql.append(" AND create_time>'" + date + "'"); ResultSet rs = DatabaseConnection.getInstance().execSQLQuery( sql.toString()); return rs; } /** * * * @param lng * @param lat * @param offLng * @param offLat * @param type */ public static void updateOffset(int lng, int lat, int offLng, int offLat, int type) { String tableName = ""; if (type == GisConstants.GIS_TYPE_BAIDU) tableName = "correct_area_baidu"; else if (type == GisConstants.GIS_TYPE_GOOGLE) tableName = "correct_area_google"; StringBuffer sql = new StringBuffer("SELECT * FROM "); sql.append(tableName); sql.append(" WHERE lng=" + lng); sql.append(" AND lat=" + lat); ResultSet rs = DatabaseConnection.getInstance().execSQLQuery( sql.toString()); try { boolean isExist = false; while (rs.next()) { isExist = true; break; } if (isExist) { StringBuffer updateSQL = new StringBuffer("UPDATE "); updateSQL.append(tableName); updateSQL.append(" SET "); updateSQL.append(" lng_offset=" + offLng); updateSQL.append(",lat_offset=" + offLat); SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss"); String date = format.format(new Date()); updateSQL.append(",create_time='" + date + "'"); updateSQL.append(" WHERE lat=" + lat); updateSQL.append(" AND lng=" + lng); DatabaseConnection.getInstance().execSQL( updateSQL.toString()); }else{ StringBuffer insertSQL = new StringBuffer("INSERT INTO "); insertSQL.append(tableName); insertSQL.append(" (lng,lat,lng_offset,lat_offset,create_time) VALUES ("); insertSQL.append(lng + ","); insertSQL.append(lat + ","); insertSQL.append(offLng + ","); insertSQL.append(offLat + ","); SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss"); String date = format.format(new Date()); insertSQL.append("'"+ date + "'"); insertSQL.append(");"); DatabaseConnection.getInstance().execSQL( insertSQL.toString()); } } catch (SQLException e) { e.printStackTrace(); } } /** * 得到几天前的时间 * * @param d * @param day * @return */ public static Date getDateBefore(Date d, int day) { Calendar now = Calendar.getInstance(); now.setTime(d); now.set(Calendar.DATE, now.get(Calendar.DATE) - day); return now.getTime(); } /** * 得到几天后的时间 * * @param d * @param day * @return */ public static Date getDateAfter(Date d, int day) { Calendar now = Calendar.getInstance(); now.setTime(d); now.set(Calendar.DATE, now.get(Calendar.DATE) + day); return now.getTime(); } }
相关文章推荐
- [H2]嵌入式数据库配置及自定义函数扩展
- H2数据库创建自定义函数
- 取汉字拼音首字母的存储过程--很值得收藏的数据库自定义函数
- 自己写的一个数据库自定义函数实例
- VC++6.0环境下,使用传引用方式调用自定义的swap函数来达到两数交换的目的
- 用游标遍历某台服务器下所有的数据库中 汲及到某个关键词的 所有存储过程及自定义函数
- 自己写的一个数据库自定义函数实例
- 数据库快照,自定义函数与计算列
- kettle中使用javascript步骤和fireToDB函数实现自定义数据库查询
- 根据输入日期通过位移方式解决包含当月的前几月自定义函数
- 根据输入日期通过位移方式解决包含当月的前几月自定义函数
- smarty中自定义函数的使用(包括块方式)
- [EntLib]微软企业库5.0 学习之路——第三步、为项目加上异常处理(采用自定义扩展方式记录到数据库中)
- H2数据库启动方式
- 数据库树型结构中获取目录串的高性能方法,sys_connect_by_path与自定义函数性能对比
- 常用自定义函数进行分割的方式
- 数据库自定义函数学习
- SQL 10 函数 3 日期时间函数 - 2 主流数据库系统中日期时间类型的表示方式
- 数据库自定义函数
- 数据库中的表结构、索引、视图、存储过程、触发器以及自定义函数