Java SQL 结果集数据类型

标签 java sql oracle jdbc

我是一名 java 新手,一直在修补现有的 Proc。我正在尝试对从 SQL 结果集“Grid_ProjectCode”派生的值执行 out.write,如下所示:

sStmt=null;rs=null;sql=null;
sStmt = conn.createStatement();
sql = "select Proj_Code, Placement_ACR, Category_ID, Alt_Aisle_Shelf, Placement_Start_Dt, Placement_End_Dt, Sales_Manager from DH_CURRENT_FUTURE_INVENTORY_VW where Placement_ACR in ('banFSI_ROI', 'banFSI','FSI')";
rs = sStmt.executeQuery(sql);


while ( rs.next() ) 
{
String Grid_ProjectCode = rs.getString("Proj_Code");
String Dup_Placement_ACR = rs.getString("Placement_ACR");

    if (plCode.equalsIgnoreCase(Dup_Placement_ACR))
    {
    out.write("Dupe Found");    
    out.newLine();

    out.write(Grid_ProjectCode);    
    out.newLine();
    }
}

if(conn != null) { rs.close(); sStmt.close(); }

Proc 失败并出现以下错误(当第二个 out.write 被删除/注释时按预期运行):

java.lang.ClassCastException: [Ljava.lang.Integer; incompatible with [Ljava.lang.String;

SQL 查询中引用的 Proj_Code 字段是 Oracle Exadata 架构中定义的 NVARCHAR2。

该错误表明存在某种数据类型不匹配,但我不确定如何修复此问题;非常感谢一些指导。

进行编辑以包含 DH_CURRENT_FUTURE_INVENTORY_vw 的 DDL:

CREATE OR REPLACE FORCE VIEW "UNICA_F1"."DH_CURRENT_FUTURE_INVENTORY_VW" ("PROJ_CODE", "FLAG_PROJ_REQUEST", "OBJECT_ID", "UAP_GRID_ROW_ID", "PLACEMENT_IMPRESSIONS", "SUPPLIER_CATEGORY", "PLACEMENT_CLASH", "PLACEMENT_NAME", "PLACEMENT_AISLE_SHELF", "PLACEMENT_START_DT", "PLACEMENT_RATE", "PLACEMENT_SIZE", "PLACEMENT_END_DT", "PLACEMENT_DURATION", "PLACEMENT_ACR", "SALES_VALUE", "NOTES", "STATUS", "AD_SERVER", "UNIT_NR", "SORT_ORDER", "CATEGORY_ID", "AISLE_SHELF_ID", "PLACEMENT_COUNT", "RETAIL_ACR", "ALT_AISLE_SHELF", "PLACEMENT_SIZE2", "PLACEMENT_SIZE3", "PLACEMENT_SIZE4", "PLACEMENT_SIZE5", "CREATIVE_YN", "CPM", "CREATIVE_SIZE", "PRODUCT_ID", "SALES_AREA", "IMPRESSION_GOAL", "CLIENT_CATEGORY", "CLIENT_SUB_CAT", "BRAND_NM", "FORMAT_DESC", "IMPRESSION_CPM", "IMPRESSION_VALUE", "CREATIVE_COST", "SIZE_DESC", "DELIVERY_PROCESS", "PACKAGE_FLAG", "PACK_ID", "RETARGETING_FLAG", "BATCH_FLAG", "BASE_COST", "DISCOUNT", "CATEGORY", "SALES_MANAGER") AS 
Select
PROJ_CODE, 
FLAG_PROJ_REQUEST, 
OBJECT_ID, 
UAP_GRID_ROW_ID, 
PLACEMENT_IMPRESSIONS, 
SUPPLIER_CATEGORY, 
PLACEMENT_CLASH, 
PLACEMENT_NAME, 
PLACEMENT_AISLE_SHELF, 
PLACEMENT_START_DT, 
PLACEMENT_RATE, 
PLACEMENT_SIZE, 
PLACEMENT_END_DT, 
PLACEMENT_DURATION, 
PLACEMENT_ACR, 
SALES_VALUE, 
NOTES, 
STATUS, 
AD_SERVER, 
UNIT_NR, 
SORT_ORDER, 
CATEGORY_ID, 
AISLE_SHELF_ID, 
PLACEMENT_COUNT, 
RETAIL_ACR, 
ALT_AISLE_SHELF, 
PLACEMENT_SIZE2, 
PLACEMENT_SIZE3, 
PLACEMENT_SIZE4, 
PLACEMENT_SIZE5, 
CREATIVE_YN, 
CPM, 
CREATIVE_SIZE, 
PRODUCT_ID, 
SALES_AREA, 
IMPRESSION_GOAL, 
CLIENT_CATEGORY, 
CLIENT_SUB_CAT, 
BRAND_NM, 
FORMAT_DESC, 
IMPRESSION_CPM, 
IMPRESSION_VALUE, 
CREATIVE_COST, 
SIZE_DESC, 
DELIVERY_PROCESS, 
PACKAGE_FLAG, 
PACK_ID, 
RETARGETING_FLAG, 
BATCH_FLAG, 
BASE_COST, 
DISCOUNT,
CATEGORY,
SALES_MANAGER
from 
(  

    select b.Proj_Code, b.Flag_Proj_Request, a.*, c.Category, d.Sales_Manager
    from dh_ddp_inventory a
    inner join uap_projects b on a.Object_ID = b.Project_ID
    inner join dh_lkp_taxo_categ_vw c on a.Category_ID = c.Category_ID
    inner join dh_ddp_Request d on a.Object_ID = d.Object_ID
    where b.Flag_Proj_Request = 'Y' and a.Placement_End_Dt >= Current_date
    and b.Proj_Code not in (select Proj_Code from uap_projects where Flag_Proj_Request = 'N')

    Union


    select b.Proj_Code, b.Flag_Proj_Request, a.*, c.Category, d.Sales_Manager
    from dh_ddp_inventory a
    inner join uap_projects b on a.Object_ID = b.Project_ID
    inner join dh_lkp_taxo_categ_vw c on a.Category_ID = c.Category_ID
    inner join dh_ddp_Request d on a.Object_ID = d.Object_ID
    where b.Flag_Proj_Request = 'N' and a.Placement_End_Dt >= Current_date

)
Order By Proj_Code asc, Object_ID desc, Placement_Name asc;

最佳答案

你在某个地方以某种形式做:

String[] stringArray = ...;
Integer[] intArray = (Integer[]) stringArray;

作为[Ljava.lang.Integer =

  1. 数组 ([)
  2. 属于 java.lang.Integer 类 (L)
<小时/>

要深入了解错误:

try {
    ... code ...
} catch (ClassCastException e) {
    e.printStackTrace();           // To System.err.
    e.printStackTrace(System.out); // To System.out.
    logger.error("OMG", e);        // To logger if there is one.
    throw e; // Act as is the exception was not thrown
}

查看堆栈跟踪,它还列出了导致错误的源以及行号。

关于Java SQL 结果集数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50021402/

相关文章:

java - cassandra中的随机列获取

java - java中的方法参数

mysql - 查询帮助? MySQL、LEFT JOIN、GROUP BY、缺失数据

mysql - SQL insert into select from - 插入 id 而不是数据

java - UDP 数据包等待然后一起到达

java - 线程安全同步块(synchronized block)

java - 如何调试 Microsoft SQL Server 中从单独的 java 程序调用的存储过程?

php - 根据另一个表的值从一个表中进行选择

sql - 如何将表固定到 11G 中的 oracle dbms_shared_pool

regex - Oracle PL/SQL : remove "space characters" from a string