2017-10-15 2 views
0

에 나는숫자 상수 유효하지 않은 SQL

1549886508071HELMPFN 

을 다음과 같이 어떻게 여기에 문자열을 전달할 수있는 목록 개체 및 메신저

UPDATE <table name> SET status= 'CLOSED' WHERE dlno IN ("+StringUtils.join(deals, ',')+") "; 

내 거래

으로 SQL 쿼리를 보내는 객체가 있어요

[SQL0103] Numeric constant 1549886508071HELMPFN not valid. 
+4

''' – lad2025

+0

'StringUtils.join()'은 "java"라고 생각하게하므로 태그로 추가했습니다. 문제는 실제로 SQL보다 응용 프로그램 언어에 관한 것입니다. –

답변

1

문자열 상수는 작은 따옴표로 묶어야합니다. 견적 문제를 해결하고 SQL 인젝션에 대한 코드가 안전 할 것 바인드 변수를 사용하여

UPDATE <table name> 
    SET status = 'CLOSED' 
    WHERE dlno IN ('"+StringUtils.join(deals, "', '") +"') "; 
1

: 기본적으로

List<String> deals = ImmutableList.of("abc", "123", "def"); 
    StringBuilder questionMarks = new StringBuilder("?"); 
    for (int i=1;i<deals.size();i++) { 
     questionMarks.append(",?"); 
    } 
    Connection conn = ...; // presumably, you already have this 
    PreparedStatement stmt = conn.prepareStatement(
      "UPDATE my_table SET status= 'CLOSED' WHERE dlno IN (" + questionMarks + ")"); 
    for (int i=1;i<=deals.size();i++) { // note these are 1-indexed, not 0-indexed 
     stmt.setString(i, deals.get(i-1)); 
    } 
    stmt.executeUpdate(); 

당신은 UPDATE my_table SET status = 'CLOSED' WHERE dlno IN (?,?)을 말한다 쿼리를 생성하는 것처럼 귀하의 경우에는이 보일 것이다 (매개 변수의 수에 해당하는 물음표의 수)를 입력 한 다음 stmt.setString으로 업데이트합니다. 그런 다음 업데이트를 실행할 수 있습니다.

또한 SQLException을 처리하고 명세서를 마무리해야합니다. 명확성을 위해 여기에서 제거되었습니다.

관련 문제