我有一個用戶生成的帶有佔位符的SQL語句(如SELECT * FROM films WHERE stars > ? AND length > ?
)和任意數量的值應該插入的值的輸入。我遍歷輸入以將所有這些輸入插入到PreparedStatement
中,但我不知道編譯時有多少個佔位符PreparedStatement
以及用戶提供了多少個輸入。檢查PreparedStatement中的所有佔位符是否填充
據我瞭解,應該路要走是趕上SQLException
上preparedStatement.execute()
,即「未指定值的佔位符。」這告訴我,但它不爲我工作的原因有很多:
- 我不知道在編譯時這DB將被使用,
SQLException
可以是任何東西 - 未公開佔位符,應以某種方式來處理(尤其是這是正常情況),失去了以另一種方式連接(這是真的錯誤)
在生成的查詢還搜索?
不起作用,因爲它會在下面的語句失敗:SELECT * FROM films WHERE title = 'Who Framed Roger Rabbit?'
那麼,有沒有什麼辦法執行前必須檢查的PreparedStatement
完整性?
這些「顯而易見的原因」是什麼,爲什麼獲得「'?」的數目不起作用?捕獲該異常也是有效的,因爲查詢從來沒有發送到dbms,而是在querys編譯期間創建。 – f1sh
爲什麼用戶可以發送比您在後端使用更多的輸入? – dambros
@ f1sh更新的問題更清楚 – chuwy