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…

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

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

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

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

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

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

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

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

java嵌入式db_Java DB嵌入式模式

java嵌入式dbJava DB是基于Java编程语言和SQL的关系数据库管理系统。 这是Apache软件基金会的开源Derby项目的Oracle版本。 Java SE 7 SDK中包含Java DB。 Java DB有两个部署选项&#xff1a; Embedded和Network Server 。 这篇文章是关于嵌入式部署或模式的。 1.嵌入式 在嵌…

群晖备份linux分区,数据丢失的后悔药,群晖NAS备份方案详解

“秒速开机”——据说90%的人都是因为这句话而知道的SSD固态硬盘。相比于机械硬盘&#xff0c;SSD固态硬盘开机快、关机快、打开软件快、载入数据快、拷贝快、删除也快——既快乐、又爽快&#xff0c;更是大块人心!然而&#xff0c;SSD固态硬盘已经可以完全取代机械硬盘了吗&am…

tg3269c网卡驱动linux,TP-Link3269C网卡驱动官方版

TG-3269C驱动是一款能够安装于由普联发布的无线网卡驱动&#xff0c;通过此安装驱动我们手机和其他无线设备才能连接上无线网卡并进行上网&#xff0c;同时如果你的网卡经常出现断开和重连、网络不稳定等情况可以通过重新安装驱动&#xff0c;查看是否是硬件的问题&#xff0c;…

使用Spring Security,Thymeleaf和Okta保护Java应用程序的安全

永不再构建身份验证 –喜欢构建用户管理&#xff1f; 使用Okta&#xff0c;您可以在几分钟内为您的应用程序添加社交登录&#xff0c;多因素身份验证和OpenID Connect支持。 立即创建一个免费的开发者帐户。 在构建Java应用程序时&#xff0c;用户管理是至关重要的考虑因素。 …

红旗linux添加usb无线网卡,在Ubuntu 8.10中安装无线网卡RTL8187SE驱动

本人的笔记本是微星的Wind U90&#xff0c;自带的无线网卡是RTL8187SE。这款无线网卡在一般的Linux下是没有驱动的&#xff0c;微星的官方也仅仅提供在OpenSUSE下的驱动。为了在我的Ubuntu下使用这个网卡&#xff0c;只能自己动手了。还好&#xff0c;有了互联网上各位大侠和微…

将Google reCaptcha与Spring Boot应用程序结合使用

介绍 Google的reCaptcha是一个用于防止漫游器向您的公共表单提交数据或访问您的公共数据的库。 在本文中&#xff0c;我们将研究如何将reCaptcha与基于Spring Boot的Web应用程序集成 设置验证码 您应该从管理面板创建API密钥。 您必须创建一个示例应用程序&#xff0c;如下所…

探索 HTTP 请求的世界:get 和 post 的奥秘(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

linux 书签管理工具,在书签管理工具中使用Ubuntu字体

通过便捷书签管理程序(Bookmarklet&#xff0c;一种在浏览器中存放书签URL地址的应用程序)来在大多数的网站上推广使用Ubuntu系统的默认字体。——读者米格尔费尔南迪斯米格尔在他的想法产生之前告诉我们说&#xff1a;“我发现Ubuntu系统的字体在提高可读性上超过了绝大多数的…

linux18.2安装界面,Ubuntu 18.10下安装Grub Customizer 5.1.0配置grub2图形化界面

配置Grub2/burg引导装载程序Grub Customizer 5.1.0新增加对Ubuntu 18.10的支持&#xff0c;我们可以用PPA源来安装&#xff0c;同时还支持Ubuntu 18.04、16.04、14.04。Grub Customizer简介Grub Customizer是用来配置Grub/burg引导装载程序的图形工具&#xff0c;此次发布的5.1…

使用Eclipse和Open Liberty的Java EE 8上的Java 9

几周前&#xff0c;我写了一篇文章&#xff0c;标题为哪个IDE和服务器支持Java EE 8和Java9 &#xff0c;着眼于Java 9和Java EE 8之间的当前运行状态。您可以期待事情发展很快&#xff0c;我们现在有了一些alpha和支持Java 9和Java EE 8的开发版本。这些是– Payara 5 –适用…

Java命令行界面(第28部分):getopt4j

getopt4j的页面将其描述为“一个根据GNU样式解析命令行参数的库。” 然后&#xff0c; 页面介绍getopt4j &#xff1a;“getopt4j库旨在以与glibc &#xff08;GNU C运行时库&#xff09;中的C getopt&#xff08;&#xff09;函数相同的方式解析命令行选项。 与原始产品相比&a…

新版ipados可以编辑C语言吗,iPadOS新增了五个有用的功能,看你需不需要

主屏幕上的可自定义小部件苹果通过“ iOS 14”对“小工具”进行了大修&#xff0c;引入了新的设计&#xff0c;功能和自定义选项。这些“小部件”也出现在在iPhone上&#xff0c;您可以抓住任何小部件并将其添加到应用程序图标旁边的“主屏幕”中&#xff0c;但是不能在“ iPad…

c 语言已知两点求第三点,已知3点座标,求第一点到第二点和第三点构成的直线的距离。...

已知3点座标&#xff0c;求第一点到第二点和第三点构成的直线的距离。以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;已知3点座标&#xff0c;求第一点到第二点和第三点构成的直线的距离。解…