您的位置:首页 > 数据库

H2数据库自定义函数方式

2014-12-26 13:47 429 查看
关于H2的其他信息这里就不过多的介绍了,详细参考:点击打开链接

通过源代码方式创建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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: