記錄一次詭異的拼接sql不生效問題

Homie發表於2018-11-07

採用StringBuffer來拼接sql,最開始如下寫法:

StringBufer sql=new StringBufer(“update table set “); If(getA()!=null&&!””.equals(getA()))
sql.append(“a=#a#”);
If(getB()!=null&&!””.equals(getB()))
sql.append(“,b=#b#”);
If(getC()!=null&&!””.equals(getC()))
sql.append(“,c=#c#”);
sql.append(“id=#id#”);

問題復現:當a不存在,b和c存在時,sql=update table set ,b=?,c=? where id=?; 此時報錯
我的業務中b一定有值,此時改為:
StringBufer sql=new StringBufer(“update table set “); If(getB()!=null&&!””.equals(getb()))
sql.append(“,b=#b#”);
If(getA()!=null&&!””.equals(getA()))
sql.append(“a=#a#”);
If(getC()!=null&&!””.equals(getC()))
sql.append(“,c=#c#”);
sql.append(“id=#id#”);
日誌列印sql=update table set ,b=?,c=? where id=?; 感覺沒有生效,此時我又改為:
StringBufer sql=new StringBufer(“update table set b=#b#“); If(getA()!=null&&!””.equals(getA()))
sql.append(“a=#a#”);
If(getC()!=null&&!””.equals(getC()))
sql.append(“,c=#c#”);
sql.append(“id=#id#”);
日誌列印sql=update table set ,b=?,c=? where id=?; 還是沒有生效,最後我改成:
String str=” update table set b=#b#”;
StringBufer sql=new StringBufer(str);
If(getA()!=null&&!””.equals(getA()))
sql.append(“a=#a#”);
If(getC()!=null&&!””.equals(getC()))
sql.append(“,c=#c#”);
sql.append(“id=#id#”);
日誌列印sql= update table set b=?,c=? where id=?;

終於成功。

我現在不是很清楚是什麼原因造成,考慮快取,但在測試期間把應用部署重啟也沒有生效,難道是StringBuffer的一些原因還是java的因素亦或者是自身應用伺服器等複雜環境下造成的問題??有知道的人可以回答一下。。

相關文章