当前位置:  数据库>oracle

Java项目,从Oracle迁移到达梦数据库笔记

    来源: 互联网  发布时间:2017-04-03

    本文导语: 达梦数据库是个国产数据库,据说对Oracle有很好的兼容,本人亲自从Oracle11g迁移到达梦6.0的数据库上来,遇到一些问题,以下是问题记录: 1。字段名错误虽然达梦SQL可以兼容字段大小写,但是JDVC实际上执行与Oracle会有差别, ...

达梦数据库是个国产数据库,据说对Oracle有很好的兼容,本人亲自从Oracle11g迁移到达梦6.0的数据库上来,遇到一些问题,以下是问题记录:

1。字段名错误
虽然达梦SQL可以兼容字段大小写,但是JDVC实际上执行与Oracle会有差别,

达梦的SQL可以执行,但是返回的字段的列名仍然按SQL的大小写返回,而Oracle会变成全部的大写返回,

select typeid, typename from T_PUB_PRODUCT_TYPE

在用oracle执行后返回的列名叫TYPEID,TYPENAME

达梦返回值则为typeid,typename

比较好的做法是在数据库执行语句之前,强制所有语句转大写:

rs = stmt.executeQuery(strSql.toUpperCase());    //达梦数据库对列名区分大小写,Oracle会自动全转大写

==============================================
cuont(*)数据类型错误
语句:
select count(*) counts  from t_cus_product left join t_pub_product_type on p_type=typeid where p_createrid=200


oracle的count(*)可以兼容BigDecimal,达梦的count(*)是Long型
        //count = ((BigDecimal)mapCount.get("counts")).intValue();//Orcale 为 BigDecimal
        count = ((Long)mapCount.get("counts")).intValue();   //达梦数据库为Long


=====================================================
2。达梦数据库语法关键字错误

以下语句oracle 可以执行,达梦却报错误
select c.contractid,CONTRACTNO, c.contractname, c.type, sum,begin,end
state, userid, serviceid,P_NAME
from t_contract c
left join T_CUS_PRODUCT
 on c.PRODUCTID=P_ID
  where userid=200 order by contractid
 
原因:begin,end为达梦的保留关键字,语句修改为双引号的形式,可以通过:
select c.contractid,CONTRACTNO, c.contractname, c.type, sum,"begin","end"
state, userid, serviceid,P_NAME
from t_contract c
left join T_CUS_PRODUCT
 on c.PRODUCTID=P_ID
   where userid=200 order by contractid
=============================================
3。查询dual表报错,
语句:select seq_c006_message_content.nextval from dual
















java报错:
java.sql.SQLException: 无效的表或视图名 'dual'
    at dm.jdbc.dbaccess.DBError.throwSQLException(Unknown Source)
    at dm.jdbc.driver.DmdbCSI.prepareSQL(Unknown Source)
    at dm.jdbc.driver.DmdbStatement.directExec(Unknown Source)
    at dm.jdbc.driver.DmdbStatement.executeQuery(Unknown Source)
    at cn.org.hz.common.dao.DBAccess.queryOneRow(DBAccess.java:110)
    at cn.org.hz.blh.i007.I007Blh.I007MessageAdd(I007Blh.java:136)
    at cn.org.hz.blh.i007.I007Blh$$FastClassByCGLIB$$f90d5dcf.invoke()
    at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
    at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:700)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
    at cn.org.hz.common.aop.AroundInterceptor.invoke(AroundInterceptor.java:13)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:635)
    at cn.org.hz.blh.i007.I007Blh$$EnhancerByCGLIB$$67fbf5f5.I007MessageAdd()
    at cn.org.hz.ctrl.i007.I007Ctrl.I007MessageAdd(I007Ctrl.java:113)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.web.servlet.mvc.multiaction.MultiActionController.invokeNamedMethod(MultiActionController.java:473)
    at org.springframework.web.servlet.mvc.multiaction.MultiActionController.handleRequestInternal(MultiActionController.java:410)
    at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
    at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at cn.org.hz.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:23)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:619)














































解决在本用户下建立一个dual同义词
如果需要直接访问,可以用SYSDBA创建一个PUBLIC同义词:
CREATE PUBLIC SYNONYM dual for SYSTEM.SYSDBA.SYSDUAL;

达梦虽然在sysdba下造了一个dual表来兼容oracle但是却没有在每个新用户下建立同义词,所有一般对dual表的查询都会报错。

=================================================


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • Java数据库映射工具 SQL2JAVA
  • Java数据库建模工具 Mogwai Java Tools
  • Java数据库 Java DB
  • 在我的java程序中,我从数据库中得到一批数据,不能确定是多少个,我要把它保存到我的java数组中,可是怎样才能向C++中的数组一样可以自由分配空间,在java中我必需预先指定大小,不会一定要用java中的那个可改变数组大小的类吧?
  • 开发java下的数据库程序,用什么数据库引擎?
  • java通过jdbc访问数据库流行采用何种数据库驱动程序?jdbc-odbc , InterClient , 还是“网络协议/全java驱动程序”?如有可能,请给简明
  • java数据库连接池和数据库连接示例
  • java可以管理数据库吗
  • 请问在java钟如何得到数据库中的记录总数,以及如何求数据库中一个字段的和?
  • java对数据库的开发
  • java中的数据库结果集可以被赋值吗,可以通过结果集的方法来更新数据库字段吗?
  • 如何用java实现将数据库中的image类型数据导出到文本文件。并导入(高分求救!!)
  • Java数据库移植框架 Flyway
  • Java对象数据库 ObjectDB
  • Java数据库集群方案 C-JDBC
  • Java数据库客户端 SQL Admin
  • JAVA与数据库操作问题
  • Java数据库持久层框架 Bhavaya
  • 请问:Java开发数据库应用软件合适吗?
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 我对JAVA一窍不通,可惜别人却给我一个Java的project,要我做一个安装程序,请问哪里有JAVA INSTALLER下载,而且我要不要安装java的sdk才能完成此项任务?
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3