com.ibm.as400.access.DBReplySQLCA Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jt400 Show documentation
Show all versions of jt400 Show documentation
The Open Source version of the IBM Toolbox for Java
The newest version!
///////////////////////////////////////////////////////////////////////////////
//
// JTOpen (IBM Toolbox for Java - OSS version)
//
// Filename: DBReplySQLCA.java
//
// The source code contained herein is licensed under the IBM Public License
// Version 1.0, which has been approved by the Open Source Initiative.
// Copyright (C) 1997-2001 International Business Machines Corporation and
// others. All rights reserved.
//
///////////////////////////////////////////////////////////////////////////////
package com.ibm.as400.access;
import java.math.BigDecimal; //@F3A
/**
Provides access to the SQLCA portion of the reply
data stream.
**/
class DBReplySQLCA
{
private static final String copyright = "Copyright (C) 1997-2001 International Business Machines Corporation and others.";
private byte[] data_;
private int offset_;
private int length_;
// Add 96 to offset_ for Errd1, 100 to offset_ for Errd2, etc.
private static final int[] locationFromOffset_ = {96, 100, 104, 108, 112, 116}; //@F1A @F4C
public DBReplySQLCA (byte[] data,
int offset,
int length)
{
data_ = data;
offset_ = offset;
length_ = length;
}
//@F1A Combined getErrd1, getErrd2, getErrd3, getErrd4 methods
final public int getErrd (int requestedErrd) throws DBDataStreamException
{
if (length_ <= 6)
return 0;
return BinaryConverter.byteArrayToInt (data_,
offset_ + locationFromOffset_[requestedErrd-1]);
}
// @E4A
//@F1D final public int getErrd1 () throws DBDataStreamException // @E4A
//@F1D { // @E4A
//@F1D if (length_ <= 6) // @E4A
//@F1D return 0; // @E4A
//@F1D // @E4A
//@F1D return BinaryConverter.byteArrayToInt (data_, offset_ + 96); // @E4A
//@F1D } // @E4A
//@F1D final public int getErrd2 () throws DBDataStreamException
//@F1D {
//@F1D if (length_ <= 6) // @D1A
//@F1D return 0; // @D1A
//@F1D
//@F1D return BinaryConverter.byteArrayToInt (data_, offset_ + 100);
//@F1D }
//@F1D final public int getErrd3 () throws DBDataStreamException
//@F1D {
//@F1D if (length_ <= 6) // @D1A
//@F1D return 0; // @D1A
//@F1D
//@F1D return BinaryConverter.byteArrayToInt (data_, offset_ + 104);
//@F1D }
//@F1D final public int getErrd4 () throws DBDataStreamException // @E6A
//@F1D { // @E6A
//@F1D if (length_ <= 6) // @E6A
//@F1D return 0; // @E6A
//@F1D // @E6A
//@F1D return BinaryConverter.byteArrayToInt (data_, offset_ + 108); // @E6A
//@F1D } // @E6A
// @E3A
final public String getErrmc(ConvTable converter) throws DBDataStreamException // @E3A @P0C
{ // @E3A
if (length_ <= 6) // @E3A
return ""; // @E3A
short errml = BinaryConverter.byteArrayToShort(data_, offset_ + 16); // @E3A
return converter.byteArrayToString(data_, offset_ + 18, errml); // @E3A
} // @E3A
// @N7A
final public String getErrp(ConvTable converter) {
int infoLen = 8;
if (length_ <= offset_ + 88) {
// Data is too short
return "";
} else {
// If there are not 8 character, return as many as there are
if (length_ < offset_ + 88 + infoLen) {
infoLen = length_ - offset_ - 88;
}
return converter.byteArrayToString(data_, offset_ + 88, infoLen);
}
}
// @E5A
final public String getErrmc(int substitutionVariable, // @E5A
ConvTable converter) throws DBDataStreamException // @E5A @P0C
{ // @E5A
if (length_ <= 6) // @E5A
return ""; // @E5A
short errml = BinaryConverter.byteArrayToShort(data_, offset_ + 16); // @E5A
int currentVariable = 1; // @E5A
int i = offset_ + 18; // @E5A
int j = 0; // @E5A
short currentLength; // @E5A
while ((currentVariable < substitutionVariable) && (j < errml)) { // @E5A
++currentVariable; // @E5A
currentLength = (short)(BinaryConverter.byteArrayToShort(data_, i) + 2); // @E5A
i += currentLength; // @E5A
j += currentLength; // @E5A
} // @E5A
currentLength = BinaryConverter.byteArrayToShort(data_, i); // @E5A
return converter.byteArrayToString(data_, i+2, currentLength); // @E5A
} // @E5A
// @E2A
final public boolean getEyecatcherBit54() throws DBDataStreamException // @E2A
{ // @E2A
if (length_ <= 6) // @E2A
return false; // @E2A
// It is actually 6 of Byte 6. // @E2A
byte b = data_[offset_ + 6]; // @E2A
return((b & (byte)0x02) > 0); // @E2A
} // @E2A
// @F2A Added method for auto-generated key support.
//
// ONLY call this method after checking if sqlState != 0 because otherwise the error
// message will be in this space.
//
// Note: Although we check the length above in getErrmc, we do not have in this method
// because the auto-generated key will ALWAYS be in bytes 55 through 70 even if the length
// in SQLERRML reports a length other than 70. This is bytes 72 through 87 from our offset.
//
// We shouldn't need a "throws DBDataStreamException" because we are not handling
// SIGNAL 443 cases here.
final public BigDecimal getGeneratedKey() //@P0C @F3C
{
AS400PackedDecimal typeConverter = new AS400PackedDecimal (30, 0); //@F3A
try //@F3A
{ //@F3A
return((BigDecimal) typeConverter.toObject (data_, offset_ + 72)); //@F3A
} //@F3A
catch (NumberFormatException nfe) //@F3A
{ //@F3A
//If we got a bad number back from the database, don't return it //@F3A
//to the user //@F3A
return null; //@F3A
} //@F3A
//@F3D return converter.byteArrayToString(data_, offset_ + 72, 16);
}
// Return SQLCODE from sqlca
final public int getSQLCode () throws DBDataStreamException //@PDA
{
return BinaryConverter.byteArrayToInt (data_, offset_ + 12);
}
// Returns the SQLState
// It needs to run thru EbcdicToAscii since it is a string
final public String getSQLState (ConvTable converter) throws DBDataStreamException //@P0C
{
if (length_ <= 6)
return null;
return converter.byteArrayToString (data_, offset_ + 131, 5);
}
final public byte getWarn5() throws DBDataStreamException // @E1A
{ // @E1A
if (length_ <= 6) // @E1A
return 0; // @E1A
return data_[offset_ + 124]; // @E1A
} // @E1A
} // End of DBReplySQLCA class
© 2015 - 2025 Weber Informatics LLC | Privacy Policy