2012-03-27 6 views
0

500 개의 주식 이름을 보유하고있는 문자열 배열이 있습니다. 이제 나는 그들의 이름과 함께 1000 개 이상의 주식을 상징하는 나의 mysql 데이터베이스에 테이블을 가지고있다. 내가 뭘하고 싶은지는 내가 가지고있는 테이블에서 그 500 종목의 상징을 찾아내는 것이다. 다음 코드를 시도했습니다.jdbc에서 데이터 가져 오기

Class.forName("com.mysql.jdbc.Driver"); 
Connection conn=DriverManager.getConnection("jdbc:mysql//localhost/mydatabase","user","pass"); 
PreparedStatement stmt = conn.prepareStatement("SELECT (NAME) FROM stocks1 WHERE FULLNAME =?"); 
for(int i1=0;i1<i;i1++) 
{ 
    stmt.setString(1, name[i1]); 


    stmt.addBatch(); 
} 
ResultSet t=stmt.executeQuery(); 
while(t.next()) 
    System.out.println(t.getString("NAME")); 

하지만 작동하지 않습니다. 아무것도 인쇄되지 않습니다. 나는 stmt.addBatch()에서 실수를하고 있다고 생각한다. 또한 와일드 카드 문자 (%)로 이름 [i1]을 표시하려면 어떻게해야합니까?

+1

일괄 처리는 쿼리가 아닌 DML 구문입니다. 검색 할 각 ID에 대해 SELECT를 실행하거나 준비된 명령문에서 사용할 수없는'WHERE IN (...) '을 사용해야합니다. –

+0

참조 http://stackoverflow.com/questions/7899543/in -java-can-prepared-statement-select-for-select-queries –

+0

@ Riddhish.Chaudhari- 위의 질문에 대한 대답의 링크는 약간의 오류가있는 것 같습니다. @ ahorsewithnoname, select 문을 for 루프에 넣고 실행하십시오. – user1092042

답변

1

문자열 배열의 주식에 대한 테이블을 만들고 주식 1 테이블과 결합 할 수 있습니다. 아래 그림과 같이 당신이 할 수있는, 와일드 카드를 포함한

Class.forName("com.mysql.jdbc.Driver"); 
Connection conn=DriverManager.getConnection("jdbc:mysql//localhost/mydatabase","user","pass"); 
PreparedStatement stmt = conn.prepareStatement("SELECT NAME FROM stocks1 WHERE FULLNAME is in (SELECT FULLNAME FROM arraystocks)"); 
ResultSet t=stmt.executeQuery(); 
while(t.next()) { 
    System.out.println(t.getString("NAME")); 
} 
+0

그건 새로운 테이블을 만드는 것을 의미합니다. 이 일을하는 다른 방법이 있습니까? – user1092042

+0

임시 테이블을 사용할 수 있습니다. 임시 테이블은 트랜잭션을 닫은 후 자동으로 삭제됩니다. 하지만 mysql이 이것을 지원하는지 잘 모르겠습니다. 그러나 테이블이 없으면 자신이 언급 한 것처럼 반복해야합니다. 쿼리의 성능이 중요한 경우에는 '어디에서 (..)'를 사용해야합니다. 그러나 명세서의 길이는 일반적으로 제한되어 있으므로 주식 이름의 덩어리를 처리해야합니다. 하나의 쿼리에서 100 개의 주식. – Andreas

+0

답변을 사용했지만 구문 예외가 발생했습니다 (SELECT FULLNAME FROM ...). – user1092042

1

:

은의 당신의 arraystocks의 테이블이 코드는 다음과 같습니다 하나의 열 FULLNAME와 stocksperuser이라는 가정 해 봅시다.

당신의 선택 성명 삭제에

= 및

PreparedStatement stmt = conn.prepareStatement("SELECT (NAME) FROM stocks1 WHERE FULLNAME LIKE ?"); 

가 setString의 방법에 %를 추가 LIKE 추가합니다.

ps.setString(1, name[i1]+ "%"); 

빈 행 문제의 경우 비교 열의 대소 문자가 모두 같은지 확인하십시오. 위 또는 아래에 있어야합니다. 그렇지 않으면 다음과 같이 비교하면서 변환 할 수 있습니다.

SELECT (NAME) FROM stocks1 WHERE upper(FULLNAME) LIKE ? 

ps.setString(1, upper(name[i1])+ "%");