>  Q&A  >  본문

java - 用odbc往oracle插入记录,excuteUpdate返回1,代码无报错,但是数据库里记录没有增加。

往用odbc插入数据库,从oracle里能查到最近执行的sql,但是数据库记录没增加。而且最近执行的那条SQL:INSERT into "wchong_test" ("name","age")values(:1,:2),单独在客户端执行这条SQL会报错:[Err] ORA-01008: not all variables bound。

ringa_leeringa_lee2714일 전553

모든 응답(4)나는 대답할 것이다

  • 巴扎黑

    巴扎黑2017-04-18 10:33:21

    등 연결 자동 제출이 비활성화되어 있을 수 있습니다. 으아악

    executeUpdate에 다음 문을 추가한 후 데이터베이스에 레코드가 있는지 확인할 수 있습니다.

    으아악

    또한 oracle에서 볼 수 있는 :1:2 명령문은 Java 측에서 분명하게 preparedStatement를 사용하므로 이 명령문은 oracle에서 직접 실행할 수 없습니다. v$sql_bind_capture의 sql_id 조건을 사용하여 해당 값을 찾을 수 있습니다. 특정 바인드 변수.

    회신하다
    0
  • 大家讲道理

    大家讲道理2017-04-18 10:33:21

    executeUpdate1을 반환하고 데이터베이스에 기록이 없으면 트랜잭션이 성공적으로 제출되었는지 확인하기 위해 事务만 생각할 수 있습니다.

    으아아아

    :1/:2 spring jdbcNamed Parameter과 비슷한 이름을 붙인 매개변수처럼 느껴지는데, 이는 이 SQL을 직접 실행하면 문제가 있음을 나타냅니다. :1 이는 올바른 데이터 유형이 아닙니다. . 따옴표 안에 ':1'를 사용하세요.

    회신하다
    0
  • 迷茫

    迷茫2017-04-18 10:33:21

    두 가지 질문을 생각해 보세요

    1. 귀하의 SQL은 ReadyStatement를 사용합니다. 서버는 이 SQL을 ReadyStatement로 사용하는 대신 직접 사용합니까?

    2. 서버에 문제가 없으면 쿼리가 정상적으로 작동되나요? 트랜잭션 관리가 추가되지 않았는지 고려해보세요. 서비스 작성 시 @Transaction을 추가하는 것을 자주 잊어서 모든 삽입, 삭제 및 수정 작업이 제출되지 않고 실행되었으며 오류가 보고되지 않았으며 마침내 데이터베이스 데이터가 변경되지 않았습니다. Spring의 트랜잭션 관리를 추가하는 것을 잊어버렸다는 사실을 발견했습니다. 물론 이것이 문제인지 확인할 수도 있습니다. 물론 Spring의 트랜잭션 관리를 반드시 사용할 필요는 없지만 원리는 비슷합니다.

    마지막으로 이 문장을 Navicat에서 직접 실행하면 아무런 효과가 없습니다. 무엇을 확인하시겠습니까? 무엇을 삽입할까요? 분명히 이는 잘못된 것입니다. SQL을 직접 테스트하려면 작은따옴표로 묶인 데이터를 테스트하도록 자리 표시자를 변경하세요.

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:33:21

    insert into의 tableName에 ""를 추가할 필요는 없겠죠?

    회신하다
    0
  • 취소회신하다