Java SQL Resultset DataTypes

77 Views Asked by At

I’m a java novice and have been tinkering with an existing Proc. I’m attempting to perform an out.write on a value derived from a SQL resultset 'Grid_ProjectCode’, as shown here:

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(); }

The Proc fails with the following error (runs as expected when the second out.write is removed/commented):

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

The Proj_Code field referred to in the SQL query is an NVARCHAR2 defined in an Oracle Exadata schema.

The error suggests some sort of data type mismatch, but I’m not sure how this is can be fixed; would really appreciate some guidance.

Edited to include DDL for DH_CURRENT_FUTURE_INVENTORY_vw:

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;
1

There are 1 best solutions below

2
Joop Eggen On

Somewhere you do in some form or the other:

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

As [Ljava.lang.Integer =

  1. array ([)
  2. of class java.lang.Integer (L)

To drill down to the error:

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
}

Look at the stack trace, it also lists the source causing the error, together with the line number.