id
이 특정 세트에있는 레코드 목록을 가져 오려고합니다. 웹 서비스를 통해 다른 응용 프로그램에서이 집합을 가져옵니다. 다음과 같은 쿼리를 작성해야합니다 : SELECT * FROM tbl_data WHERE id IN (?, ?, ?, ?)
. 하지만 문제는 (?, ?, ?, ?)
부분이 가변 길이입니다. 한 요청에 대해서는 다음과 같습니다 : SELECT * FROM tbl_data WHERE id IN (?, ?, ?)
그리고 또 다른 요청은 SELECT * FROM tbl_data WHERE id IN (?, ?, ?, ?, ?, ?)
입니다. 나는 정말로 하나씩 루프를 만들고 레코드를 얻는 것을 좋아하지 않는다. 이 쿼리를 작성할 수있는 방법이 있습니까?가변 조건의 데이터베이스에서 레코드 받기
0
A
답변
3
당신은 당신의 코드에서 쿼리의 IN
일부를 생성 할 수 있습니다. ? symbol
대신에 무엇이 있어야하는지 알고 있다면 루프를 실행하여 빌드하십시오.
2
대신 "?, ?, ? ... , ?"
문자열을 반복하고 구성 할 수 있습니다. DB에 질문해야하는 ID만큼의 물음표를 넣으십시오. 다음은 문자열
에게 몇 가지 예제 코드를 구성하는 StringBuilder를 사용
@Test
public void genSqlInParameterString() {
String select = "SELECT * FROM my_table WHERE ";
System.out.println(select + genSqlInParameterString(null));
System.out.println(select + genSqlInParameterString(new String[]{}));
System.out.println(select + genSqlInParameterString(new String[]{"A"}));
System.out.println(select + genSqlInParameterString(new String[]{"A", "B"}));
}
public String genSqlInParameterString(String[] args) {
StringBuilder sb = new StringBuilder();
if(args != null && args.length > 0) {
sb.append("IN (");
for(int i = 0; i < args.length ; i++) {
sb.append('\'').append(args[i]).append('\'');
if(i < args.length-1) {
sb.append(", ");
}
}
sb.append(")");
}
if(sb.length() == 0) {
// condition evaluates to false, so that select returns nothing
// you may instead return 1=1 so that all records are returned
// handling no-paramters case depends on your requirements
sb.append("1=0");
}
return sb.toString();
}
출력
SELECT * FROM my_table WHERE 1=0
SELECT * FROM my_table WHERE 1=0
SELECT * FROM my_table WHERE IN ('A')
SELECT * FROM my_table WHERE IN ('A', 'B')
+0
굉장합니다. 고맙습니다. –
+0
@MajidAzimi 환영합니다! – A4L
2
SQL 코드를 수동으로 작성하는 대신 QueryDSL 또는 JOOQ를 사용하십시오.
관련 문제
- 1. SQLite 데이터베이스에서 임의의 레코드 10 개 받기
- 2. Grails에서 마지막 업데이트 레코드 받기
- 3. ActiveRecord : 모든 조건의 관련 레코드 찾기
- 4. URL에서 레코드 받기
- 5. 비어있는 hstore로 레코드 받기
- 6. DNS TXT 레코드 받기
- 7. 비슷한 소리로 레코드 받기
- 8. SQLite에서 레코드 받기?
- 9. JPA의 그룹별로 레코드 받기
- 10. 주소 받기 데이터베이스에서 Google지도로
- 11. 안드로이드 데이터베이스에서 SQLiteContraintException 받기
- 12. 데이터베이스에서 입력 받기
- 13. 데이터베이스에서 연도 받기
- 14. Linq를 사용하여 두 레코드 사이에 레코드 받기
- 15. 데이터베이스에서 레코드 삭제하기
- 16. 여러 데이터베이스에서 레코드 검색
- 17. 데이터베이스에서 레코드 중복 SaveChanges()
- 18. 데이터베이스에서 레코드 삭제
- 19. 여러 데이터베이스에서 레코드 선택
- 20. 데이터베이스에서 일괄 삭제 레코드
- 21. MDF 데이터베이스에서 레코드 삭제
- 22. sqlite 데이터베이스에서 레코드 삭제
- 23. 데이터베이스에서 이력 레코드 관리
- 24. Vaadin 데이터베이스에서 레코드 제거
- 25. Play & Ebean - 첫 번째 레코드 받기
- 26. 데이터베이스에서 일대 다 가변 관계의 가변 수를 지원하는 방법
- 27. SubmitChanges 즉시 백 레코드 받기
- 28. Doctrine 2 - 모든 레코드 받기
- 29. Ruby에서 DNS TXT 레코드 받기
- 30. 효과적인 방법으로 최신 레코드 받기
SELECT * FROM tbl_data WHERE id = yourID
? –순수 JDBC를 사용하고 있습니까? 어떤 형태로 ID가 있습니까? –
SO, http://stackoverflow.com/questions/337704/parameterizing-an-sql-in-clause에서 가장 인기있는 질문을 복제 해 주셔서 감사합니다. 중복 생성을 계속하십시오. 프로그래머는 재사용하지 않아야합니다. 지속 가능성을 위해 재사용 및 재활용을 줄여야합니다. – Val