解决java在调用存储过程中需要传递clob字段时存在问题

在迁移系统到别的服务器的时候出现了一个神秘的问题:

在本地开发和其他服务器上部署系统的时候,使用相同的JDK、ORACLE驱动、TOMCAT,其中又一个操作是调用oracle数据库的存储过程,需要传递一个clob类型的入参,在本地测试没有问题,上传到服务器时就没法执行通过以下代码段,并且也没有抛异常:

String wkt = "...";
Clob clobWkt = conn.createClob();
clobWkt.setString(1, wkt);
cs.setClob(1, clobWkt);

最后再修改为以下方式之后,问题就解决了,但是始终没有找到已上代码出现问题的原因,把这个问题留在这里,等待有缘人来解答。

String wkt = "...";
cs.setCharacterStream(1, new StringReader(wkt), wkt.length());
时间: 2024-10-23 02:28:15

解决java在调用存储过程中需要传递clob字段时存在问题的相关文章

java程序调用存储过程

java程序调用存储过程     PL/SQL子程序,很多情况下是给应用程序来调用的,所有我们要掌握使用其他编程语言来调用我们写好的存储过程.下面我们介绍下使用java调用Oracle的存储过程.   准备代码: package com.mscncn.plsql.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBUtil { s

Java代码调用存储过程和存储方法

准备一个oracle 的JDBC jar 包:ojdbc14_11g.jar 首先找到你的 oracle 安装位置,例如: 1.创建一个JDBC数据库连接工具类: [java] view plain copy print? package com.test.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; i

java怎么调用子类中父类被覆盖的方法

public class b { { void show() { System.out.println("b"); } } public class c extends b { void show() { System.out.println("c"); } void showc() { super.show(); show(); } } public static void main(String[] args) { c x=new c(); x.showc();

解决Druid设置Oracle的Clob字段时的小坑

众所周知,Oracle有很多坑, 所以才有了去IOE. 在使用Druid做数据库连接池后,其实偶尔也会碰到小坑,这就是使用开源项目所必须去填平的.[如果使用不开源的产品,那就不是坑,而是陷阱了,你都不知道怎么去填坑] 用Druid连接池,通过JDBC往Oracle数据库的Clob字段插入数据,或者更新数据时,一个问题出现了. 类似于这样: Caused by: java.lang.ClassCastException: com.alibaba.druid.proxy.jdbc.ClobProxy

java实现调用ORACLE中的游标和包

今天把oracle中的包和游标学习了下,不废话,网上的的有些代码是错误的,抄来抄去,就自己实践了下,做个记录.直接上图,上代码 通过plsql创建自己的的包,包分为包头和包体. 1.包头如下: 1 CREATE OR REPLACE PACKAGE JAVALINKTEST 2 IS 3 TYPE CURSOR_TYPE IS REF CURSOR; --定义游标 4 PROCEDURE TEST_CURSOR(INPUT STRING, CURSOR_BACK OUT CURSOR_TYPE)

解决Java连接MySQL存储过程返回参数值为乱码问题

先说MySQL的字符集问题.Windows下可通过修改my.ini内的 [mysql] default-character-set=utf8    //客户端的默认字符集 在MySQL客户端工具中输入SHOW VARIABLES LIKE 'character%'; 显示如下 这样执行读取信息返回中文为乱码,解决办法是,在连接数据库之后,读取数据之前,先执行一项查询 SET NAMES 'utf8'; 即可显示正常. 最简单的完美修改方法,修改mysql的my.cnf文件中的字符集键值(注意配置

【JAVA】调用类中的属性

class person { String name; int age; String like; void setName(String name) { this.name = name; } void setAge(int age) { this.age =age; } void setLike(String like) { this.like=like; } void talk() { System.out.println( "我是:" + name + ",今年:&q

普通java类调用spring中的bean(二)

上一篇使用new ClassPathXmlApplicationContext 可以获取到spring上下文,但是有个问题: 因为它会每次都重新装载applicationContext-common.xml并实例化上下文bean, 如果有些线程配置类也是在这个配置文件中,那么会造成做相同工作的的线程会被启两次.一次是web容器初始化时启动,另一次是上述代码显示的实例化了一次.这在业务上是要避免的. 从性能上考虑,最好还是增加一个工具类,用来取得上下文ApplicationContext,这个工具

普通java类调用spring中的bean

使用ssm项目,很多service,dao等都使用了注解方式定义,普通java类要获取到这些bean,可这么写: public class Common { private UserService userService; public Common() { @SuppressWarnings("resource") AbstractApplicationContext ctx = new ClassPathXmlApplicationContext(new String []{&qu