Coldfusion oracle jdbc Macromedia vs Thin

时间:2014-03-04 16:04:16

标签: oracle jdbc coldfusion coldfusion-9

我已经对此进行了大量的搜索,但似乎无法清楚地列出Macromedia与瘦Oracle JDBC驱动程序的局限性,因为它们存在很大差异,我不理解。

我有两个数据源连接到同一个数据库,使用CF 9.0.1中的相同凭据:

    • jdbc url = jdbc:oracle:thin
    • driver class = oracle.jdbc.OracleDriver

  1. Macromedia

    • jdbc url = jdbc:macromedia:oracle
    • driver class = macromedia.jdbc.MacromediaDriver
  2. 在插入查询

    <cffunction name="create" access="public" output="false" >  
      <cfargument name="allocation_code" required="no"  type="string"/>           
      <cfquery datasource="#application.DSN#" name="qResult" result="r" >
         insert into table1 s
         (s.data)
         values (
            <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.data#">
         )
      </cfquery>
      <cfreturn r.ROWID>
    </cffunction>
    
    • 精简数据源失败(错误ROWID不存在)

    • Macromedia数据源正常


    dbinfo来电

    var columnList = new dbinfo( datasource="#application.DSN#"
                                 , table="table1").columns();
    
    • 精简数据源正常

    • Macromedia数据源永远不会处理,最终会产生cfoutput超时错误


    在带有RC1光标的存储过程

    <cfstoredproc procedure="schema.myproc"  datasource="#application.DSN#" > 
        <cfprocparam  type = "IN"
            cfsqltype="cf_sql_varchar" 
            value="#Event.getValue("entityid")#"
            > 
        <cfprocresult name="RC1"> 
    </cfstoredproc>
    
    • 调用'schema.myproc'的瘦数据源错误,错误数量或类型的参数

    • Macromedia数据源正常


    是否有我可以参考的差异或优缺点列表?或者这只是我喜欢的试错?我应该只有两个不同的数据源,并在一个不起作用时根据需要调用它们吗?任何见解都表示赞赏。

1 个答案:

答案 0 :(得分:2)

是否有我可以参考的差异或优缺点列表? - 我怀疑您需要阅读每个驱动程序的文档才能获取该信息。有关您安装的精简数据源驱动程序的特定版本,请参阅Oracle documentation。 ColdFusion为其驱动程序附带DataDirect。 ColdFusion 9.0.1 comes with DataDirect version 4.0 SP 1 drivers。请参阅DataDirect docs for 4.0

我对你给出的具体例子的想法。

  

在插入查询

上      
      
  • 精简数据源失败(错误ROWID不存在)

  •   
  • Macromedia数据源正常

  •   

也许瘦数据源返回的变量不同于ROWID。在<cfdump var="#r#">来电后,我会<cfquery>看看你有什么可用。

  

在dbinfo电话

上      
      
  • 精简数据源正常

  •   
  • Macromedia数据源永远不会处理,最终会产生cfoutput超时错误

  •   

不确定这里发生了什么事,因为你希望这个号召是工作。我会尝试对dbinfo进行更通用(更高级别)的调用,看看有什么可用。再次,使用<cfdump>检查返回的值。从dbnames()开始,看看你得到了什么。然后开始挖掘返回的内容。这对您来说真的只是信息性的,不应该真正影响您的生产决策,因为您不会在那里使用dbinfo。正确?

  

在带有RC1光标的存储过程

上      
      
  • 调用&#39; schema.myproc&#39;

  • 的精简数据源错误,错误数量或类型的参数   
  • Macromedia数据源正常

  •   

精简数据源驱动程序不支持包或存储过程中的引用游标。它says so in the ColdFusion docs

  

CFML支持Oracle 8和9 Reference Cursor类型,它通过引用传递参数。以这种方式传递的参数可以在一个应用程序的执行中从内存中分配和释放。要在包或存储过程中使用引用游标,请使用cfprocresult标记。这会导致ColdFusion JDBC数据库驱动程序将Oracle引用游标放入结果集中。 (您不能将此方法与Oracle的ThinClient JDBC驱动程序一起使用。

我建议使用ColdFusion附带的DataDirect驱动程序。至少在他们没有提供您需要的某种功能之前。直到那时我才开始寻找其他选择。这将使您获得Adobe的支持。一旦您开始使用第三方软件,他们就无法支持它们。