Ich kann nicht die gespeicherte Prozedur von Java aufrufen, die den postgres komplexen Typ als Eingabe akzeptiertJava

Java-Forum
Anonymous
 Ich kann nicht die gespeicherte Prozedur von Java aufrufen, die den postgres komplexen Typ als Eingabe akzeptiert

Post by Anonymous »

Hallo, ich arbeite in der Java -Anwendung und ich bin neu in Java. Ich habe unten sp. < /P>
CREATE OR REPLACE PROCEDURE integration.process_(IN p_data integration.mycustom_type[])
LANGUAGE plpgsql
SECURITY DEFINER
AS $procedure$
DECLARE

// my code goes here
$procedure$
;
< /code>
unten ist mein Typ < /p>
CREATE TYPE integration.mycustom_type AS (
beam float8,
call_sign varchar(255),
draft float8,
dwt int4,
vessel_type varchar(255),
engine_builder varchar(255),
engine_design varchar(255),
engine_hp float8,
engine_kwt float8,
engine_model varchar(255),
engines_number int4,
flag varchar(255),
speed_laden float8,
geared varchar(255),
grt float8,
beneficial_owner_capital varchar(255),
hull_number varchar(255),
ice_level varchar(255),
imo int4
);
< /code>
unten ist mein Java -Code < /p>
private static PGobject convertVesselToPGObject(Vessel vessel) {
try {
PGobject pgObject = new PGobject();
pgObject.setType("integration.alphaliner_vessel_type");

// Correct null handling
String value = String.format(
"(%f, '%s', %f, %d, '%s', '%s', '%s', %f, %f, '%s', %d, '%s', %f, '%s', %f, '%s', '%s', '%s', %d )",
vessel.vesselBeam != null ? vessel.vesselBeam : 0.0,
vessel.vesselCallSign != null && !vessel.vesselCallSign.isEmpty()
? vessel.vesselCallSign : "NULL",
vessel.vesselDraft != null ? vessel.vesselDraft : 0.0,
vessel.vesselDwt != null ? vessel.vesselDwt : 0,

vessel.vesselType != null && !vessel.vesselType.isEmpty()
? vessel.vesselType : "NULL",
vessel.engineBuilder != null && !vessel.engineBuilder.isEmpty()
? vessel.engineBuilder : "NULL",
vessel.engineDesign != null && !vessel.engineDesign.isEmpty()
? vessel.engineDesign : "NULL",
Objects.requireNonNullElse(vessel.engineHp, 0.0),
Objects.requireNonNullElse(vessel.engineKwt, 0.0),

vessel.engineModel != null && !vessel.engineModel.isEmpty()
? vessel.engineModel : "NULL",
Objects.requireNonNullElse(vessel.enginesNumber, 0),
Objects.requireNonNullElse(vessel.vesselFlag, ""),
Objects.requireNonNullElse(vessel.vesselSpeedLaden, 0.0),
vessel.vesselGeared != null && !vessel.vesselGeared.isEmpty()
? vessel.vesselGeared : "NULL",

Objects.requireNonNullElse(vessel.vesselGrt, 0.0),
vessel.vesselBeneficialOwnerCapital != null && !vessel.vesselBeneficialOwnerCapital.isEmpty()
? vessel.vesselBeneficialOwnerCapital : "NULL",
vessel.vesselHullNumber != null && !vessel.vesselHullNumber.isEmpty()
? vessel.vesselHullNumber : "NULL", // Handle empty string as NULL
vessel.vesselIceLevel != null && !vessel.vesselIceLevel.isEmpty()
? vessel.vesselIceLevel : "NULL",
Objects.requireNonNullElse(vessel.vesselImo, 0)
);
System.out.println("Generated PGObject value: " + value);
pgObject.setValue(value);
return pgObject;
} catch (Exception e) {
throw new RuntimeException("Error converting Vessel to PGObject", e);
}
}
< /code>
Unten ist, wie ich sp < /p>
aufrufetry (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
PreparedStatement stmt = conn.prepareStatement(sql)) {

// Convert Java List to a PostgreSQL compatible array of composite type
Array vesselArray = conn.createArrayOf("integration.alphaliner_vessel_type", vessels.stream()
.map(VesselDataProcessor::convertVesselToPGObject)
.toArray(PGobject[]::new));

System.out.println(vesselArray);

// Set the array parameter
stmt.setArray(1, vesselArray);

// Execute the stored procedure
stmt.execute();
System.out.println("Stored Procedure executed successfully!");
< /code>
unten finden Sie die Beispieldaten, die ich versuche, < /p>
zu übergeben"VesselBeam": 43,
"VesselCallSign": "",
"VesselDraft": 15,
"VesselDwt": 85558,
"EngineBuilder": "",
"EngineDesign": "",
"EngineHp": null,
"EngineKwt": null,
"EngineModel": "",
"EnginesNumber": null,
"VesselExNames": [],
"VesselFlag": "",
"VesselSpeedLaden": 21.9,
"VesselGeared": "no",
"VesselLiftingGear": [],
"VesselGrt": 123,
"VesselHullNumber": "",
"VesselIceLevel": "",
"VesselImo": 123,
"VesselType": "cc"
< /code>
Wenn ich versuche, dies auszuführen, und versuche, auf SP zu klicken. Ich erhalte einen Fehler < /p>
org.postgresql.util.PSQLException: ERROR: malformed record literal: "(43.000000.....)
Detail: Too few columns.
Where: unnamed portal parameter $1 = '...'
< /code>
Kann mir jemand helfen, dies zu beheben? Jede Hilfe wäre geschätzt. Danke

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post