jdbc PrepareStatement 控制台打印组装后的 SQL
import java.sql.Date; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @describe jdbc PrepareStatement 控制台打印组装后的 SQL */ public class PrintSql { public static String printRealSql(String sql, Object[] params) { if(params == null || params.length == 0) { System.out.println("the SQL is------------>\n" + sql);; return sql; } if (!match(sql, params)) { System.out.println("SQL 语句中的占位符与参数个数不匹配。SQL:" + sql);; return null; } int cols = params.length; Object[] values = new Object[cols]; System.arraycopy(params, 0, values, 0, cols); for (int i = 0; i < cols; i++) { Object value = values[i]; if (value instanceof Date) { values[i] = "'" + value + "'"; } else if (value instanceof String) { values[i] = "'" + value + "'"; } else if (value instanceof Boolean) { values[i] = (Boolean) value ? 1 : 0; } } String statement = String.format(sql.replaceAll("\\?", "%s"), values); System.out.println("The SQL is------------>\n" + statement);; return statement; } private static boolean match(String sql, Object[] params) { if(params == null || params.length == 0) { return true; // 没有参数,完整输出 } Matcher m = Pattern.compile("(\\?)").matcher(sql); int count = 0; while (m.find()) { count++; } return count == params.length; } }
本文作者:岁月记忆
本文链接:https://www.cnblogs.com/huang2979127746/p/17428676.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步