因为业务需求,软件每次是打印出sql语句和参数,sql语句中参数都是问号,参数显示是值(类型)以逗号隔开连接,为啥不写个程序把完整的sql语句打印出来,每次都手动去填充一遍太麻烦了,本来想写一个Java的Form程序,奈何没基础,只能写个控制台程序输出。

应用场景如下:

sql语句:SELECT * FROM test where param1=? and param2=?
参数字符串:1(Integer),2(String)
期望输出字符串:SELECT * FROM test where param1=1 and param2='2'

如果只有三四个参数手动填充无所谓,但是如果是10个参数,手动填充试试

public class FillSQL {
public static void main(String[] args) {
String sqlNew="";
String sqlNoParamString="SELECT * from test where param1=? and param2=?";
String paramString="1(Integer), 2(String)";
String[] sqlArray=sqlNoParamString.trim().split("[?]");//如果sql语句最后一个为?数组和没有?是一样的结果
String[] paramArray=paramString.split(",");
String paramType="integer";//integer string
int count=sqlArray.length;
for(int i=0;i
sqlNew+=sqlArray[i];
if(i==(count-1)&&!sqlNoParamString.trim().endsWith("?")){//如果最后一个?不在末尾,则已经没有参数了
break;
}
paramType=paramArray[i].substring(paramArray[i].indexOf('(')+1, paramArray[i].indexOf(')')).toLowerCase();
if(paramType.equals("integer")){
sqlNew=sqlNew+paramArray[i].substring(0,paramArray[i].indexOf('('));
}else if(paramType.equals("string")){
sqlNew=sqlNew+"'"+paramArray[i].substring(0,paramArray[i].indexOf('(')).trim()+"'";
}
}
System.out.println(sqlNew);
}
}