在一个软件项目中,我们偶然发现了一个错误,我们从Java中插入了大量(17位数)到Oracle DB过程.数字改变了它的值有时+1或-1.有时保持不变.我们检查了oracle DB驱动程序调试日志,看到它打印了正确的数字.我们还尝试在每个请求之间重新启动Java应用程序服务器,以消除奇怪的缓存错误.仍然得到相同的结果.
任何想法为什么会这样?
这是代码:
// Datasource configuration
<New class="oracle.jdbc.pool.OracleDataSource">
<Set name="DriverType">thin</Set>
<Set name="URL">jdbc:oracle:thin:@xxxx</Set>
<Set name="User">uuuu</Set>
<Set name="Password">pppp</Set>
</New>
// JAVA
SimpleJdbcCall testMsg = new SimpleJdbcCall(dataSource).
withSchemaName(schema).
withCatalogName(catalog).
withProcedureName("test_msg");
public void testMessage(Long n) {
testMsg.execute(n, n, n.toString());
}
// PL_SQL
procedure test_msg(
i integer,
n number,
v varchar2
) is
log_prfx log_pkg.t_log_prfx := 'test_msg: ';
begin
g_log.log_debug(log_prfx||'i='||to_char(i));
g_log.log_debug(log_prfx||'n='||to_char(n));
g_log.log_debug(log_prfx||'v='||v);
end test_msg;
Run Code Online (Sandbox Code Playgroud)
现在打电话
testMessage(10000000000000005L);
testMessage(10000000000000007L);
testMessage(10000000000000009L);
Run Code Online (Sandbox Code Playgroud)
最终得到像日志
test_msg: i=10000000000000005
test_msg: n=10000000000000005
test_msg: v=10000000000000005
test_msg: i=10000000000000008
test_msg: n=10000000000000008
test_msg: v=10000000000000007
test_msg: i=10000000000000008 …
Run Code Online (Sandbox Code Playgroud) 将参数设置为null时出错.
使用ojdbc14.jar时只会出现此问题.使用ojdbc6.jar时,没问题.
我在mybatis配置xml中有此设置
<settings>
<setting name="jdbcTypeForNull" value="NULL"/>
</settings>
Run Code Online (Sandbox Code Playgroud)
错误消息是:
Caused by: org.apache.ibatis.type.TypeException: Error setting null for parameter #1 with JdbcType NULL . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull
Run Code Online (Sandbox Code Playgroud)
xml中的sql是
<update id="rename" parameterType="Element">
update dsb_element t set t.elementname = #{elementName} where t.elementid = #{elementId}
</update>
Run Code Online (Sandbox Code Playgroud)
java调用它
com.my.Element ele = new Element();
ele.setElementId("some-id");
ele.setElementName(null);
sqlSession.update(getMyBatisId("rename"), element) ;
Run Code Online (Sandbox Code Playgroud)
问题是:
这是ojdbc14.jar的问题,如果是,为什么?
我知道我可以使用#{elementName,jdbcType = VARCHAR2}解决它,但我的项目到处都有很多这个问题,很快就会到期.我不想改变所有这些.
我oracle.sql.STRUCT
上课了.通过以下代码:
ResultSetMetaData metaData = struct.getDescriptor().getMetaData();
Run Code Online (Sandbox Code Playgroud)
我得到这个例外:
java.sql.SQLException: ORA-01403: no data found
ORA-06512: at line 1
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) ~[ojdbc14.jar:Oracle JDBC Driver version - "10.2.0.4.0"]
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331) ~[ojdbc14.jar:Oracle JDBC Driver version - "10.2.0.4.0"]
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288) ~[ojdbc14.jar:Oracle JDBC Driver version - "10.2.0.4.0"]
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745) ~[ojdbc14.jar:Oracle JDBC Driver version - "10.2.0.4.0"]
at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:218) ~[ojdbc14.jar:Oracle JDBC Driver version - "10.2.0.4.0"]
at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:969) ~[ojdbc14.jar:Oracle JDBC Driver version - "10.2.0.4.0"]
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1190) ~[ojdbc14.jar:Oracle JDBC Driver version - "10.2.0.4.0"]
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3370) ~[ojdbc14.jar:Oracle JDBC Driver version - …
Run Code Online (Sandbox Code Playgroud) 我在 Tomcat7 服务器上运行 Web 应用程序并且在取消部署它们时遇到问题。Windows 似乎锁定了应用程序文件夹中的特定 JAR 文件。我发现有一个名为“antiJARLocking”的上下文属性,我可以将其设置为“true”(在此处定义:http : //tomcat.apache.org/tomcat-6.0-doc/config/context.html#Standard_Implementation)这可能会解决问题。
事实是,我见过一些人说我不应该在生产环境中将此属性设置为 true;但我找不到原因是什么。我知道将此属性设置为 true 可能会减慢 tomcat 启动和/或应用程序启动的速度,但这对我来说听起来不是一个大问题..?我错了吗?
您是否知道任何其他原因可以解释为什么有些人可能会阻止在生产中使用“antiJARLocking”?有没有其他解决 JAR 锁定问题的方法?
如果这有任何帮助,我正在运行 tomcat 7.0.40。不断被锁定的 jar 文件是“ojbdc6.jar”。
感谢您的帮助!
我试图在我的glassfish上创建具有以下属性的jdbc连接池(如下图所示).它成功连接让我觉得它运作正常.然而,在我重新启动glassfish并尝试ping池之后,我的屏幕上的白色屏幕上出现RuntimeException.不仅在我ping它时,而且当我单击任何选项卡甚至是保存和取消按钮时,它最终都会运行RuntimeException.我已经尝试了所有可能的原因并一遍又一遍地搜索网络,但结果却出现了同样的异常.请帮忙.:(
遇到RuntimeException步骤
2015-04-29T15:19:29.144+0800|SEVERE: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException while attempting to process a 'beforeCreate' event for 'event132'.
at com.sun.jsftemplating.layout.descriptors.LayoutElementBase.dispatchHandlers(LayoutElementBase.java:422)
at com.sun.jsftemplating.layout.descriptors.LayoutElementBase.dispatchHandlers(LayoutElementBase.java:394)
at com.sun.jsftemplating.layout.descriptors.LayoutComponent.beforeCreate(LayoutComponent.java:348)
at com.sun.jsftemplating.layout.descriptors.LayoutComponent.getChild(LayoutComponent.java:288)
at com.sun.jsftemplating.layout.LayoutViewHandler.buildUIComponentTree(LayoutViewHandler.java:556)
at com.sun.jsftemplating.layout.LayoutViewHandler.buildUIComponentTree(LayoutViewHandler.java:551)
at com.sun.jsftemplating.layout.LayoutViewHandler.buildUIComponentTree(LayoutViewHandler.java:507)
at com.sun.jsftemplating.layout.LayoutViewHandler.buildUIComponentTree(LayoutViewHandler.java:507)
at com.sun.jsftemplating.layout.LayoutViewHandler.createView(LayoutViewHandler.java:255)
at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:205)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:121)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
at com.sun.webui.jsf.util.UploadFilter.doFilter(UploadFilter.java:233)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
at org.apache.catalina.core.StandardPipeline.doChainInvoke(StandardPipeline.java:678)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:415)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:282)
at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235) …
Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中连接到 Oracle Db 并尝试使用 gradle build 构建应用程序。我无法从 gradle 构建访问 OJDBC6.jar。有人可以吗,让我知道,我们如何将 ojdbc6.jar 添加到 build.gradle 文件中。
我的应用程序使用以下配置运行 TOMCAT - 6.0.18 数据库 - Oracle 11g 企业版(11.2.0.2.0) Java 版本 - jdk 1.6 JDBC 驱动程序 - OJDBC14.jar(不确定确切版本)
当我将 Oracle 数组类型值从 java 传递到存储过程时,出现 Oracle-Character-set-178 错误。找到下面的错误消息。
java.sql.SQLException:不支持的字符集:oracle-character-set-178
下面是我正在执行的代码
String query = "{call DBA.SP_XXXX(?,?,?)}";
con = this.getConnection();
con=((DelegatingConnection) con).getInnermostDelegate();
oracle.sql.ArrayDescriptor descrip =oracle.sql.ArrayDescriptor.createDescriptor("DBA.ARRAY_TABLE", con);
oracle.sql.ARRAY oracArray = new oracle.sql.ARRAY(descrip, con, arrayValue);
cs = con.prepareCall(query);
cs.setString(1,ID);
cs.registerOutParameter(2, java.sql.Types.VARCHAR);
cs.setObject(3,oracArray);
cs.execute();
Run Code Online (Sandbox Code Playgroud)
以下是我的 oracle 返回的字符集值
NLS_CHARACTERSET WE8MSWIN1252 NLS_NCHAR_CHARACTERSET AL16UTF16
我不确定当前设置中运行的 OJDBC14.jar 的确切版本,但是当我尝试替换为最新的 OJDBC14 并出现以下错误 java.lang.NoSuchMethodError: oracle.i18n.text.converter.CharacterConverterOGS.getInstance(I)Loracle /sql/converter/CharacterConverters;
请告诉我问题和解决方案是什么
我在使用嵌入式 tomcat 运行 spring-boot 应用程序时收到错误(尚未尝试使用服务器 tomcat)。
java.lang.IllegalStateException: Tomcat 7 reflection failed
at org.springframework.boot.context.embedded.tomcat.SkipPatternJarScanner.scan(SkipPatternJarScanner.java:77)
at org.apache.catalina.startup.TldConfig.execute(TldConfig.java:271)
at org.apache.catalina.startup.TldConfig.lifecycleEvent(TldConfig.java:590)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5522)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1571)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1561)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.reflect.InvocationTargetException: null
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.context.embedded.tomcat.SkipPatternJarScanner.scan(SkipPatternJarScanner.java:73)
... 12 common frames omitted
Caused by: java.lang.NoClassDefFoundError: oracle/i18n/util/LocaleMapper
at oracle.xml.parser.v2.XMLReader.setEncoding(XMLReader.java:980)
at oracle.xml.parser.v2.XMLReader.checkXMLDecl(XMLReader.java:3284)
at oracle.xml.parser.v2.XMLReader.pushXMLReader(XMLReader.java:570)
at oracle.xml.parser.v2.XMLReader.pushXMLReader(XMLReader.java:274)
at oracle.xml.parser.v2.XMLParser.parse(XMLParser.java:232)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1576)
at org.apache.catalina.startup.TldConfig.tldScanStream(TldConfig.java:565)
at org.apache.catalina.startup.TldConfig.tldScanJar(TldConfig.java:513)
at org.apache.catalina.startup.TldConfig.access$200(TldConfig.java:61)
at …
Run Code Online (Sandbox Code Playgroud) 我在使用 Hibernate javax.persistence.SequenceGenerator.allocationSize() 属性时遇到问题。当它设置为 1 时,我在向数据库插入大量记录时会遇到性能问题。否则,当我将其设置为默认值 (50) 或更高的值时,我会收到具有指定标识符的实体已经存在的异常!
最大的问题是很多开发者使用共享数据库,所以生成的标识符真的有可能不同步。
另一方面,我注意到使用“INCREMENT BY 1”创建的 Oracle 序列。可能是根据allocationSize设置这个可以解决问题吗?
我使用的是 WildFly 10.1(所以 Hibernate 版本是 5.0.10)和 Oracle 12c (12.2.0.1)。
提前感谢您的建议!
我在Java 8中开发了一个项目,当我使用java 8开发项目时,我已经在maven中安装了ojdbc jar.现在我将项目转换为java 7.在这样做时,我面临着ojdbc.jar
依赖性问题在pom.xml
.它显示:
缺少神器com.oracle:ojdbc7:jar:12.1.0
在oracle依赖标记.当我尝试为ojdbc jar运行mvn install时,也会抛出错误.
[错误]无法在项目上执行目标SlotBookingAvailability:无法解析项目org.logicInfo.oms的依赖项:SlotBookingAvailability:war:0.0.1-SNAPSHOT:未能在https://repo.maven.a中找到com.oracle:ojdbc7:jar:12.1.0 .pache.org/ maven2被缓存在本地存储库中,在更新间隔之前不会重新尝试解析中心已经过去或强制更新.
的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.logicInfo.oms</groupId>
<artifactId>SlotBookingAvailability</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>SlotBookingAvailability</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<start-class>org.logicInfo.oms.SlotBookingAvailability.SlotBookingAvailabilityApplication</start-class>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.7</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
<version>12.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> …
Run Code Online (Sandbox Code Playgroud)