解决ORA-01008: 并非所有变量都已绑定(详解问题所在)

解决ORA-01008: 并非所有变量都已绑定(详解问题所在)将executeUpdate(sql)或executeQuery(sql)括号中的sql删除。问题代码:publicstaticvoidmain(String[]args)throwsException{Connectionconnection=null;Statementstatement=null;connection=DBHelper.getConnection();Stringsql=”up

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

将executeUpdate(sql)或executeQuery(sql)括号中的sql删除。

问题代码:

public static void main(String[] args) throws Exception{ 
   
        Connection connection = null;
        Statement statement = null;
        connection = DBHelper.getConnection();
        String sql = "update emp set deptno= ? where ename=? ";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setInt(1,10);
        preparedStatement.setString(2,"test");
        int i = preparedStatement.executeUpdate(sql); // 增删改
        if (i>0){ 
   
            System.out.println("success");
        }else { 
   
            System.out.println("failure");
        }
        DBHelper.close(statement,connection);
    }

报错信息:

Exception in thread “main” java.sql.SQLException: ORA-01008: 并非所有变量都已绑定

解决:

首先了解:PrepareStatement接口(面向接口编程),prepareStatement对象会预编译sql语句,这样可以防止多次执行sql语句带来的性能大开销。
我们使用占位符 ? 对sql语句进行简化,但与此同时我们需要调用prepareStatement对象的setXxx()方法去设置占位符所相对应的信息。

String sql = "update emp set deptno= ? where ename=? ";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setInt(1,10);
        preparedStatement.setString(2,"test");

最后,我们通过prepareStatement调用excuteUpdate()或excuteQuery()方法分别进行返回增删改的行数或返回查询的Result结果集。

注意:这里不需要将sql传入excuteUpdate()或excuteQuery()小括号中。这里也是问题所在。
原因:很简单,你直接把String sql = “update emp set deptno= ? where ename=? “;传给增删改查方法,?它无法识别。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196364.html原文链接:https://javaforall.net

(0)
上一篇 2025年9月28日 下午1:22
下一篇 2025年9月28日 下午2:01


相关推荐

  • 由StreamWriter.WriteLine 引发对C#多线程的深入思考(一)

    http://blog.csdn.net/nndtdx/article/details/6789810首先,StreamWriter线程安全么?答:StreamWriter的构造以及StreamWriter.WriteLine(string)都是非线程安全的我们封装两个写日志的方法。底层都是由StreamWriter.writeline来实现.一个加锁,一

    2022年4月8日
    191
  • 论文外文文献怎么找_外文文献怎么翻译

    论文外文文献怎么找_外文文献怎么翻译论文参考文献的写作体现了作者对科学研究的态度和对文献作者的尊敬的优良品德,基于java网上购物论文英文的参考文献要怎么写呢?来看看学术参考网的小编整理的文献,希望给大家在写作当中带来帮助。基于java网上购物论文英文的参考文献:[1]刘鑫.基于JSP的网上购物系统研究与设计[D].北京:北京邮电大学,2013:42-43.[2]孔祥盛.MySQL数据库基础与实例教程[M].北京:人民邮电大学出版社…

    2022年9月29日
    4
  • class文件和dex文件「建议收藏」

    class文件和dex文件「建议收藏」Class文件1、什么是class文件能够被JVM识别,加载并执行的文件格式。2、class文件的生成![这里写图片描述](https://img-blog.csdn.net/20180817160829200?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RldmVsb3BBbmRyb2lk/font/5a6L5L2T/f…

    2022年6月27日
    32
  • atitit 短信接口规范与短信解决方案.docx

    atitit 短信接口规范与短信解决方案.docx

    2022年2月22日
    61
  • linux文件权限754表示,Linux命令chmod修改文件权限 777和754方法

    linux文件权限754表示,Linux命令chmod修改文件权限 777和754方法在 linux 操作系统下 使用 shell 命令来操作 常用下面这条命令 chmod777 文件或目录示例 chmod777 etc squid 运行命令后 squid 文件夹 目录 的权限就被修改为 777 可读可写可执行 如果是 Ubuntu 系统 可能需要加上 sudo 来执行 sudochmod777 etc squidLinux 系统中 每个用户的角色和权限划分的很细致也很严格 每个文件

    2026年3月26日
    2
  • 视频监控中NVR录像机NTP校时配置(京准)

    视频监控中NVR录像机NTP校时配置(京准)NTP校时通过设置NTP服务器地址、NTP端口号和校时时间间隔,设备即按照设置每隔一段时间校时一次。NVR3.0界面路径:主菜单—系统配置—网络配置——NTP海康威视iVMS-4200校时、手动校时、定位校时、NTP校时四种方法任你选NVR4.0界面路径:系统管理—网络配置—基本配置—NTP注意:NTP校时,需要设备接入外网或者在局域网中有NTP软件组建NTP服务器。定位校时…

    2022年6月22日
    493

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号