使用 OraclePreparedStatement 通过 Tomcat 8.5.9 从 java 8 写入 oracle 11.2 数据库?

2023-12-23

我在使用 Java 8 和 Tomcat 8.5.9 写入 Oracle 11.2 数据库时遇到问题。实际上,以下代码对于写入存储过程来说效果很好,但是在直接写入数据库时​​出现错误。

Context initCtx = new InitialContext(); 
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource) envCtx.lookup("jdbc/myPool");
conn = ds.getConnection(); 

// The following works fine:   
cs = conn.prepareCall( "{call my_proc (?,?)}" );
cs.setString(1, var1);
cs.registerOutParameter(2, Types.VARCHAR); 
cs.execute();
out_var2 = cs.getString(2);

// The following results in a ClassCastException error:
sql ="INSERT INTO MY_TABLE1 (my_value1, my_value2) VALUES (?,?)";
ps = (OraclePreparedStatement) conn.prepareStatement(sql);

// The following results in the same error, but is an example of using Oracle extensions for setXXX():
sql="INSERT INTO MY_TABLE2 (my_value3, my_value4) VALUES (?,?)";
ps = (OraclePreparedStatement) conn.prepareStatement(sql);       
for (ii=0; ii<var100.length; ii++) {
     ps.setBinaryFloat(3,  my_value3[ii]);
     ps.setBinaryDouble(4, my_value4[ii]);
     ps.addBatch();
}
ps.executeBatch();

错误是:java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement cannot be cast to oracle.jdbc.OraclePreparedStatement.

我最近从 GlassFish 切换到 Tomcat。之前适用于 Glassfish 的代码是:

OracleDataSource ods = ds.unwrap(OracleDataSource.class);
OracleConnection conn = (OracleConnection) ods.getConnection();
conn = ds.getConnection();
sql_a ="INSERT INTO MY_TABLE (my_value1, my_value2) VALUES (?,?)";
ps_a = (OraclePreparedStatement) conn.prepareStatement(sql_a);

但它给出了错误,java.lang.NullPointerException与雄猫。

我已经使用以下链接作为指导配置了我的 tomcat 文件:

https://tomcat.apache.org/tomcat-8.5-doc/jndi-datasource-examples-howto.html https://tomcat.apache.org/tomcat-8.5-doc/jndi-datasource-examples-howto.html

特别是关于Oracle 8i, 9i, & 10g(上下文配置和 web.xml)。

知道如何在直接写入数据库时​​消除 Tomcat 错误,同时又允许上述代码在写入存储过程时继续工作吗?


这就是我在 Tomcat 中的工作方式:

(a) 在context.xml中定义资源,并将其放置在webapps//META-INF/context.xml下

<Context>
<Resource name="jdbc/orcldriver_dbcs" auth="Container"
   type="javax.sql.DataSource"
   driverClassName="oracle.jdbc.OracleDriver"
   username="hr"
   password="hr"
   url="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(HOST=myhost)(PORT=1521)(PROTOCOL=tcp))(CONNECT_DATA=(SERVICE_NAME=myorcldbservicename)))" 
/>
</Context>

(b) 在 servlet 中,引用如下所示的资源。

ctx = new InitialContext();
Context envContext = (Context) ctx.lookup("java:/comp/env");

// Look up a data source
javax.sql.DataSource ds
          = (javax.sql.DataSource) envContext.lookup ("jdbc/orcldriver_dbcs");


