집 >데이터 베이스 >MySQL 튜토리얼 >JDBC는 동적 쿼리를 어떻게 구현합니까?
네트워크 개발에서는 이러한 비즈니스 요구 사항을 처리하기 위해 일반적으로 다음과 같은 방법을 사용하여 여러 조건을 포함하는 포괄적인 쿼리를 수행합니다.
1 매개변수 값을 SQL 문에 직접 연결합니다. 그런 다음 쿼리하십시오.
이 방법의 보안은 상대적으로 열악하며 실수로 SQL에 의해 주입될 수 있습니다. 매개변수 값에서 특수 문자를 먼저 필터링할 수 있지만 항상 매우 우아한 느낌을 주는 것은 아닙니다.
2. 자리 표시자를 먼저 사용하시겠습니까? '라는 SQL을 스플라이싱한 후, 조건부 판단을 통해 preparedStatement를 작성합니다.
이런 방식으로 TX를 사용해 본 사람이라면 누구나 이 방법의 복잡성을 알고 있을 것입니다. SQL을 작성하려고 할 때 먼저 판단을 하고, PST를 작성할 때 다시 판단을 해야 하는 번거로움이 있습니다.
3. 프로시저 스토리지
저는 항상 저장 프로시저에 만족하지 않았습니다. 한 번은 프로젝트를 MySQL에서 MSSQL로 마이그레이션한 후 결국에는 다른 버전의 제품이 다른 데이터베이스에서 실행될 뻔했습니다. 시간. .
사실 제가 하고 싶은 말은 비교적 우아하고 간단한 쿼리 방법을 원한다는 것 뿐입니다. 이전 문단에서 .NET에서 제공하는 SQLHelper에 영감을 받아 이렇게 비슷한 컴포넌트를 작성했습니다(실제로 구글링해서 찾아봤습니다). 30분 동안 요구 사항을 충족하는 기반이 발견되지 않았습니다.
1. 동적 쿼리란 무엇입니까?
여러 쿼리 조건을 무작위로 선택하여 쿼리용 DQL 문을 구성합니다. 2. 동적 쿼리의 어려움
3. 최종 쿼리문의 구성
두 가지 기본 원칙
select column... from table。2와 같은 SQL 문의 기본 프레임워크를 형성하여 요청이 있는 경우 DQL
이 쿼리 조건이 첫 번째 쿼리 조건이면 "and"를 추가할 필요가 없습니다. 그렇지 않으면 문제가 됩니다. 복잡합니다. 쿼리 조건을 생성할 때마다 이전 쿼리 조건
이 존재하는지 확인해야 합니다. 이 쿼리 조건의 존재는 쿼리에 영향을 미치지 않습니다. 쿼리 조건을 추가할 때 "and"를 추가해야 하는지 여부를 동적으로 결정하지 않기 위한 자리 표시자 역할만 합니다. 이러한 요구 사항에 따르면 이 쿼리 조건은 항상 "1=1"이어야 하며 기본은 다음과 같습니다. SQL 프레임워크는
select column...from table where 1=1각 동적 쿼리 조건 앞에 "and"를 추가합니다 3. .List 컬렉션은 자리 표시자에 값을 할당합니다
DQL 문을 사용하면 다음을 수행해야 합니다. 자리 표시자에 값을 할당하는 방법을 고려하여 자리 표시자에 해당하는 매개 변수를 수집하고 쿼리 조건을 생성하는 동안 여기에 저장할 수 있으므로 자리 표시자가 순차적으로 구성됩니다. n번째 자리 표시자는 n번째 요소에 해당합니다.
세 가지 데모1. 데이터베이스
2.
"/dynamicQueryServlet" DynamicQueryServlet serialVersionUID = 1L "text/html;charset=UTF-8"String name = request.getParameter("name"= request.getParameter("sex"= request.getParameter("age"= request.getParameter("depNo"String baseSQL = "select name,sex,age,depNo from tb_employee where 1=1"= StringBuilder();List<String> params = ArrayList<String>" and name=? ""name," + name);" and sex=? ""sex," +" and age=? ""age," +" and depNo=?""depNo," += = = = == ( i = 0; i < params.size(); i++== str.split(","); (arr[0].equals("age" a = Integer.parseInt(arr[1+ 1+ 1, arr[1== res.getString("name"= res.getString("sex" targetAge = res.getInt("age"= res.getString("depNo"= "name=" + targetName + "--" + "sex=" + targetSex + "--" + "age=" + targetAge + "--" + "depNo=" ++ "<br>" (ClassNotFoundException | (res != (ps != (conn != = length = (length == 0"查询为空"+ "<br>" + (str == | str.equals("" Connection getConnection() "com.mysql.jdbc.Driver" DriverManager.getConnection("jdbc:mysql://localhost:3366/test01", "root", "123"
위 내용은 JDBC는 동적 쿼리를 어떻게 구현합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!