package com.centit.support.database;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.ImmutableTriple;
import com.centit.support.algorithm.DatetimeOpt;
import com.centit.support.algorithm.StringBaseOpt;
import com.centit.support.algorithm.StringRegularOpt;
import com.centit.support.common.KeyValuePair;
import com.centit.support.compiler.EmbedFunc;
import com.centit.support.compiler.Formula;
import com.centit.support.compiler.Lexer;
import com.centit.support.compiler.MapTranslate;
import com.centit.support.compiler.VariableTranslate;
/**
* @author [email protected]
*/
public class QueryUtils {
public static String SQL_PRETREAT_LIKE = "LIKE";
public static String SQL_PRETREAT_DATE = "DATE";
public static String SQL_PRETREAT_DATETIME = "DATETIME";
public static String SQL_PRETREAT_DATESTR = "DATESTR";
public static String SQL_PRETREAT_DATETIMESTR = "DATETIMESTR";
public static String SQL_PRETREAT_DIGIT = "DIGIT";
public static String SQL_PRETREAT_UPPERCASE = "UPPERCASE";
public static String SQL_PRETREAT_LOWERCASE = "LOWERCASE";
public static String SQL_PRETREAT_NUMBER = "NUMBER";
public static String SQL_PRETREAT_QUOTASTR = "QUOTASTR";
public static String SQL_PRETREAT_SPLITFORIN = "SPLITFORIN";
public static String SQL_PRETREAT_CREEPFORIN = "CREEPFORIN";
public static String SQL_PRETREAT_INPLACE = "INPLACE";
/**
* 把字符串string包装成'string',并将字符传中的数里的"'"替换为“''”
* @param value
* @return 对应的'value'
*/
public static String buildStringForQuery(String value) {
if (value == null || "".equals(value))
return "''";
return "'" + StringUtils.replace(value.trim(), "'", "''") + "'";
}
public static String buildObjectsStringForQuery(Object [] objects) {
if (objects == null || objects.length<1)
return "()";
StringBuilder sb = new StringBuilder("(");
int dataCount=0;
for(Object obj:objects){
if(obj!=null){
if(dataCount>0)
sb.append(",");
sb.append(buildStringForQuery(String.valueOf(obj)));
dataCount++;
}
}
sb.append(")");
return sb.toString();
}
public static String buildObjectsStringForQuery(Collection<?> objects) {
if (objects == null || objects.size()<1)
return "()";
StringBuilder sb = new StringBuilder("(");
int dataCount=0;
for(Object obj:objects){
if(obj!=null){
if(dataCount>0)
sb.append(",");
sb.append(buildStringForQuery(String.valueOf(obj)));
dataCount++;
}
}
sb.append(")");
return sb.toString();
}
public static String buildObjectStringForQuery(Object fieldValue) {
if(fieldValue instanceof java.util.Date){
return QueryUtils.buildDatetimeStringForQuery((java.util.Date)fieldValue);
}else if(fieldValue instanceof java.sql.Date){
return QueryUtils.buildDatetimeStringForQuery((java.sql.Date)fieldValue);
}else if(fieldValue.getClass().getSuperclass().equals(Number.class)){
return fieldValue.toString();
}else if(fieldValue instanceof Object[]) {
return QueryUtils.buildObjectsStringForQuery((Object[]) fieldValue);
}else if(fieldValue instanceof Collection<?>) {
return QueryUtils.buildObjectsStringForQuery((Collection<?>) fieldValue);
}else {
return QueryUtils.buildStringForQuery(fieldValue.toString());
}
}
public static String buildDateStringForQuery(Date value) {
return "'" + DatetimeOpt.convertDateToString(value, "yyyy-MM-dd")
+ "'";
}
public static String buildDateStringForQuery(java.sql.Date value) {
return "'" + DatetimeOpt.convertDateToString(value, "yyyy-MM-dd")
+ "'";
}
public static String buildDatetimeStringForQuery(Date value) {
return "'" + DatetimeOpt.convertDateToString(value, "yyyy-MM-dd HH:mm:ss")
+ "'";
}
public static String buildDatetimeStringForQuery(java.sql.Date value) {
return "'" + DatetimeOpt.convertDateToString(value, "yyyy-MM-dd HH:mm:ss")
+ "'";
}
/**
* 在HQL检索策略以外,模糊拼接key-value键值对,把string包装成to-char('value','yyyy-MM-dd')
*
* @param value
* @return 对应的to-char('value','yyyy-MM-dd')
*/
public static String buildDateStringForOracle(Date value) {
return "TO_DATE('" + DatetimeOpt.convertDateToString(value, "yyyy-MM-dd")
+ "','yyyy-MM-dd')";
}
public static String buildDateStringForOracle(java.sql.Date value) {
return "TO_DATE('" + DatetimeOpt.convertDateToString(value, "yyyy-MM-dd")
+ "','yyyy-MM-dd')";
}
/**
* 在HQL检索策略以外,模糊拼接key-value键值对,把string包装成to-char('value','yyyy-MM-dd
* hh24:mi:ss')
*
* @param value
* @return 对应的to-char('value','yyyy-MM-dd hh24:mi:ss')
*/
public static String buildDateTimeStringForOracle(java.util.Date value) {
return "TO_DATE('" + DatetimeOpt.convertDateToString(value, "yyyy-MM-dd HH:mm:ss")
+ "','yyyy-MM-dd hh24:mi:ss')";
}
public static String buildDateTimeStringForOracle(java.sql.Date value) {
return "TO_DATE('" + DatetimeOpt.convertDateToString(value, "yyyy-MM-dd HH:mm:ss")
+ "','yyyy-MM-dd hh24:mi:ss')";
}
/**
* 将string中的 空格换成 % 作为like语句的匹配串
* 比如在客户端输入 “hello world”,会转变为 "%hello%world%",即将头尾和中间的空白转换为%用于匹配。
* @param sMatch
* @return
*/
public static String getMatchString(String sMatch) {
StringBuilder sRes = new StringBuilder("%");
char preChar = '%', curChar;
int sL = sMatch.length();
for (int i = 0; i < sL; i++) {
curChar = sMatch.charAt(i);
if ((curChar == ' ') || (curChar == '\t') || (curChar == '%') || (curChar == '*')) {
curChar = '%';
if (preChar != '%') {
sRes.append(curChar);
preChar = curChar;
}
} else if (curChar == '?' ){
//|| curChar == '\'' || curChar == '\"' || curChar == '<' || curChar == '>') {
sRes.append("_");
preChar = curChar;
}else{
sRes.append(curChar);
preChar = curChar;
}
}
if (preChar != '%')
sRes.append('%');
return sRes.toString();
}
/**
* 将查序变量中 用于 like语句的变量转换为match字符串,比如“hello world”会转变为 "%hello%world%",
* @param queryParams 查询命名变量和值对
* @param likeParams 用于like 的变量名
* @return 返回在查询变量中找到的like变量
*/
public static int replaceMatchParams(Map<String,Object> queryParams,Collection<String> likeParams){
if(likeParams==null||likeParams.size()==0||queryParams==null)
return 0;
int n=0;
for(String f:likeParams){
Object value = queryParams.get(f);
if(value!=null){
queryParams.put(f, getMatchString(StringBaseOpt.objectToString(value)));
n++;
}
}
return n;
}
/**
* 将查序变量中 用于 like语句的变量转换为match字符串,比如
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
centit-database-master.zip (44个子文件)
centit-database-master
.classpath 1KB
.settings
org.eclipse.jdt.core.prefs 736B
org.eclipse.core.resources.prefs 119B
org.eclipse.wst.common.component 322B
org.eclipse.wst.common.project.facet.core.xml 172B
org.eclipse.m2e.core.prefs 90B
pom.xml 2KB
src
test
java
com
centit
test
TestQueryUtils.java 6KB
TestOraClob.java 3KB
TestJsonDao.java 2KB
TestJDBC.java 2KB
main
java
META-INF
MANIFEST.MF 39B
com
centit
support
database
QueryUtils.java 62KB
DatabaseAccess.java 27KB
QueryAndParams.java 5KB
DBConnect.java 417B
DbcpConnectPools.java 3KB
QueryAndNamedParams.java 3KB
DBType.java 1KB
DbcpConnect.java 8KB
metadata
TableField.java 6KB
PdmReader.java 10KB
TableInfo.java 11KB
OracleMetadata.java 5KB
IbmDb2Metadata.java 4KB
JdbcMetadata.java 3KB
DatabaseMetadata.java 307B
TableReference.java 2KB
HibernateMapInfo.java 9KB
MsSqlSvrMetadata.java 5KB
DataSourceDescription.java 5KB
jsonmaptable
JsonObjectDao.java 4KB
GeneralJsonObjectDao.java 14KB
MySqlJsonObjectDao.java 1KB
OracleJsonObjectDao.java 1KB
DB2JsonObjectDao.java 1KB
SqlSvrJsonObjectDao.java 1KB
DatabaseAccessException.java 712B
ddl
MySqlDDLOperations.java 2KB
DDLOperations.java 1KB
OracleDDLOperations.java 3KB
SqlSvrDDLOperations.java 2KB
DB2DDLOperations.java 2KB
.project 1KB
共 44 条
- 1
资源评论
博士僧小星
- 粉丝: 1907
- 资源: 5877
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- IMG_0694.GIF
- 基于图像的三维模型重建C++源代码+文档说明(高分课程设计)
- 基于聚焦法的工件立体测量方案,根据数据进行三维重建 使用HALCON处理图像,MATLAB拟合数据+源代码+数据集+效果图
- 锄战三国村 修改:货币使用不减 v1.10(2) 原创 (中文).apk
- 基于python实现的单目双目视觉三维重建+源代码+图像图片(高分课程设计)
- 基于C+++OPENCV的全景图像拼接源码(课程设计)
- 基于Python+OpenCV对多张图片进行全景图像拼接,消除鬼影,消除裂缝+源代码+文档说明+界面截图(高分课程设计)
- 基于C++实现的全景图像拼接源码(课程设计)
- 基于SIFT特征点提取和RASIC算法实现全景图像拼接python源码+文档说明+界面截图+详细注释(95分以上课程大作业)
- 基于matlab实现眼部判别的疲劳检测系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功