本文已参与「新人创作礼」活动,一起开启掘金创作之路
1、问题描述
在开发老系统的持久层的wsc文件,由于要直接和数据库交互,因此要把相应的sql拼接成字符串,通过加载数据库驱动取执行sql。通常的作法是在sql编辑器中写好一个现成的sql语句,验证没有问题后再在wsc文件里面以字符串的形式拼接,就是类似于这样的。
如果一行行去对照写好的sql语句,做sSQL=sSQL&"xxx"这样的拼接太过麻烦了。因此我用html+javascript写了一个自动拼接sql语句的小工具。
2、产生原因
系统开发需要。
3、解决方法
使用html+javascript写了一个自动拼接sql语句的小工具。
代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script type="application/javascript">
function convert(){
var str=document.getElementById("content").value;
var pre=document.getElementById("pre").value;
//js将字符串按照换行符分隔成数组
//var snsArr=str.split(/[(\r\n)\r\n]+/); // 注意!!!这种形式的正则表达式按换行符分割字符串为数组会把英文"括号"删除的
var snsArr=str.split(/[\n\r]/); //推荐使用这种正则表达式将字符串按照换行符分隔成数组
var temp="";
var res="";
if(pre.trim()==""){
pre="sSQL"
}
for(var i=0;i<snsArr.length;i++){
console.log("sSQL=sSQL& "+'"'+snsArr[i]+'"'+" ");
snsArr[i]=snsArr[i].replace(/^\s*/g, '');
//去除为空的
if(snsArr[i].trim()!=""){
if(i==0){
temp=pre+" = " +'" '+snsArr[i]+' "'+"\n";
}
else{
temp=pre+" = " +pre+ " & "+'" '+snsArr[i]+' "'+"\n";
}
res=res+temp;
}
}
document.getElementById("result").value=res;
}
</script>
<input type="text" name="pre" id="pre" />
<br><br><br>
<textarea rows="30" cols="260" name="content" id="content"></textarea>
<input type="button" id="btnOK" name="btnOK" value="转换" onclick="convert()"/>
<br><br><br>
<textarea rows="30" cols="260" name="result" id="result"></textarea>
</body>
</html>
4、演示效果
5、总结
公司内网老系统开发真的是一言难尽,业务复杂不说,由于技术框架语言比较老,没法在服务层做更多的数据处理,所以很多业务只能直接持久层通过后端sql去取值,去实现。想通过一个sql去实现复杂的业务取值,尤其还要考虑效率。测试环境数据又少又假又缺,完全无法验证准确性。执行速度:测试一秒钟,生产一分钟。生产总是超时,并且作为开发人员接触的权限也很有限制,也想不出什么办法去优化持久层的查询sql。
6、参考资料
字符串split() \r\n换行问题_故踟蹰于无限的博客-CSDN博客_split 换行