Oracle JDBC中的PreparedStatement占位符过多

使用Oracle数据库时,导致ORA-01745(“无效的主机/绑定变量名称错误”)错误的原因有多种。 关于错误ORA-01500到ORA-02098的Oracle 9i文档提供了有关ORA-01745的更多详细信息。 它指出,“原因”是“绑定变量或INTO规范中的冒号后跟一个不合适的名称,也许是一个保留字。” 它还指出“操作”是“更改变量名称并重试该操作。” 但是,在相同的Oracle 12g文档中 ,没有描述ORA-01745的“原因”或“措施”,原因可能是与此消息相关联的原因有多种,并且有多种相应的措施。 在本文中,我将重点介绍可能不太明显的原因之一,以及对该原因采取的相应措施。

ORA-01745的一些常见原因(我将不在本文中重点介绍)包括使用Oracle数据库保留名 ( 保留字 )作为标识符 , 多余或缺少冒号或逗号 ,或尝试绑定结构名(而不是绑定结构名)。变量)到占位符 。

除了上面列出的原因以及可能的其他潜在ORA-01745原因之外,另一个可能导致ORA-01745错误的情况是使用了太多? Oracle数据库的JDBC PreparedStatement中的占位符。 我将在这篇文章中证明多少? 导致此ORA-01745的PreparedStatement中的占位符为655362 16 )。

我以前曾 写过 一篇关于ORA-01795错误的博客 ,该错误是在Oracle SQL IN条件中尝试包含1000个以上的值时发生的。 有多种方法可以解决此限制,一种替代方法可能是使用多个OR来对超过1000个值进行“ OROR 。 通常,这将通过PreparedStatement?来实现? SQL语句中放置的占位符,用于每个OR值。 这种基于PreparedStatement的替代方法使用? 占位符只有在进行“ OR vales数目小于65536时才起作用。

下面的代码清单演示了如何生成针对Oracle HR模式的SQL查询,以使其易于再现过多的ORA-01745错误? 占位符( 可在GitHub上找到完整的代码清单)。

建立指定数量为?准备好的语句 占位符

/*** Constructs a query using '?' for placeholders and using* as many of these as specified with the int parameter.** @param numberPlaceholders Number of placeholders ('?')*    to include in WHERE clause of constructed query.* @return SQL Query that has provided number of '?" placeholders.*/
private String buildQuery(final int numberPlaceholders)
{final StringBuilder builder = new StringBuilder();builder.append("SELECT region_id FROM countries WHERE ");for (int count=0; count < numberPlaceholders-1; count++){builder.append("region_id = ? OR ");}builder.append("region_id = ?");return builder.toString();
}

下一个代码清单演示了基于在最后一个代码清单中构造的查询来构建PreparedStatement的过程,并使用与?的数量相匹配的多个连续整数设置其占位符? 占位符。

配置PreparedStatement? 占位符

/*** Execute the provided query and populate a PreparedStatement* wrapping this query with the number of integers provided* as the second method argument.* * @param query Query to be executed.* @param numberValues Number of placeholders to be set in the*    instance of {@code PreparedStatement} used to execute the*    provided query.*/
private void executeQuery(final String query, final int numberValues)
{try (final Connection connection = getDatabaseConnection();final PreparedStatement statement = connection.prepareStatement(query)){for (int count = 0; count < numberValues; count++){statement.setInt(count+1, count+1);}final ResultSet rs = statement.executeQuery();while (rs.next()){out.println("Region ID: " + rs.getLong(1));}}catch (SQLException sqlException){out.println("ERROR: Unable to execute query - " + sqlException);}
}

下一个屏幕快照显示当数量为?时发生的ORA-01745错误? 应用的占位符为65536。

此示例显示最大数量为? 可以在Oracle SQL语句中使用的占位符。 幸运的是,还有其他方法可以实现这种类型的功能,而没有ORA-01475限制为65536 ? 占位符或1000个IN元素限制导致ORA-01795错误

翻译自: https://www.javacodegeeks.com/2017/11/many-preparedstatement-placeholders-oracle-jdbc.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

