ORA-01008:并非所有变量都已绑定-解决办法

ora,并非,所有,变量,绑定,解决办法 · 浏览次数 : 0

小编点评

**复盘现象:** - 数据库连接异常 **问题提出解决办法:** 1. **检查SQL语句中的变量个数是否与paraCondition中的元素数量一致?** 2. **仔细检查paraCondition的处理逻辑,确保没有出现NULL值。** 3. **确认在“//执行SQL”中正确传递参数?** 4. **分析异常信息,是否有其他异常出现?** 5. **尝试使用其他连接数据库方式进行测试,例如jdbc:** ```java Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@//localhost:1521/XE","root","password"); ``` 6. **如果以上方法仍然无法解决问题,请检查数据库连接是否正常,以及SQL语句中的变量是否被正确绑定。**

正文

        近期批量处理数据,后台用JAVA编写,连接Oracle数据库,程序运行报ORA-01008问题。解决这个问题时遇见的坑较多,下面复盘现象、问题提出解决办法,希望能帮到遇见同类问题的你。

调试问题:

后台代码:

   /**
     * 插入操作的封装
     * **/
    public static void insertRow(String sql,List<Object> paraCondition)  {
//        1建立数据库连接
        Connection conn=JDBCUtils.getConnection();
        //2sql传入,传入的参数带变量,将SQL绑定变量处理
        try {
            //3为sql语句赋值
            PreparedStatement pstmt = conn.prepareStatement(sql);
            if(paraCondition!=null && paraCondition.size()>0){
                for(int i=0;i<paraCondition.size();i++){
                    pstmt.setObject(i+1,paraCondition.get(i));
                }
            }
            pstmt.execute(sql);//执行SQL
        }catch (SQLException e){
            e.printStackTrace();
        }
    }

解决办法:

1、要求绑定变量sql中的个数与paraCondition中的个数要一致。

2、paraCondition处理的有问题,不要有NULL值

3、注意上面代码“//执行SQL”中传入了参数“sql”,注意此处不要传参。

我遇见的坑是这三个,希望帮到寻觅原因的你。

与ORA-01008:并非所有变量都已绑定-解决办法相似的内容:

ORA-01008:并非所有变量都已绑定-解决办法

近期批量处理数据,后台用JAVA编写,连接Oracle数据库,程序运行报ORA-01008问题。解决这个问题时遇见的坑较多,下面复盘现象、问题提出解决办法,希望能帮到遇见同类问题的你。 调试问题: 后台代码: /** * 插入操作的封装 * **/ public static void insert

[转帖]ORA-00054:resource busy and acquire with NOWAIT specified or timeout expired

一、故障描述: 早晨接到个开发人员的问题,truncat table T_USER_LABEL表时,报错: ORA-00054:resource busy and acquire with NOWAIT specified or timeout expired,如下图。按照字面意思,是资源忙,被占用

[转帖]一次ORA-3136的处理

https://oracleblog.org/working-case/deal-with-ora3136/ 最近收到一个告警,用户说数据库无法连接,但是从监控上看,oracle的后台进程已经侦听进程还是在的,没有任何的alert。 登录数据库,已经恢复正常,但是在数据库的alertlog中发现大量

MyBatis ORA-01465: 无效的十六进制数字

MyBatis 在插入 Oralce 时报:ORA-01465: 无效的十六进制数字 解决方法: # 插入或更新时 String -> BLOB字段:RAWTOHEX(#{字段名}) String -> DATE:to_date(#{字段名},'yyyy-mm-dd hh24:mi:ss') # 查

[转帖]cx_Oracle.DatabaseError: ORA-28040

背景: python第三方库cx-Oracle连接Oracle数据库报错 ORA-28040 cx_Oracle.DatabaseError: ORA-28040: No matching authentication protocol 解决方法: 1- 安装驱动 【找不到上传附件的地方后补】 2-

CTAS建表时报错ORA-65114

环境: Oracle 19.16 多租户架构 1.问题现象: SQL> create table T1 as select * from v$active_session_history * ERROR at line 1: ORA-65114: space usage in container i

记录一则ADG备库报错ORA-29771的案例

有客户找到我这边咨询,说他们的一套核心ADG库在业务高峰期报错,因为业务做了读写分离,其备库也实际承担读业务,所以备库故障也会对业务产生影响。 这里也要提醒大家,做读写分离,如果读库出现故障的情况,要有切换到主库的应急方案考虑进去。 客户这里自己通过重启备库暂时解决,但担心故障再现,所以非常着急要分

小知识:使用errorstack定位特定问题

有客户遇到ORA-2289的报错,同事协助去现场排查,我帮着远程共同check下。 客户只是应用端报出的错误,为了进一步定位,服务端需要开errorstack协助定位具体问题。 下面就以这个ORA-2289为例,示范下errorstack的使用方法。 --开启errorstack alter sys

ADG无法切换:报错 ORA-16467

现象: ADG无法切换:验证时就报错 ORA-16467 记录问题,顺便展现一次troubleshooting的心路历程。 具体查询: 在主库操作, @primary 切换验证: alter database switchover to demorac verify; 报错ORA-16467: SQ

打开PDB报错ORA-30013

多租户架构,之前还在做运维的时期接触也不多。遇到多租户问题,第一反应是有些发虚的。 但实际很多问题很简单,也容易解决。本文就是一个例子。 问题:RAC节点2打开所有PDB时,报错ORA-30013。 SQL> alter pluggable database all open; alter plug