java
  • sql
  • insert-select
  • 2012-03-09 2 views -1 likes 
    -1

    삽입을 수행하는 메소드에 다음 문자열을 전달합니다. 그러나이를 시도 할 때마다 오류가 발생합니다.Java에서 데이터베이스에 삽입하는 중 오류

    PropInsert = "INSERT INTO Image_has_Props (Image_ImageID, Props_PropID), SELECT "+IntImageID+", PropID FROM Props WHERE PropDescription = '"+StrPropDescription+"';"; 
    

    Error

    오류에서 볼 수있는, 그것은 혈압 모니터 말한다 곳 후 '추가로이 나타납니다. 이 여분의 것이 어디에서 왔는지 나는 모른다. JComboBox에서 StrPropDescription을 얻습니다.

    StrPropDescription = propChoice.getSelectedItem().toString(); 
    
    +0

    'StrPropDescription'을 자세히 살펴보십시오.그것은''로 끝나는가? –

    +1

    그 마지막 "추가"따옴표는 나에게 오류 메시지의 SELECT 문의 시작 부분에 열린 닫는 따옴표처럼 보입니다. –

    +0

    @MattGibson 좋은 장소! 지금 뭔가 잘못 됐음을 의미합니다! 그래도 고마워! – Peddler

    답변

    4

    난 그냥 여분의 쉼표를 생각합니다.

    PropInsert = "INSERT INTO Image_has_Props (Image_ImageID, Props_PropID) SELECT "+IntImageID+", PropID FROM Props WHERE PropDescription = '"+StrPropDescription+"';"; 
    

    주에게 INSERT 사이에 쉼표의 부족을보십시오 . 그리고 SELECT

    4

    먼저 사용자 입력에서 직접 SQL 문을 생성하는 것은 위험한 일입니다!

    둘째, SQL 문 바로 앞에 StrPropDescription 값을 덤프하여 원하는 값을 가지도록 할 수 있습니다.

    아마 끝에 아포스트로피가 있습니다. 그런 다음 변수가 변경된 위치/방법을보기 위해 소스에서 역 추적하는 문제입니다.

    +0

    사용자가 실제로 JComboBox에서 입력 할 값을 선택하므로 너무 위험하지 않습니다! 무엇이 인쇄되고 있었는지 확인 했으므로 끝 부분에는 아포스트로피가 없었습니다. – Peddler

    +0

    여전히 "O'Malley Corporation Blood Pressure Monitor"가있는 곳에서 항상 나타나게되는 미래의 사례에 대한 입력을 소독 할 가치가 있습니다. :) –

    +0

    @MattGibson 그걸로 논쟁 할 수는 없지만,이 방법은 내가 지금 어떻게해야하는지에 어울립니다! – Peddler

    1

    끝에 '추가'는 SELECT 구문 앞에있는 것과 일치하는 전체 선택 구문을 둘러싼 인용구 일뿐입니다. 내가 SELECT 후 오류가 있다고 생각, 선택 1, PROPID "1 열 이름인가?

    1

    A)는 그 유효한 SQL 아니다 당신은 ,(Image_ImageID, Props_PropID) 다음이 -.. 당신은 또한 JDBC를 사용할 때 ;으로 문을 종료하지 않는

    B) 당신은 준비된 문을 사용한다 와 원시 사용자 입력을 SQL 문에 삽입하는 대신 자리 표시자를 사용합니다.

    +0

    사용자는 다른 열의 값 목록을 표시하는 JComboBox에서 값을 선택하며 원시 사용자는 여기에 입력하지 않습니다. 아래의 게시물 및 원래 질문의 마지막 라인을 참조하십시오. – Peddler

    +1

    모범 사례를 무시하는 큰 이유처럼 들립니다.) 솔직히 말해서, 사용하지 않을 이유가 없습니다. –

    +0

    Downvoter, 관심있는 댓글? 아니면 누군가 인터넷을 다시 화나게 했나요? –

    1

    나는이 문장의 문제가 여기에 다른 사람이 언급 한대로 또한 INSERTSELECT 문 사이에 , 테이블의 열 이름이 아닙니다, 그리고 때, 당신의 SQL 문에 SELECT 1을 가지고 생각 .

    이 컨텍스트에서 IntImageID 변수의 목적에 대해 확신 할 수 없지만 두 가지 중 하나를 수행하려고합니다.

    1 :

    PropInsert = "INSERT INTO Image_has_Props (Image_ImageID, Props_PropID) 
          SELECT ImageID, PropID FROM Props 
          WHERE PropDescription = '"+StrPropDescription+"'"; 
    

    또는

    2 : 당신은 어떤 경우에, 당신은 뭔가를 원하는 거라고 열이있는 테이블,에서 ImageID를 얻기 위해 노력하고 당신은 '첫 번째 삽입 값으로 IntImageID을 넣어 노력하고, 두 번째 값은이 경우, 그것은 다음과 같은 것, 데이터베이스에서 가져 :

    PropInsert = "INSERT INTO Image_has_Props (Image_ImageID, Props_PropID) 
          ("+IntImageID+", SELECT ImageID, PropID FROM Props 
          WHERE PropDescription = '"+StrPropDescription+"')"; 
    

    난 정말 완전히 확실하지 않다 내가 그것을 테스트 할 수 없기 때문에 내가 두 번째를 올바르게 작성했다면, 기본적으로 IntImageID 변수가 데이터베이스 테이블에 없다면 SELECT 문과 분리되어 있어야한다.

    관련 문제