java清理语句,java – 如何在不使用准备语句的情况下对SQL进行清理
對,準備好的語句查詢參數只能在您使用單個文字值的地方使用.您不能對表名,列名,值列表或任何其他SQL語法使用參數.
所以你必須將你的應用程序變量插入到SQL字符串中,并引用相應的字符串.請使用引號來定界您的表名標識符,并將引號字符串加倍排列:
java.sql.DatabaseMetaData md = conn.getMetaData();
String q = md.getIdentifierQuoteString();
String sql = "SELECT MAX(AGE) FROM %s%s%s";
sql = String.format(sql, q, tablename.replaceAll(q, q+q), q);
例如,如果您的表名字面上是表“名稱,并且您的RDBMS標識符引號字符是”,則sql應包含一個字符串,如:
SELECT MAX(AGE) FROM "table""name"
我也同意@ChssPly76的評論 – 最好是你的用戶輸入實際上不是文字表名稱,而是你的代碼映射到一個表名,然后插入到SQL查詢中的含義.這樣可以保證不會發生SQL注入.
HashMap h = new HashMap();
/* user-friendly table name maps to actual, ugly table name */
h.put("accounts", "tbl_accounts123");
userTablename = ... /* user input */
if (h.containsKey(userTablename)) {
tablename = h.get(userTablename);
} else {
throw ... /* Exception that user input is invalid */
}
String sql = "SELECT MAX(AGE) FROM %s";
/* we know the table names are safe because we wrote them */
sql = String.format(sql, tablename);
總結
以上是生活随笔為你收集整理的java清理语句,java – 如何在不使用准备语句的情况下对SQL进行清理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IIS的安装与配置
- 下一篇: laravel mysql视图,在 La