자바 저장 프로 자바의 PreparedStatement와 MySQL을 사용 있나요?이 가능한 SQL 삽입은 일상
0
A
답변
2
아니요, PreparedStatement
은 SQL Injection
으로부터 보호해야합니다.
저장 프로 시저를 호출하는 것이므로 CallableStatement
을 사용하는 것이 좋습니다. PreparedStatement로의
String SQL = "{CALL myStoredRoutine(?, ?, ?)}";
CallableStatement cstmt = myConnection.prepareCall(SQL);
- 준비된 문
인스턴스는 이미 컴파일 된 SQL 문이 포함되어 있습니다. 이것은 "준비된"문장을 작성하는 것입니다.
PreparedStatement 오브젝트는 프리 컴파일되어 있기 (위해) 때문에, 그 실행은 Statement 오브젝트의 실행보다 빠르다 준비된 문은 SQL을 실행하는 데 사용됩니다
는
CallableStatement 오브젝트는 모든 RDBMS에 대해 표준의 방법으로 스토어드 프로 시저를 호출 할 수있는 방법을 제공합니다
- 호출 가능 문을 쿼리합니다. 저장 프로시 저는 데이터베이스에 저장됩니다. 스토어드 프로 시저의 호출은 CallableStatement 오브젝트에 포함됩니다.
1
아니요, 불가능합니다. 문자열은 준비된 문으로 필터링 된입니다. 사실 그 점 중 하나입니다.
0
아니요. 매개 변수 바인딩의 목적은 매개 변수가 매개 변수로 구문 분석된다는 것입니다. 성능면에서도 뛰어납니다.
0
매개 변수화 된 쿼리를 사용하면 필요에 따라 인수가 구문 분석되고 이스케이프 문자로 변환되므로 불가능합니다. 이것이 매개 변수화 된 질의/준비 문을 사용하는 이점입니다.
관련 문제
- 1. 삽입은
- 2. 삽입은 ++
- 3. 삽입은
- 4. 삽입은
- 5. 삽입은
- 6. MySQL의 일상 다운로드
- 7. RDF, 트리플, 일상 애플리케이션
- 8. MySQL의 일상 INSERT 문
- 9. 배치 SQL 삽입은 MySQL 최적화에 좋은 방법입니까?
- 10. jQuery를 삽입은
- 11. LINQ 삽입은
- 12. 시간대에 내 일상 시간 파싱
- 13. PDO MySQL의 삽입은 여러 분야에서
- 14. 예전의 코드 삽입은 끝났습니까?
- 15. 삽입은/파이썬 프로그램
- 16. C#을 문자열 삽입은
- 17. MySQL의 삽입은 자신의 이름이 대시
- 18. SQL Server 2008 대량 삽입은 쓰기보다 많은 읽기를 발생시킵니다. 왜?
- 19. OPENROWSET 삽입은 내가 이것을 사용하고
- 20. FIRSTROW 매개 변수가있는 SQL 대량 삽입은 다음 줄을 건너 뜁니다.
- 21. 대량 삽입은 한 줄을 가져온 다음 종료합니다.
- 22. 다중 값 삽입은 mysql 프로 시저에서 작동합니까?
- 23. mysql 삽입은 존재하지 않습니다. 업데이트
- 24. .ajax는 성공했지만 데이터베이스 삽입은 실패합니다.
- 25. 대량 삽입은 행을 삽입하지 않습니다.
- 26. SQL-CE 가능한 버그?
- 27. 이 충돌의 가능한 원인은 무엇입니까?
- 28. 이 왜 가능한 사이클 경고가
- 29. 이 예외의 가능한 원인은 무엇입니까?
- 30. 이 활성 쿼리에서 가능한 쿼리입니까?
기본적으로 아니요. 그러나 저장 프로 시저가 동적 SQL 문을 작성하여 실행하면 가능한 SQL 주입으로 바뀔 수 있습니다. –
이 쿼리는'SELECT * FROM userTable WHERE userName =? '이라고 가정 해 보겠습니다. 만약 당신이'preparedStatement'를 사용하고 있다면, 컴파일 된 곳으로 직접 보내지고'setString()'메쏘드의'userName'이 대체 될 것입니다. 부정한 값을 발견하면 (자), 예외가 Throw됩니다. ' '또는'1 '='1'과 같은'userName'은 전체 문자열로 취급되며'or' 및'='와 같은 연산자를 포함하지 않습니다. 따라서 안전합니다. – Lion