高分求解-oracle 对executeBatch的支持 oracle 对executeBatch的支持各位大虾,请问如何让Oracle在对executeBatch处理时一条SQL出错还可以执行后面的语句呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以得到statement里面的ExECUTE_FAILED,eg:if(Statement.ExECUTE_FAILED==?){ //具体操作,里面的值是什么你可以去试一下} Statement.EXECUTE_FAILED它是int类型的其Constant Field Values为-3;这种不行吧( ⊙ o ⊙ ),觉得应该没有现成的解决办法,你可以根据需要利用SQLException再重先定义一个自己的异常处理类 executeBatch做不到。但是你可以利用存储过程+动态sql来做。你可以把数据作为二维数组传入存储过程,在存储过程中拼sql,也可以把拼好的sql作为字符串数组传入存储过程去执行。无论哪种方式传参数,在存储过程内部,使用 execute immediate 语法执行动态sql,然后内部做异常处理,sql出错时直接忽略即可。 感谢大家的热情回复,只是有些疑问,这样的操作在MySql中是没有问题可以实现的,但是在Oracle中不知道为什么不支持呢,基于什么样的考虑不支持呢? 动态表名可以,动态的数据库名不知道是什么意思,如果你指的是用户模式,没有问题;如果是不同的数据库实例,也没有问题,但是不同的数据库实例之间,需要先建立dblink。总而言之,只要你的两个不同的数据库之间是网络连通可互访有权限,则没有问题。 mysql怎么实现的?学mysql不久,对这方面不了解,望指教。 针对于JDBC的executeBatch,MySQL在处理的过程中就直接每条SQL执行,出错后仍然继续执行后面的语句同时每条语句都会有其处理的结果,包括正确的和错误的,而Oracle只要一条出错了就不执行了并且每条的返回值都是-3,当然个人觉得Oracle可能会有相关参数的配置,所以在Oracle的社区也开了个帖子,只不过还没有找到正确的答案。楼上的,公司上不了网,。详聊。 以下摘自 JDK API 文档:int[] executeBatch() throws SQLException将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。返回数组的 int 元素的排序对应于批中的命令,批中的命令根据被添加到批中的顺序排序。方法 executeBatch 返回的数组中的元素可能为以下元素之一:大于等于 0 的数 - 指示成功处理了命令,是给出执行命令所影响数据库中行数的更新计数SUCCESS_NO_INFO 的值 - 指示成功执行了命令,但受影响的行数是未知的如果批量更新中的命令之一无法正确执行,则此方法抛出 BatchUpdateException,并且 JDBC 驱动程序可能继续处理批处理中的剩余命令,也可能不执行。无论如何,驱动程序的行为必须与特定的 DBMS 一致,要么始终继续处理命令,要么永远不继续处理命令。如果驱动程序在某一次失败后继续进行处理,则 BatchUpdateException.getUpdateCounts 方法返回的数组将包含的元素与批中存在的命令一样多,并且其中至少有一个元素将为:EXECUTE_FAILED 的值 - 指示未能成功执行命令,仅当命令失败后驱动程序继续处理命令时出现在 Java 2 SDK, Standard Edition, 1.3 版中已经修改了可能的实现和返回值,以适应抛出 BatchUpdateException 对象后在批量更新中继续处理命令的选项。返回:包含批中每个命令的一个元素的更新计数所组成的数组。数组的元素根据将命令添加到批中的顺序排序。 抛出:SQLException - 如果发生数据库访问错误,在已关闭的 Statement 上调用此方法,或者驱动程序不支持批量语句。如果未能正确执行发送到数据库的命令之一或者尝试返回结果集合,则抛出 BatchUpdateException(SQLException 的子类)。 楼上的,网上大部分都是这个说法;但是驱动程序的行为必须与特定的 DBMS 一致,要么始终继续处理命令,要么永远不继续处理命令。这句话,特定的DBMS,在Oracle中是否可以进行更改呢。 出错了 就重新创建个statement 重新走剩余的batch 不行吗 如何写这样一个基类? 如何控制线程 jComboBox的值如何改变? 请高手指点JAVA I/O流和异常处理的三道习题 java中使用socket可以传输对象吗? 关于 JDBC的 问题,各位高手看看,是公司的笔试题目。 求助一个棘手问题! 命令行下编译,用JDBC连microsoft sql server 2000时,总是找不到com.microsoft这个包 JAVA容器有哪些实际的应用? applet不能浏览 新人没分希望大家帮我解决下关于配置的 紧急~~~~ java作业
eg:
if(Statement.ExECUTE_FAILED==?)
{
//具体操作,里面的值是什么你可以去试一下
}
但是你可以利用存储过程+动态sql来做。
你可以把数据作为二维数组传入存储过程,在存储过程中拼sql,
也可以把拼好的sql作为字符串数组传入存储过程去执行。无论哪种方式传参数,在存储过程内部,使用 execute immediate 语法执行动态sql,然后内部做异常处理,sql出错时直接忽略即可。
总而言之,只要你的两个不同的数据库之间是网络连通可互访有权限,则没有问题。
int[] executeBatch() throws SQLException
将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。返回数组的 int 元素的排序对应于批中的命令,批中的命令根据被添加到批中的顺序排序。方法 executeBatch 返回的数组中的元素可能为以下元素之一:
大于等于 0 的数 - 指示成功处理了命令,是给出执行命令所影响数据库中行数的更新计数
SUCCESS_NO_INFO 的值 - 指示成功执行了命令,但受影响的行数是未知的
如果批量更新中的命令之一无法正确执行,则此方法抛出 BatchUpdateException,并且 JDBC 驱动程序可能继续处理批处理中的剩余命令,也可能不执行。无论如何,驱动程序的行为必须与特定的 DBMS 一致,要么始终继续处理命令,要么永远不继续处理命令。如果驱动程序在某一次失败后继续进行处理,则 BatchUpdateException.getUpdateCounts 方法返回的数组将包含的元素与批中存在的命令一样多,并且其中至少有一个元素将为:
EXECUTE_FAILED 的值 - 指示未能成功执行命令,仅当命令失败后驱动程序继续处理命令时出现
在 Java 2 SDK, Standard Edition, 1.3 版中已经修改了可能的实现和返回值,以适应抛出 BatchUpdateException 对象后在批量更新中继续处理命令的选项。
返回:包含批中每个命令的一个元素的更新计数所组成的数组。数组的元素根据将命令添加到批中的顺序排序。
抛出:SQLException - 如果发生数据库访问错误,在已关闭的 Statement 上调用此方法,或者驱动程序不支持批量语句。如果未能正确执行发送到数据库的命令之一或者尝试返回结果集合,则抛出 BatchUpdateException(SQLException 的子类)。