往用odbc插入数据库,从oracle里能查到最近执行的sql,但是数据库记录没增加。而且最近执行的那条SQL:INSERT into "wchong_test" ("name","age")values(:1,:2),单独在客户端执行这条SQL会报错:[Err] ORA-01008: not all variables bound。
巴扎黑2017-04-18 10:33:21
등 연결 자동 제출이 비활성화되어 있을 수 있습니다. 으아악
executeUpdate에 다음 문을 추가한 후 데이터베이스에 레코드가 있는지 확인할 수 있습니다.
으아악또한 oracle에서 볼 수 있는 :1:2 명령문은 Java 측에서 분명하게 preparedStatement를 사용하므로 이 명령문은 oracle에서 직접 실행할 수 없습니다. v$sql_bind_capture의 sql_id 조건을 사용하여 해당 값을 찾을 수 있습니다. 특정 바인드 변수.
大家讲道理2017-04-18 10:33:21
executeUpdate
이 1
을 반환하고 데이터베이스에 기록이 없으면 트랜잭션이 성공적으로 제출되었는지 확인하기 위해 事务
만 생각할 수 있습니다.
:1/:2
spring jdbc
의 Named Parameter
과 비슷한 이름을 붙인 매개변수처럼 느껴지는데, 이는 이 SQL을 직접 실행하면 문제가 있음을 나타냅니다. :1
이는 올바른 데이터 유형이 아닙니다. . 따옴표 안에 ':1'
를 사용하세요.
迷茫2017-04-18 10:33:21
두 가지 질문을 생각해 보세요
1. 귀하의 SQL은 ReadyStatement를 사용합니다. 서버는 이 SQL을 ReadyStatement로 사용하는 대신 직접 사용합니까?
2. 서버에 문제가 없으면 쿼리가 정상적으로 작동되나요? 트랜잭션 관리가 추가되지 않았는지 고려해보세요. 서비스 작성 시 @Transaction을 추가하는 것을 자주 잊어서 모든 삽입, 삭제 및 수정 작업이 제출되지 않고 실행되었으며 오류가 보고되지 않았으며 마침내 데이터베이스 데이터가 변경되지 않았습니다. Spring의 트랜잭션 관리를 추가하는 것을 잊어버렸다는 사실을 발견했습니다. 물론 이것이 문제인지 확인할 수도 있습니다. 물론 Spring의 트랜잭션 관리를 반드시 사용할 필요는 없지만 원리는 비슷합니다.
마지막으로 이 문장을 Navicat에서 직접 실행하면 아무런 효과가 없습니다. 무엇을 확인하시겠습니까? 무엇을 삽입할까요? 분명히 이는 잘못된 것입니다. SQL을 직접 테스트하려면 작은따옴표로 묶인 데이터를 테스트하도록 자리 표시자를 변경하세요.