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; } }