webview加载php文件,HYWebview下载自定义文件教程

车机版 HYWebview升级到1.3了多增加了一个进度条多增加了自定义下载URL功能使用教程。浏览器打开DNS地址&#xff1a;103.44.248.95可见 底部有一个 下载链接 和 提货密码 可以输入&#xff01;比如 我们去应用宝官网复制下载链接出来&#xff1a;https://download.sj.qq.com/u…

php-fpm7.0,php-fpm7.0 慢查询设置及说明

环境说明rootubuntu:/home/tb# cat /etc/issue Ubuntu 16.04.2 LTS \n \l rootubuntu:/home/tb# php -v PHP 7.0.15-0ubuntu0.16.04.4 (cli) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies with Zend OPcache…

设计模式 原型模式_设计模式:原型

设计模式 原型模式创新设计模式之一是原型设计模式 。 尽管原型是创造模式&#xff0c;但它在概念上与其他模式有所区别。 我的意思是原型在某种意义上创造了自己。 我将在下面解释。 原型模式的所有魔力都基于Java Object的clone&#xff08;&#xff09;方法。 因此&#x…

oracle回滚事务的关键字,Oracle ROLLBACK语句(回滚事务)

Oracle ROLLBACK语句(回滚事务)在Oracle中&#xff0c;ROLLBACK语句可以用来撤销当前事务或有问题的事务。本教程就将教大家如何使用ROLLBACK语句。ROLLBACK语法ROLLBACK [ WORK ] [ TO [SAVEPOINT] savepoint_name | FORCE string ];参数WORK&#xff1a;可选的。 它被Oracle添…

借助Fargate和EKS,AWS甚至可以实现Cloud-ier和Kuberneties-ier

在本周的re&#xff1a;Invent大会上&#xff0c;AWS宣布了很多很棒的事情。 您应该检查一下他们的页面 &#xff0c;以了解他们正在做的所有新工作的概况–内容很多&#xff0c;而且其中很多似乎立即有用。 如果您想了解更多信息&#xff0c;我的同事凯利安德鲁斯&#xff08;…

oracle sql文字列函数,Oracle 数据库SQL中 decode()函数简介

decode()函数简介&#xff1a;主要作用&#xff1a;将查询结果翻译成其他值(即以其他形式表现出来&#xff0c;以下举例说明)&#xff1b;使用方法&#xff1a;Select decode(columnname&#xff0c;值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)From talbenameWhere …其中…

oracle sysnonym,Oracle权限

oracle的权限 oracle的权限一、权限概述权限是用户对一项功能的执行权力。在Oracle中&#xff0c;根据系统管理方式不同&#xff0c;将权限分为系统权限与实体权限两类。系统权限是指是否被授权用户可以连接到数据库上&#xff0c;在数据库中可以进行哪些系统操作。而实体权限是…

java 8 lambda_Java 8 Lambda演练

java 8 lambda在工作中&#xff0c;我进行了有关Java 8项目lambda的演示&#xff0c;当然还提供了一些简单的代码来说明一些要点。 Java 8的总体原因是&#xff1a; 更简洁的代码&#xff08;适用于只有一种方法和集合的类&#xff09;。 “我们希望代码阅读者在到达lambda表达…

Php的定界符有哪些了,php中定界符

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼PHP中定界符解析定界符写法如下&#xff1a;echo <<这里可以随便放些什么字符&#xff01;HTML; 实现效果&#xff1a;1.PHP定界符的作用就是按照原样&#xff0c;包括换行格式什么的&#xff0c;输出在其内部的东西&#xf…

在JDK 11中启动单文件源代码程序

JEP 330 –启动单文件源代码程序是即将发布的JDK 11&#xff08;18.9&#xff09;发行版中令人兴奋的功能之一。 此功能允许直接使用java解释器执行Java源代码。 源代码在内存中编译&#xff0c;然后由解释器执行。 限制是必须在同一文件中定义所有类。 对于刚开始学习Java并想…

oracle元字符,正则表达式元字符

