2013-03-04 1 views
1

activeestate라는 필드가있는 bcfsite라는 테이블이 있습니다.Java를 사용하여 oracle에서 업데이트 및 삭제

update bcfsite set activestate = 1 where bscname like '%B361Z%' 

나는 위의 쿼리의 SQLPLUS 또는 Oracle SQL Developer를 실행하면 아무 문제없이 잘 작동하지만 나는이 코드를 사용하여 Java에서 그것을 실행하면

String sqlstrString = "update bcfsite 
         set activestate = 0 where bscname like '%B361Z%' "; 
PreparedStatement ps = d.prepareStatement(sqlstrString); 
ResultSet rs = ps.executeUpdate(); 

또는이 코드를 :

ResultSet rs = DBConnection.RunStatement(sqlstrString, d); 

내 프로그램이 보류 중이며 업데이트 명령문을 전달하지 않습니다.

테이블과 열을 변경하고 업데이트 대신 삭제를 시도했지만 여전히 동일한 문제가 발생합니다.

+2

자바'sqlstrString'의 끝에';'를 추가하십시오 –

+0

데이터베이스'Connection'에 자동 커밋이 'true'로 설정되어 있습니까? – JoshDM

+0

스택 트레이스가 없습니까? 그냥 걸려 (보류?)? 내가 추가 할 때 –

답변

1

나는 ... 코멘트에 충분한 공간이 없기 때문에이 응답 박스 교체 매개 변수를 사용하여이 작업을 수행하는 올바른 방법입니다

String qString = "update bcfsite set activestate = 0 where bscname like ?"; 

을 걸었습니다. 전달 된 같은 운영자 모두를 사용하는 것은 VARCHAR2는 지금까지 오라클이 너무 관한 한 때 기억

ps.setString(1,"%B361Z%"); 

가 다시는이 작업을 수행하는 올바른 방법입니다. 오라클 쿼리 파서가 올바른 쿼리를 볼 수 있도록() 올바른 마크 업을 적용

update bcfsite set activestate = 0 where bscname like '%B361Z%' 

setString의 : JDBC를 통해 오라클에 전달

결과 문자열처럼 보일 것이다.

"?"기호가있는 검색어 그 (것)들에서 단순히 문자열 교체되지 않습니다. 문이 서버에 의해 구문 분석 된 다음 매개 변수가 서버에 전달됩니다.

BTW 이것은 몇 군데에서 대답되었습니다. SO 검색 방법을 배우면 응답 시간이 상당히 단축되고 시간 낭비가되지 않습니다.

0

이 방법을 시도해보십시오

String sqlstrString = "update bcfsite " + 
         "set activestate = 0 where bscname like '?'"; 
PreparedStatement ps = d.prepareStatement(sqlstrString); 
ps.setString(1, "%"+"B361Z"+"%"); 
ResultSet rs = ps.executeUpdate(); 

을 그리고 두 번째 방법은 다음과 같습니다

...set activestate=0 where bscname like CONCAT('%', ?, '%')"; 
... 
ps.setString(1, "B361Z"); 
+0

나는 이것을 시도하지만 다른 것은 없다. – Elsiete

+0

물음표 주위에 작은 따옴표로 한번 더 시도하십시오. –

+0

감사합니다 @ Costis Aivalis 나는 당신의 최신 접근 방식을 시도하지만 여전히 프로그램은 성명을 전달하지 않습니다 : ( – Elsiete

0

당신이 다음 시도 할 수 있습니다 방법을 먼저 자바 코드를 통해이어야 하나 개의 행을 업데이트 지우는,하지 야생 문자가 단일 행을 업데이 트하려고합니다.

String sqlstrString = "update bcfsite 
         set activestate = 0 where bscname=?"; 
PreparedStatement ps = d.prepareStatement(sqlstrString); 
ps.setString(1, "B361Z"); 
ResultSet rs = ps.executeUpdate(); 

결과를 게시하시기 바랍니다 .. 연결/다른 스키마와 같은 다른 문제를 배제 할 수있다.

+0

난 그냥 한 행을 업데이 트하는 야생 문자없이 노력하지만 여전히 프로그램 – Elsiete

+0

은이 테이블 또는 스키마의 모든 테이블에 대한 DML 작업에 문제가 있습니까? 코드를 통해이 테이블에서 select를 수행 할 수 있습니까? – AmitN

+0

예 선택하고 삽입 할 수 있지만 삭제와 관련된 문제가 있습니다. 업데이트 – Elsiete

관련 문제