2011-01-12 5 views
1

나는 긴 변수를 파싱 할 필요가있는 문자열 배열을 가지고있다.문자열 []을 쉼표로 구분 된 문자열로 변환합니다.

문자열 배열에 [ "9", "8"] 등의 값이 들어 있습니다.이것을 "(9,8)"(SQL 문의 "IN"절에서 사용하고 싶습니다.).

이것을 수행하는 좋은 방법은 무엇입니까? 여기

내 코드입니다 :

String[] statusIdArray; 
long statsId = Long.parseLong("("); 
statsId = Long.parseLong(statusIdArray[0]); 
    for(int i=1; i < len; i++) { 
    statsId = Long.parseLong(statsId + ",") statsId=Long.parseLong(statsId + statusIdArray[i]); 
    statsId = Long.parseLong(statsId + ")"); 
    } 

하지만이 경우는 NumberFormatException을 얻을 at input string "(9"

+0

나는 다음과 같은 몇 가지 코멘트 떨어져이 편집 : 나는 내가 SQL 쿼리에 다음을 사용할 수 있도록 SQL 표기로 변환 할 문자열의 배열을 가지고있다. 한가지 확인해야 할 것은'long []'또는'string []'으로 시작하는 것입니까? 아니면, 아마도 완전히 엉망이되었습니다. 어떤 경우에는 되돌리기 :) 어떤 SQL 문 (예 : 일부 코드 제공)을 사용하면 문제/작업을 정리하는 데 도움이됩니다. –

+0

사람들이 혼란 스럽기 때문에 "긴"이라는 단어를 사용하지 않고 질문을 다시 말해야한다고 생각합니다. 나는 그 대답이 자바 버전 String의 줄을 따라 있다고 의심한다. 조인 –

+0

질문이 일관성있게 업데이트되도록하십시오. 내가 코멘트에 있던 몇 가지 코드를 넣었습니다. –

답변

0

무엇? "(9,8) 한이 문자열 배열을 구문 분석"에 의해 당신 남자

문자열 배열이 있습니까? 아니면 하나의 문자열? 쉼표로 구분 된 각 숫자를 Long 배열로 입력 하시겠습니까? 아니면 긴 "98"이되기를 원하십니까 (9,8)?

+0

각 숫자를 쉼표로 구분하여 긴 변수로 전달하려고합니다. – prasanna

0
// digits is your array 
String result = "IN ("; 
for (int i = 0; i < digits.length; i++) { 
    result += digits[i] + (i != digits.lenght - 1) ? ", " : ""; 
} 

result += ")"; 

지금 당장 생각합니다.

배열 내용에주의해야합니다. SQL 주입 공격의 희생자가 될 수 있습니다.

+0

digits.say 예제 (9 8)로 구성된 문자열 배열을 가지고 있는데,이 문자열 배열을 긴 변수로 "IN "절은 long이 전달 될 때 sql.it의 (9,8)과 같아야합니다. – prasanna

+0

아마도 문자열을 연결하려는 경우"문자열 "유형이 불변이므로 최상의 선택이 아닙니다. 대신 "StringBuilder"를 사용하십시오. – Alexandr

+0

@ Alexandr : 자바 컴파일러의 새로운 버전이 자동으로 문자열을 연결하는 성능 저하를 피하기 위해 최적화되었다는 것을 이해했습니다. 즉, 연결이 자동으로 StringBuilder 작업으로 변환됩니다 (왜 그런지, m 틀리다.) – Marcelo

0

질문은 약간 불분명하지만, 아마도

long[] result = new long[ strings.length ]; 
for (int i=0; i<result.length; i++){ 
    result[i] = Long.parseLong(strings[i]); 
} 
난 digits.say 예 구성된 문자열 배열이 난 긴 변수 문자열의 배열을 전달할 수있다 (9 8) " "IN sql.it의 절은 긴이 (조인 방법 또는 뭔가 다른)이 경우 사용 Jakarta Commons StringUtils에서

을 전달 (9,8)

같이해야한다 10

저는 보통 변수를 SQL로 직접 보간하는 것에 반대합니다. (바인드 변수를 사용해야합니다.) 가변 길이의 IN리스트에서는 다소 까다 롭습니다. String 배열에서 이상한 데이터를 얻지 않도록하십시오.

+0

이 질문 : IN 절에 가변 길이 목록을 매개 변수화하는 문제에 대한 몇 가지 까다로운 솔루션을 가지고 있습니다 : http://stackoverflow.com/questions/337704/parameterizing-a-sql-in-clause (그것은 유명한 질문입니다.) – Marcelo

1

질문이라고 가정 :

import java.util.Arrays; // may need to add this import somewhere among your import statements 

/** 
* Convert Java String[] to SQL array with varargs syntax. 
* Example method invocations:<blockquote><pre> 
* String sql1 = toSQLArray("1","2","3"); // should return "(1,2,3)" 
* String sql2 = toSQLArray(new String[] { "0", "5" }); // should return "(0,5)" 
* </pre></blockquote> 
* @param array string array. 
* @return String created by concatenating each array element using "," as separator and 
* adding "(" and ")" as delimiters for the result. 
*/ 
public String toSQLArray(String... array) { 
    StringBuilder sb= new StringBuilder(Arrays.toString(array)); 
    sb.replace(0,1, "("); 
    int l = sb.length(); 
    sb.replace(l-1, l, ")"); 
    return sb.toString(); 
} 
+0

얘들 아이 코드는 다음과 같습니다 String [] statusIdArray; statsId = Long.parseLong (statsId + long.parseLong (statsIdArray [0]); long statsId = Long.parseLong ("(") "(statsId + statusIdArray [i]); statsId = Long.parseLong (statsId + ")"); } statusIdArray []에 요소가 9 8입니다. 7.i 숫자 형식 예외가 발생합니다 (예외 : 입력 문자열 "(9" – prasanna

관련 문제