[more]1、正则表达式中的元字符元字符 意思 例子说明要匹配的字符是一个特殊字符、常量或者后者引用。(后引用重复上一次的匹配) n 匹配换行符匹配( 匹配 () 匹配 )^ 匹配字符串的开头位置 如果A是字符串的第一个字符&#xff0c;^A 匹配 A$ 匹配字符串的末尾位置 如果B是字符串…

Packt和Java Code Geeks提供的$ 5 Java编程书籍!

您好极客&#xff01; 今天&#xff0c;我们为您带来一些激动人心的消息&#xff01; Java Code Geeks和Packt联手为您提供广泛的书籍库每周折扣。 对于开发人员来说&#xff0c;Java仍然是最强大的选择之一&#xff0c;它是定义企业和移动设备的语言。 本周&#xff0c;我们…

oracle12c 端口查看,Oracle12c修改端口号

Oracle12c数据库更改端口号修改端口号的整体步骤1.1、查看当前监听的状态1.2、停止监听1.3、修改监听文件的端口号1.4、修改初始化参数local_listener1.5、重启监听器1.6、修改完毕&#xff0c;使用新端口登录测试实践步骤&#xff1a;1、查看当前监听的状态[oraclelocalhost ~…

源码时代php中级项目,0526PHP班中级项目评比圆满落幕

为了充分发掘同学们开发项目的成功经验&#xff0c;全面提升学员的综合素质&#xff0c;锻炼学员的解说与问题处理能力&#xff0c;源代码教育(源码时代)重庆校区进行了PHP就业班的中级项目评比。项目评比分为演讲、质询、点评及投票评分几个环节&#xff0c;每个环节都精彩纷呈…

SpringHibernate4

1.概述 本文将重点介绍如何使用Spring设置Hibernate 4 –我们将研究如何使用Java和XML配置来使用Hibernate 4配置Spring 3。 当然&#xff0c;该过程的某些部分对于Hibernate 3文章是通用的 。 2. Maven 要将Spring Persistence依赖项添加到项目pom.xml中 &#xff0c;请参阅专…

qt linux 添加库文件路径,linux下qt使用第三方库的那些事

开发库查看工具&#xff1a;$sudo apt-get install pkg-config很多时候我们并不知道自己电脑有没有这个库&#xff0c;所以我们可以使用这个工具来查看自己有哪些工具&#xff0c;或者哪些工具没有。同时&#xff0c;qmake是对这个工具配置支持的&#xff0c;所以我们很多时候很…

xp系统上安装linux系统教程,XP系统如何安装fedora linux双系统?WinXP安装fedora linux双系统的方法...

有位朋友因为想在linux中熟悉下hadoop的配置开发环境&#xff0c;所以就开始于WinXP系统中安装fedora linux双系统&#xff0c;可是操作了很久都没成功。这该如何怎么办呢&#xff1f;接下来&#xff0c;小编就给大家介绍WinXP安装fedora linux双系统的具体方法。1.下载Fedora-…

solr 的maven_使用Maven运行Solr

solr 的maven使用Maven运行Solr Solr是一个开源搜索服务器&#xff0c;它是使用Lucene Core的索引和搜索功能构建的&#xff0c;它可以用于使用几乎任何编程语言来实现可扩展的搜索引擎。 尽管Solr具有许多优点&#xff0c;但建立一个开发环境并不是其中之一。 这篇博客文章描…

linux指定内核位置,ARM linux内核启动时几个关键地址

1. 内核启动地址ZTEXTADDR解压代码运行的开始地址。没有物理地址和虚拟地址之分&#xff0c;因为此时MMU处于关闭状态。这个地址不一定时RAM的地址&#xff0c;可以是支持读写寻址的flash等存储中介。Start address of decompressor. heres no point in talking about vi…

pae扩展内存 linux,Linux内核-内存管理-PAE(物理地址扩展)

Intel 通过在处理器上把管脚数从 32 增加到 36&#xff0c;以提高处理器的寻址能力&#xff0c;使其达到 2^3664GB&#xff0c;然而线性地址的位数仍然是 32 位&#xff0c;为此&#xff0c;需引入一种新的分页机制。从pentium pro 处理器开始&#xff0c;intel引入一种叫做 PA…