특정 쿼리로 DB 상태가 변경 될 것이라고 어떻게 결정할 수 있습니까? JDBC를 사용합니다. INSERT, DELETE와 같은 핵심 단어를 파싱하는 구문 분석을 사용해야합니까? 아니면 다른 방법이 있습니까?쿼리가 변경 될지 여부 결정 DB
답변
한 가지 방법 :
-
이 확인
update count
- 업데이트가 이루어질 경우, 사용자 체크 긍정적 인 반응에
- , commit 트랜잭션을한다. 음수 인 경우 roll it back
변형이있을 수 있습니다. 귀하의 선택에 대한 느낌을 얻으려면 Statement API을 방문하십시오.
편집 :autocommit이 꺼져 있거나 거래가 창 밖을 벗어나지 않도록하십시오!
추가 편집 : 의견 작성자가 지적한대로 확장 가능한 솔루션은 아닙니다. 확장 성을 위해 트랜잭션을 짧게 유지해야하며 열린 트랜잭션 중에 사용자가 생각할 시간을 가지기를 원하지 않습니다.여러 명의 사용자가있을 경우 트랜잭션을 열어 두지 않는 방법을 찾으십시오. 아마도 문 캐싱과 롤백/커밋을 창의적으로 사용해야 할 것입니다. 더 나은 조언을 원하면 요구 사항에 대해 자세히 설명하십시오.
예, 좋은 대안입니다. 두 번 고마워요. – damluar
흠. 사용자가 해킹 할 수 있기 때문에 여전히 좋은 해결책은 아닙니다. SET autocommit = 1; ..... 그래서 이것은 정말로 안전하지 않습니다. 네가하는 일까지 너에게 달려있어. 또한 데이터베이스에 대한 다른 모든 변경 사항은'commit'까지 보류 상태이기 때문에 잘못 수행됩니다. –
사용자가 임의의 쿼리를 실행할 수 있다면 그렇습니다. 그렇다고 생각하지 않습니다. 그렇지 않으면 그는 데이터베이스 브라우저를 작성하고있는 것입니다. 동시 사용에 따라 성능이 문제가 될 수 있습니다. 나는 그걸 생각하지 않았다. –
쿼리를 확인하지 마십시오. 대신 데이터베이스를 수정할 수없는 사용자 자격 증명에서 쿼리가 실행되는지 확인하십시오. 여러 명의 사용자를 생성하고 각각의 제한된 권한을 부여 할 수 있습니다. 이 응용 프로그램은 데이터 만 선택할 수있는 사용자를 사용하여 연결해야합니다.
정확한 방법 (그리고 이것이 가능하다면)은 사용하는 데이터베이스에 따라 다르지만 모든 현대 DBMS가이를 지원한다고 생각합니다.
사용자가 권한이 충분하지 않을 때 얻을 수있는 예외를 catch하고 확인 후 다른 사용자를 사용하여 연결할 수 있습니다. 이렇게하면 쿼리를 파싱하는 것보다 훨씬 안전하고 오류가 발생하지 않는 데이터베이스 및 권한 관리에 모든 권한을 남겨 둡니다.
나는 내가 물었던 것을 물었다. 고마워, 나는 다른 역할에 대해 알고 그들에게 사용자를 할당. 그러나 그것은 문제가 아닙니다. – damluar
귀하의 질문에 대답하는 것이 아니라 귀하의 문제에 대한 해결책을 제공 할 것이라고 생각했습니다. 도움이 될만한 약간의 추가 기능을 만들었지 만 쿼리를 직접 구문 분석하는 경우 계속하십시오. 하지만이 일을 제대로 수행하려면 SQL에 대한 지식이 필요합니다. select 쿼리가 반드시 select로 시작하는 것은 아니며, delete 및 insert 문에는 select도 포함될 수 있습니다. 그리고 그것들은 단지 일반적인 예외 일뿐입니다 ... – GolezTrol
고맙습니다, 나는 유일한 방법은 파싱이라고 생각합니다. 하지만 그렇지 않길 바랬습니다. – damluar
은 내가 JDBC 전문가는 아니지만이 봤다 당신에게 도움이 될 수 :
http://www.techfeed.net/blog/index.cfm/2006/4/20/Obtaining-Affected-rows-from-SQL-Query
그것은/UPDATE/DELETE INSERT에 의해 영향을받는 행의 수를 검색하기위한 몇 가지 방법을 제공합니다 진술. 물론 CREATE/DROP TABLE 등은별로 도움이되지 않습니다.하지만 시작일뿐입니다.
아, 그냥 실행하기 전에 * 명령문을 가로 채기를 원한다는 것을 알았습니다. 그럼, 신경 쓰지 마라. (이것들은 실행 후에 작동합니다). –
MySQL 권한으로이 작업을하는 것이 좋습니다. 읽기 전용 액세스와 읽기/쓰기 권한을 가진 두 명의 사용자가 있어야합니다.
- 는 SQLException의 읽기 전용 사용자와
- 확인 쿼리를 실행하고 하나가 던져진다면 그들은 정말
- 그런 다음 두 번째 사용자를 사용하여 작성하려는 경우 다음 메시지를 표시합니다.
이것은 데이터베이스에 대한 사용 권한을 밀어 넣기 때문에 가장 안전한 방법이라고 생각합니다. 그렇지 않으면 복잡한 SQL 구문 분석기를 사용해야합니다.
에 따라 다릅니다. UPDATE
또는 DELETE
일 수도 있습니다. DB를 변경하십시오. 을 알고 싶다면 데이터베이스를 변경 하시겠습니까? INSERT
, UPDATE
, DELETE
또는 ALTER
키워드에 대/소문자를 구분하지 않는 검색은 데이터베이스를 변경하는 쿼리의 가능성을 알려줍니다. SELECT * FROM sometable WHERE something = 'update'
과 같은 것을 막을 수는 없지만 조심하십시오.
당신은 변화가 실제로 쿼리를 실행하기 전에, 을 할 것인지 여부를 을 알고 싶다면
, 당신은 이미 데이터베이스에있는 데이터에 대해 뭔가를 알고있는 것입니다.SELECT
같은 WHERE
절을 잠재적 데이터 변경 문자 UPDATE
또는 DELETE
문으로 사용하고 데이터를 비교하십시오 (예 : JOIN
또는 SQL의 다른 고급 기능을 사용하는 쿼리의 경우 지저분해질 수 있음). 더 쉬운 방법은 use transactions으로 변경하고 변경 사항을 확인한 다음 트랜잭션을 롤백하여 변경 사항을 취소 할 수 있습니다. 을 변경하려면 변경을 방지하려면 DBMS의 역할 관리를 사용해야하며 이러한 쿼리를 실행하는 사용자 또는 역할에 변경 쿼리를 실행할 수있는 권한을 부여하지 않는 것이 좋습니다.
감사합니다. 좋은 생각 – damluar
- 1. NSMenu 열기 여부 결정
- 2. 스레드 차단 여부 결정
- 3. 스크립트/서버 시작 여부 결정
- 4. Vista에서 창 표시 여부 결정
- 5. 새 DB 연결을 만들지 여부
- 6. JSP로 플래시 사용 가능 여부 결정
- 7. 서비스를 확인하는 WMI 쿼리가 작동하는지 여부
- 8. http 쿼리에서 사용중인 DB 결정
- 9. 여부
- 10. 코드에서 SQL 쿼리가 db db 쿼리보다 훨씬 오래 걸림
- 11. 여부
- 12. MOVE로 DB RESTORE의 SQL 데이터 경로 결정
- 13. 연결된 DB 변경
- 14. SQL DB 사용자의 변경
- 15. odp.net db 변경 알림
- 16. C#으로 결정 SQL 백업 파일이 암호로 보호되어 있는지 여부
- 17. Tcl/Tk : 창 최대화/창 최대화 여부 결정?
- 18. iPhone + In App 구매 + 제품 구입 여부 결정
- 19. Z- 색인으로 div 표시 여부 변경
- 20. 고정 된 개체의 표시 여부 변경?
- 21. 여부
- 22. 추적 MS 액세스 DB 변경
- 23. Oracle EXISTS 쿼리가 예상대로 작동하지 않습니다. - DB Link bug?
- 24. 결정
- 25. 결정
- 26. PHP 쿼리가 처리되는 동안 MySQL 쿼리가 처리되지 않습니다?
- 27. android : 심볼릭 링크 결정
- 28. 젠드 프레임 워크로 DB 변경 추적?
- 29. php, db : mysql에서 txt 파일로 변경
- 30. 데이터베이스 정렬 변경 DB (MS SQL)
진술이 데이터베이스를 변경할 수있는 것이거나 실제로 어떤 것이 변경 될지 알고 싶다면 신경 써야합니까? –
첫 번째 경우. 나는 그것을 막고 싶다. – damluar
왜 그 점을 알고 싶습니까? 최종 사용자가 직접 SQL 쿼리를 입력 할 계획입니까? –