准备好的语句中的占位符

问题描述

我在准备好的语句中使用以下查询。之前我在过程中使用了可调用的方法,但现在我试图在jdbc准备好的语句中使用选择查询。

我知道在preparestatement中我们写insert into abc values(?,?,?);

但是在这里我有插入选择。同一变量已在许多地方使用。在此查询中,我有2个变量 p_entity_typep_update_mode

INSERT INTO dynamicEntitynotgett
    (entity_type,entity_id,entity_code,synonyms,action)
    WITH data_view AS
     ( -- ITEM table
      SELECT 'ITEM' entity_type,-- This separates inserted values
              item_id data_id,item_name data_name,item_desc data_desc,creation_date
        FROM itemde
      UNION ALL
      -- ORG table
      SELECT 'ORG' entity_type,-- This separates inserted values
              org_id,org_name,org_desc,creation_date
        FROM orgde
        UNION ALL
      -- Feature table
              SELECT 'FEATURES' entity_type,-- This separates inserted values
              FEATURE_id data_id,FEATURE_NAME data_name,FEATURE_DESC data_desc,CREATION_DATE
        FROM FEATURESDE
      )
    SELECT upper(t.entity_type),t.data_id,t.data_name,t.data_desc,CASE lower(p_update_mode)
             WHEN 'INCREMENTAL' THEN
               CASE
                 WHEN t.creation_date > b.last_update_date THEN
                   'update'
                 WHEN t.creation_date < b.last_update_date THEN
                   'add'
               END
             WHEN 'full' THEN
              'add' 
           END action
      FROM data_view t
           LEFT JOIN ODA_REFRESH_DETAILS b
                  ON b.entity_type = t.entity_type
                 AND lower(p_update_mode )='incremental'
     WHERE (upper(p_entity_type) = t.entity_type OR p_entity_type IS NULL)
       AND (lower(p_update_mode) = 'full'
            OR (lower(p_update_mode) = 'incremental' AND b.entity_type IS NOT NULL)
           );

我将从上游接收p_entity_type和p_update_mode。哪种解决方案会更好?结果集或Preparedstatement,以及如何替换查询中的这些值或使用setXXX()。

解决方法

我认为您正在寻找namedParameterStatement。这将允许您命名参数。

我不确定您要在声明中指的是什么,但是例如,这一行:

SELECT 'ITEM' entity_type

可以替换为:

SELECT :ITEM as entity_type

其中:ITEM的传递就像?一样,但是可以在语句中多次使用。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...