2014-11-21 1 views
0

나는 id와 name1, name2, name3 ..... name10 속성을 가진 테이블을 가지고 있는데,이 10 개의 이름은 모두 id에 속한다.mysql에서 테이블 자체의 속성 이름을 문자열로 전달할 수 있습니까?

id name1 name2 name3 name4 name5 name6 name7 name8 name9 name10 
201 ijk lmn xyz abc efg hks dkm jjl dkn awt 
202 mjl pan van slm tko kds jar slk dkf asd 

이제 10 개의 이름 중 이름이 발생한 ID를 검색해야합니다. print 서술문이라면 문자열 "name"을 그대로 유지하여 루프를 사용하여 숫자를 증가시키는 것이 매우 쉽습니다. 하지만 mysql 문을 사용할 때 어떻게해야할까요? 무엇보다 먼저 속성 이름을 문자열로 전달할 수 있습니까?

예 : 어디 조건

String uname=jf1.getText(); 
PreparedStatement stmt=conn.prepareStatement("Select * from staff where id = ?"); 
stmt.setString(1,uname); 
ResultSet rs=stmt.executeQuery(); 
rs.next(); 

를 문자열을 전달하지만 name10하는 이름 1에서 모든 속성을 확인해야 할 때, 그것은 이렇게 될 수 있습니까?

String uname=jf1.getText(); 
PreparedStatement stmt=conn.prepareStatement("Select id from staff where ?=?"); 
for(int i=1;i<=10<i++) 
stmt.setString(1,"name"+i); 
stmt.setString(2,uname); 

여기서 uname은 텍스트 필드를 통해 사용자가 지정합니다.

+0

@ 루이지 멘도자, 게시판 질문 버튼을 누르는 순간 어떻게 제목을 편집 할 수 있습니까? – learner

+0

그건 불가능합니다. 귀하는 귀하의 질문을 15 : 46 : 49Z에 게시했으며 귀하의 질문은 15 : 47 : 02Z에 게시했습니다. 차이가 몇 초있다 :) –

답변

1

IN으로 더 쉬울까요?

SELECT 
    id 
FROM 
    staff 
WHERE 
    ? IN (name1, name2, name3, name4, name5, 
     name6, name7, name8, name9, name10); 
+0

이 방법은 쉬운 방법으로 도움이되었습니다. – learner

1

아니요, 불가능합니다. 테이블 이름도 테이블 속성도 매개 변수 값으로 전달할 수 없습니다. ?=?으로 코드를 실행하면 JDBC는 RDBMS에 두 값 ("name"+iuname)을 비교하여 결과를 얻도록 지시합니다.

이 경우 동적으로 쿼리를 생성해야합니다. 속성 이름이 적절히 소독된다고 가정 할 때 이것은 괜찮습니다.

PreparedStatement stmt=conn.prepareStatement(
    "select * from staff where ? = case ? when 1 then name1 when 2 then name2 when 3 then name3 ... else null end" 
); 

지금 당신이 첫 번째 매개 변수의 값을 결합 할 수 있으며, 두 번째 매개 변수에 name# 열 수 :

대안

는 다음과 같이 10 개 개의 컬럼을 커버하는 문이 될 수 있습니다.

+0

나는 문장이 "테이블 속성이나 테이블 이름이 아니어야"라고 생각한다. 어쨌든 어떻게하면이 작업을 수행 할 수 있습니까? – learner

+0

그래서 나는 stmt.setString을 10 개까지 할당해야한다고 가정합니다. 예 : stmt.setString (1, name1); stmt.setString (2, name2); .... stmt.setString (10, name10); – learner

+0

@learner'case'가'?'매개 변수를 정수와 비교하기 때문에'stmt.setInt (2, i)'이어야합니다. 'uname '은 현재 인덱스'1 '에 있습니다. 나머지 코드는 동일하게 유지됩니다. 즉 두 개의 매개 변수 만 있습니다. – dasblinkenlight

관련 문제