如何確定特定查詢將更改DB的狀態? 我使用JDBC。我應該使用解析搜索關鍵詞INSERT,DELETE還是還有其他方法?確定查詢是否會更改DB
回答
方式一:
- Execute the query
- 檢查update count
- 如果更新由,做你的用戶檢
- 在積極應對,commit交易。否定的,roll it back。
會有變化。探索Statement API以瞭解您的選擇。
編輯:確保autocommit已關閉,或事務性不在窗口!
更多編輯:正如評論者指出的,這不是一個可擴展的解決方案。對於可擴展性,交易必須保持簡短,並且您不希望讓用戶在公開交易期間思考時間。如果會有多個用戶,找到一種方法來做到這一點,而不需要保持一個事務處於打開狀態,可能會使用一些創造性的語句緩存和回滾/提交。爲獲得更好的建議,請詳細解釋您的要求。
是的,這是很好的選擇。謝謝兩次:) – damluar
嗯,這仍然不是一個好的解決方案,因爲用戶可以通過做'SET autocommit = 1; .....'所以這不是很安全。儘管如此,由你決定。它也執行不好,因爲對數據庫的所有其他更改都處於保留狀態,直到提交。 –
如果用戶可以執行任意查詢,情況就是這樣,但我認爲情況並非如此,否則他只是在編寫數據庫瀏覽器。性能可能是一個問題,取決於併發使用情況。我沒有想到這一點。 –
不檢查查詢。相反,請確保查詢在不允許修改數據庫的用戶憑據下運行。您可以創建多個用戶並授予每個有限權限。此應用程序應該使用只能選擇數據的用戶進行連接。
確切的方法(如果這是可能的話)取決於您使用的數據庫,但我認爲每個現代DBMS都支持這一點。
您可以執行查詢,捕獲您可能在用戶權限不足時發生的異常,並且在確認後可以使用其他用戶進行連接。通過這種方式,您可以將其全部留給數據庫及其權限管理,這比自己解析查詢更安全,更不容易出錯。
我不是一個JDBC的專家,但我看到了這一點,並能對您有所幫助:
http://www.techfeed.net/blog/index.cfm/2006/4/20/Obtaining-Affected-rows-from-SQL-Query
它提供了一些技術,用於檢索受INSERT的行數/ UPDATE/DELETE聲明。當然,這對CREATE/DROP TABLE等幫助不大,但這是一個開始。
啊,剛纔看到你想在執行它之前攔截語句*。沒關係! (這些將在執行後工作)。 –
我建議使用MySQL權限執行此操作。有兩個用戶,一個具有隻讀訪問權限和讀/寫權限。
- 執行查詢與只讀用戶
- 檢查的SQLException,如果一個拋出,則表明你的消息,如果他們真的想要寫
- 然後用第二個用戶。
這是我認爲是最安全的方式,因爲您正在推動數據庫的權限。否則,你將不得不有一個複雜的SQL解析器,這可能是困難的。
取決於。一個UPDATE
或DELETE
可能更改數據庫。如果您想知道是否可能在更改數據庫,那麼INSERT
,UPDATE
,DELETE
或ALTER
關鍵字不區分大小寫的搜索將告訴您有查詢更改數據庫的可能性。雖然沒有什麼能夠阻止像SELECT * FROM sometable WHERE something = 'update'
這樣的東西,所以請留意。
如果你想知道是否會改變實際運行查詢之前進行,,你將不得不瞭解一下已在數據庫中的數據。執行SELECT
使用相同的WHERE
子句作爲潛在的數據變更UPDATE
或DELETE
語句,並比較數據(例如,對於使用JOIN
或SQL的其他更高級功能的查詢,這可能會變得麻煩)。更簡單的方法是use transactions進行更改,檢查更改,然後回滾事務,撤消更改。
如果你想防止更改,如其他答案建議你利用你的DBMS的角色管理,不授予權限執行更改查詢用戶或角色上運行這些查詢。
謝謝,好想法 – damluar
- 1. 查詢db更改集
- 2. 如果我更改db,linq查詢會是一樣的嗎?
- 3. Jmeter是否更新了更改DB
- 4. 是否可以確定MySQL中的查詢是否會鎖定表?
- 5. 確定TIBTransaction是否有未決更改
- 6. 確定文件是否已更改
- 7. 確定視圖是否失效(更改)
- 8. 確定是否一個SQL查詢改變
- 9. magento從1.6.2升級到1.7.0.2 - db base是否會被更改?
- 10. 查詢是否正確?
- 11. 只查詢特定列是否更快?
- 12. 是否可以確定SIM /電話號碼是否已更改?
- 13. 如何檢查查詢是否正確
- 14. 檢查IList是否更改?
- 15. 更改DCG是確定性
- 16. 是我的查詢是否正確?
- 17. 這是SUM()查詢是否正確?
- 18. DirX是否提供更改日誌以查詢修改
- 19. 蒙戈DB查詢制定
- 20. 我不確定我是否正確應用Rails更改遷移
- 21. 檢查DB是否可用
- 22. 如何檢查sql查詢是否爲確定性?
- 23. 如何確定SQL查詢是否是SELECT?
- 24. 確定類是否已更改(不是對象)
- 25. 確定Object是否被更改的最佳方法是什麼?
- 26. 在TSQL查詢中使用COLLATE是否會做出永久更改?
- 27. 檢查重定向是否改變查詢字符串
- 28. SQL查詢:這個查詢是否正確?更好的方式來寫它?
- 29. Django模型查詢是否正確?
- 30. 這個DQL查詢是否正確?
你是否關心這個陳述是否會改變數據庫,或者你想知道實際上是否會改變? –
第一種情況。我想阻止它。 – damluar
你能詳細說明你爲什麼想知道這個嗎?你打算讓最終用戶直接輸入SQL查詢嗎? –