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

 向着成功一直努力的人 发布于 2022-10-26 04:22

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

4 个回答
  • insert into的tableName是不需要加""的吧

    2022-10-27 00:39 回答
  • 考虑两个问题

    1.你的SQL使用了PreparedStatement,是否服务端直接拿这句SQL进行数据库操作,而非作为PreparedStatement使用?

    2.如果你服务端没问题,那么查询是否能正常查询?考虑一下是不是没有添加事务管理,我以前经常写service时忘记加@Transaction,于是插入删除修改操作全部是执行没提交,不报错,数据库数据没变动,最后才发现忘了加spring的事务管理,你也可以查一下是不是这个问题,当然你不一定用的spring的事务管理,但道理相似

    最后,你直接在Navicat里执行这句肯定是没效果的,都是占位符你想查啥?插入啥?显然是不对的,要想直接试SQL就把占位的改成单引号包起来的测试数据。

    2022-10-27 00:39 回答
  • 如果executeUpdate返回1数据库没有记录,那我只能想到事务了,确认事务有成功提交。

    INSERT into "wchong_test" ("name","age")values(:1,:2)

    :1/:2 感觉是命名参数啊,类似于spring jdbc中的Named Parameter,很显示你直接执行这条SQL是有问题的:1这不是一个正确数据类型,要使用':1'引号括起来。

    2022-10-27 00:39 回答
  • 可能是connection的自动提交被禁用了,如

     conn.setAutoCommit(false);

    可以在executeUpdate增加下面的语句,然后看数据库中是否有记录产生。

    conn.commit();

    另外,oracle看到的带:1 :2的语句,很明显是在java端使用了PreparedStatement,因此这个语句在oracle中是不能直接执行的,可以从v$sql_bind_capture中使用sql_id条件,查找具体绑定变量的值。

    2022-10-27 00:39 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有