// With AutoCloseable, the connection is closed automatically.
      try (OracleConnection connection = (ds.getConnection()).unwrap(oracle.jdbc.OracleConnection.class)) 
{

....
doSQLWork();
....
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 OraclePreparedStatement 通过 Tomcat 8.5.9 从 java 8 写入 oracle 11.2 数据库? 的相关文章

  • 如何安装 C++ 的 VOCE?

    我正在尝试安装 VOCE api 它是为 C 和 Java 构建的语音识别 API 这是我第二次使用外部 C 库 也是第一次使用 Java C api 语音链接 http voce sourceforge net http voce sou
  • Spring Rest-API - 403 禁止错误响应

    我是 Spring 新手 我正在编写 REST API 我收到 403 删除 放置禁止错误 以下是我正在处理的示例 RequestMapping value noteId method RequestMethod PUT public Re
  • 无法让远程 EJB 与 Wildfly 上的 EJB 客户端 API 配合使用

    我目前正在努力让远程 EJB 调用在 wildfly 8 x 和 9 x 上工作 详细来说 它是关于使用 EJB 客户端 API 方法从独立客户端应用程序 而不是从另一个应用程序服务器 进行远程调用 远程命名方法适用于我 但不适用于我的场景
  • 无法在 SQL Developer 中打开 View->DBA 菜单(已安装 Oracle 12C 标准版)

    我已经安装了Oracle 12C标准版 那里一切正常 我还连接了Oracle SQL Developer Client 4 0 从中我可以访问表 索引等 我试图通过单击 View gt DBA 菜单从 SQL Developer Clien
  • UnsupportedOperationException:特权进程中不允许使用 WebView

    我在用android sharedUserId android uid system 在我的清单中获得一些不可避免的权利 从 HDMI 输入读取安卓盒子 http eweat manufacturer globalsources com s
  • 嵌套枚举是静态的吗?

    读书时这个问题 https stackoverflow com questions 25011061 why can enum implementations not access private fields in the enum cl
  • Log4j 未使用属性文件找到自定义附加程序

    我正在尝试使用以下 XML 属性文件在 Eclipse 插件项目中配置 log4j 其中包括一个名为 EclipseLoggingAppender 的自定义附加程序
  • java中main的返回类型

    我想知道为什么java中main方法只有void返回类型 public static void main String args 为什么main方法除了void之外没有其他返回类型 Thanks 简短的回答是 因为这就是语言规范 http
  • Java中通过FTP创建文件夹层次结构

    Java 是否有现成的功能可以在远程 FTP 服务器上创建文件夹层次结构 Apache Commons 确实提供了 FTP 客户端 但我找不到创建目录层次结构的方法 它确实允许创建单个目录 makeDirectory 但创建整个路径似乎并不
  • Ubuntu 的打包 - Web 应用程序

    Web 应用程序没有与 C 或类似文件不同的 make 文件 但是 它需要放置在特定的目录中 例如 var www 我是 Linux 打包新手 所以我的问题是 如何将我的应用程序打包到 deb 中 以便在安装时将其放入 etc myprog
  • Apache HttpClient 执行时会在所有 HTTP 5XX 错误上抛出 IOException 吗?

    The Apache HttpClient 文档 http hc apache org httpcomponents client ga httpclient apidocs org apache http client HttpClien
  • 如何创建从表中最大值开始的 Oracle 序列?

    尝试在 Oracle 中创建一个以特定表中的最大值开始的序列 为什么这不起作用 CREATE SEQUENCE transaction sequence MINVALUE 0 START WITH SELECT MAX trans seq
  • 在同一台计算机上设置 JBoss 的多个实例

    我在 JBoss 社区中找到了下一页 http www jboss org community wiki ConfigurePorts http www jboss org community wiki ConfigurePorts 有下一
  • 我们可以用java定制一个垃圾收集器吗?

    我们知道java的垃圾收集器是一个低优先级线程 在java中我们可以创建任何具有高优先级的线程 那么是否有可能拥有我们自己定制的具有可变优先级的垃圾收集器线程 我们可以根据内存管理的级别进行设置 有人尝试过吗 如果是的话 您能分享一些关于如
  • Jar Manifest 文件的使用混乱

    我正在阅读使用 jar 工具打包 java 应用程序 我注意到 META INF 目录下创建了一个清单文件 对于一个简单的应用程序来说 感觉它没有任何作用 我在 stackoverflow 上搜索以了解 Manifest 文件的用法 我碰到
  • Java中如何限制文件大小

    我正在我的应用程序中创建一个文件 并继续向该文件中写入一些内容 但是当我的文件达到一定大小 比如说 100 行 后 我想删除第一行并将新行写入底部 要求是我的文件应该受到限制 但它应该保留我写入文件的最新内容 请告诉我在Java中是否可行
  • Google App Engine数据存储区字符串编码问题

    你好 我正在使用 Google App Engine 进行一个项目 并且需要存储一些字符串 我正在使用 Java 和JDOHelper getPersistenceManagerFactory transactions optional 在
  • JTable中动态加载大量数据

    这是我的问题 我目前有一个 JTable 其中包含 5 000 到超过 200 000 行 你知道我要说什么了 数据已经加载到内存中了 这不是问题 但是如何 我可以创建一个高效的 JTable 以便它只加载以下行 是可见的 并且任何事件仅作
  • 如何在jpa中共享EntityManagerFactory

    我是 jpa 的新手 这是场景 我正在开发一个 Web 应用程序 其中 多个用户可以登录 当 user1 注销时 我正在使用下面的代码 public static void closeEntityManagerFactory if enti
  • JBoss 5 截断 base64 cookie 字符串的尾部 =

    从 JBoss 4 升级到 JBoss 5 后 我注意到最烦人的回归 它截断 base64 cookie 值的尾部等号 我花了很长时间才明白问题不是我的代码而是 JBoss 的 我用 google 搜索了一下 发现这是一个已知的问题issu

随机推荐

  • 在 JavaScript 中声明多个变量

    在 JavaScript 中 可以像这样声明多个变量 var variable1 Hello World var variable2 Testing var variable3 42 或者像这样 var variable1 Hello Wo
  • 使用长时间运行的后台消费者任务时 Task.Factory.StartNew 中的静默异常?

    这通知未处理的异常 new Thread gt throw new Exception Start 这不会 至少在您等待 检索结果之前 Task Factory StartNew gt throw new Exception 为什么 抛出异
  • 测试 Django 电子邮件后端

    在我的 settings py 中 我输入 EMAIL BACKEND mailer backend DbBackend 所以即使从from django core mail import send mail the send mail函数
  • Coq 平等实现

    我正在编写一种玩具语言 其中 AST 中的节点可以有任意数量的子节点 Num has 0 Arrow有 2 个 等等 您可以致电这些接线员 此外 AST 中可能只有一个节点被 聚焦 我们对数据类型进行索引Z如果它有焦点 或者H如果没有 我需
  • 在 gpshell 中更改 Global Platform 默认密钥后,java 卡管理器身份验证失败

    我想更改用于加载小程序和向卡管理器发送安全消息的全局平台默认密钥 我可以使用以下命令成功更改我的金雅拓默认 GP 卡密钥 mode 211 enable trace establish context card connect reader
  • 这个 GNU 对三元运算符的扩展有多广泛?

    这是根据以下规则对三元运算进行的 GNU 扩展 维基百科 https en wikipedia org wiki 3F C iMyVal iVal iDft 虽然我完全知道这是一个 GNU 扩展 但有时使用这种特殊语法可能会非常方便 那么
  • 通用工厂方法的类型提示

    我很好奇是否可以通过 Python 中的类型参数推断泛型类型 用于类型提示 例如 考虑一个 相当愚蠢的 工厂方法 from typing import TypeVar Type T TypeVar T class Test1 object
  • Amazon SES 电子邮件地址未经验证

    我从亚马逊服务器开始 开始研究SES 我正在使用 asp net C 并制作了基于代码的教程 我已经检查了域 还检查了将在其中运行测试的电子邮件 因此 当我运行代码时 它会生成以下错误消息 事务失败 服务器响应为 消息被拒绝 电子邮件地址未
  • C++ 函数返回引用

    为什么我不能 不应该将对局部变量的引用返回给函数 是不是因为函数执行完毕临时变量就自动销毁了 const string wrap string s1 const string s2 string temp temp s2 s1 s2 ret
  • Typescript 函数返回类型基于可选参数的存在,而不使用函数重载

    打字稿游乐场 https www typescriptlang org play code C4TwDgpgBAKgmgBQKIH0CMUC8UBE9no4BQoksiqATFrvlcSeNAMIDyAcgCICSM3HNHGy69 7Bg
  • 无法设置浮动操作按钮的渐变背景

    我试图将浮动操作按钮的背景设置为渐变 我已经看到了很多解决方案 但没有一个适合我 无论我尝试什么 它都会向我显示一个黑色的操作按钮 我尝试过将背景设置为彩色 但这也不起作用 我正在尝试创建底部导航栏 My code
  • 如何在 Mono for Android (monodroid) 和 MonoTouch 中使用本机 C++ 库

    我有兴趣使用 Mono for Android 和 MonoTouch 来构建可以利用我拥有的大量 C 本机库的移动应用程序 我可以获得一些有关如何调用方法或将代码合并到 iOS 或 Android 上的最终移动应用程序中的具体说明吗 我在
  • 如何在 C# 中打印用户的输入? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 嘿 我刚刚开始 C 课程 所以我对编程还很陌生 我在打印用户的输入时遇到问题 当我要求用户输入本周跑的英里数时 它会显示输入 然后
  • THREE.js - 旋转移动 3D 球

    我是 THREE js 的新手 对物理学的了解非常少 但我正在尝试构建一个足球游戏引擎 从顶部看 而现在我正在努力处理球的运动 当尝试将球从一侧移动到另一侧时 旋转始终面向一个方向 我不明白如何使其沿其移动方向旋转 我添加了一个简单的代码来
  • CKEditor 中不可删除的元素

    我想知道是否有办法使 CKEditor 4 中的元素 不可删除 我可能有一些像这样的 HTML div class content div class gallery div div 在这种情况下 gallery应该无法删除 content
  • 更新 iPhone 上表格单元格中的值

    如果我在 iPhone 应用程序中设置了一个包含多行的 tableView 我如何才能只更新其中一行 我知道它们在进入视图时会手动刷新 但为了争论计时器倒计时 我希望推出更新 Thanks 感谢您的回答 我找到了另一种方法 通过这样调用 N
  • NuGet 在构建开始之前恢复 PostSharp 包

    我正在使用 PostSharp 并且我的项目文件中有以下目标描述
  • 添加子视图动画

    我有主 UIView 在其中显示不同的数据 然后我放了一个按钮 它显示子视图 如下所示 IBAction buttonClicked id sender UIView newView UIView alloc initWithFrame C
  • 我如何确保我的秘密检索是安全的?

    目前 我正在使用 Terraform 和 Aws Secrets Manager 来存储和检索机密 我想了解我的实施是否安全 如果不安全 如何才能使其更安全 让我用我的尝试来说明 In secrets tf我创建一个像这样的秘密 这需要通过
  • 使用 OraclePreparedStatement 通过 Tomcat 8.5.9 从 java 8 写入 oracle 11.2 数据库?

    我在使用 Java 8 和 Tomcat 8 5 9 写入 Oracle 11 2 数据库时遇到问题 实际上 以下代码对于写入存储过程来说效果很好 但是在直接写入数据库时 出现错误 Context initCtx new InitialCo