SQL语句的另一种写法(2)[单兵作战手册SQL篇]

SQL语句的另一种写法


上一节我们把 WHERE子句的常用条件归纳完了。
里面用到了一些对 SQL的格式化方法。我们今天就展开说明一下。

我们将常见的对象,转换为SQL中的值 需要在前后加上单引号。

例如: select * from `customer` where `name` = '马云' and `company` in ('支付宝','淘宝','阿里巴巴') and `time` between '2005-06-01' and '2019-06-01'
类型需要的操作
Integer直接输出
Double直接输出
Long直接输出
String单引变双引 并前后加单引号
Calendar转换为YYYY-MM-DD HH:mm:ss 并前后加单引号
Date转换为YYYY-MM-DD HH:mm:ss 并前后加单引号
JSON单引变双引 并前后加单引号
public static String toSqlString(Object obj) {
		
	if(obj == null)obj = "";
	
	String ret = "";
	if (obj instanceof Integer) {
		ret = obj.toString().trim();
	} else if (obj instanceof Double) {
		ret = obj.toString().trim();
	} else if (obj instanceof Long) {
		ret = obj.toString().trim();
	} else if (obj instanceof Number) {
		ret = obj.toString().trim();
	} else if (obj instanceof String) {
		obj = ((String) obj).replace("'", "\"");
		ret = "'" + obj.toString().trim() + "'";
	} else if (obj instanceof Calendar) {
		ret = "'" + (CalendarUtil.getLongString((Calendar) obj)) + "'";
	} else if (obj instanceof Date) {
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		ret = "'" + (formatter.format((Date) obj)).toString() + "'";
	} else {
		// JSONObject  JSONArray
		obj = obj.toString().replace("'", "\"");
		ret = "'" + obj.toString().trim() + "'";
	}
	return ret;
}
    

这样做的目的就是将对象变成SQL中的数据。

SQL中的列是要单独受到重视的,因为这个很容易和值产生不可预知的问题,所以我们在列的前后加上 `

//当出现 . 需要另行处理。例如  dbname.table 
//转换后 为 dbname.`table`
public static String toSqlStringByColumnName(String columnname) 
{
	if(StringEx.isEmpty(columnname)) return "";
	if(columnname.contains("`"))return columnname;

	String[] columeNameA = columnname.split("\\.");
	if(columeNameA.length == 2) 
		columnname = columeNameA[0].trim() + "." + "`" + columeNameA[1].trim() + "`";
	else
		columnname = "`" + columnname.trim() + "`";
	return columnname;
}

我们在WHERE子句中还会碰到Between Like In 我们分别提供转换方法

//Between 转换为 between 'start' and 'end'
public static String toSqlStringByBetween(String start,String end) 
{
	StringBuffer str = new StringBuffer();
	str.append(" between ");
	str.append(toSqlString(start));
	str.append(" and ");
	str.append(toSqlString(end));
	
	return str.toString(); 
}

//Like  转换为 '%String%'
public static String toSqlLikeString(String obj) 
{
	obj = obj.replace("'", "\"");
	obj = obj.replace(" ", "%");
	return "'%" + obj.trim() + "%'";
}

//In 转换为 'String1','String2','String3'
public static String toSqlStringByMulti(String obj,String split) 
{
	String[] objs = obj.split(split);
	StringBuffer str = new StringBuffer();
	for(int i = 0;i < objs.length; i++)
	{
		if("".equals(objs[i] ))continue;
		str.append("'" + objs[i].trim() + "',");
	}
	if(str.toString().endsWith(","))
		return StringEx.subSuffix(str.toString());
	return str.toString();
}

//多关键字 Like 转换为 %String1%文本2%文本3%文本4%文本5%
public static String toSqlLikeStringByMulti(String obj,String split)
{
	String[] objs = obj.split(split);
	StringBuffer str = new StringBuffer();
	for(int i = 0;i < objs.length; i++)
	{
		if("".equals(objs[i] ))continue;
		str.append("%" + objs[i].trim());
	}
	String text = str.toString();
	if(!text.startsWith("%")) text = "%" + text;
	if(!text.endsWith("%")) text = text + "%";
	
	return text;
}

多关键字 Like 经常用在 多个关键字 有序搜索时使用。

有了这些方法,我们就可以尽情的把SQL的语言结构用对象化的方式来表达了。

完整代码地址:点击这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lc9995857

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值