?? resultsetrow.java
字號:
}
return rs.getNativeTimeViaParseConversion(columnIndex + 1,
targetCalendar, tz, rollForward);
case Types.DATE:
if (populatedFromDateTimeValue) {
if ((year == 0) && (month == 0) && (day == 0)) {
if (ConnectionPropertiesImpl.ZERO_DATETIME_BEHAVIOR_CONVERT_TO_NULL
.equals(conn.getZeroDateTimeBehavior())) {
return null;
} else if (ConnectionPropertiesImpl.ZERO_DATETIME_BEHAVIOR_EXCEPTION
.equals(conn.getZeroDateTimeBehavior())) {
throw new SQLException(
"Value '0000-00-00' can not be represented as java.sql.Date",
SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
}
year = 1;
month = 1;
day = 1;
}
return rs
.fastDateCreate(
rs.getCalendarInstanceForSessionOrNew(), year,
month, day);
}
return rs.getNativeDateViaParseConversion(columnIndex + 1);
case Types.TIMESTAMP:
if (populatedFromDateTimeValue) {
if ((year == 0) && (month == 0) && (day == 0)) {
if (ConnectionPropertiesImpl.ZERO_DATETIME_BEHAVIOR_CONVERT_TO_NULL
.equals(conn.getZeroDateTimeBehavior())) {
return null;
} else if (ConnectionPropertiesImpl.ZERO_DATETIME_BEHAVIOR_EXCEPTION
.equals(conn.getZeroDateTimeBehavior())) {
throw new SQLException(
"Value '0000-00-00' can not be represented as java.sql.Timestamp",
SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
}
year = 1;
month = 1;
day = 1;
}
Timestamp ts = rs.fastTimestampCreate(rs
.getCalendarInstanceForSessionOrNew(), year, month,
day, hour, minute, seconds, nanos);
Timestamp adjustedTs = TimeUtil.changeTimezone(conn,
sessionCalendar, targetCalendar, ts, conn
.getServerTimezoneTZ(), tz, rollForward);
return adjustedTs;
}
return rs.getNativeTimestampViaParseConversion(columnIndex + 1,
targetCalendar, tz, rollForward);
default:
throw new SQLException(
"Internal error - conversion method doesn't support this type",
SQLError.SQL_STATE_GENERAL_ERROR);
}
}
public abstract Object getNativeDateTimeValue(int columnIndex,
Calendar targetCalendar, int jdbcType, int mysqlType,
TimeZone tz, boolean rollForward, ConnectionImpl conn, ResultSetImpl rs)
throws SQLException;
protected double getNativeDouble(byte[] bits, int offset) {
long valueAsLong = (bits[offset + 0] & 0xff)
| ((long) (bits[offset + 1] & 0xff) << 8)
| ((long) (bits[offset + 2] & 0xff) << 16)
| ((long) (bits[offset + 3] & 0xff) << 24)
| ((long) (bits[offset + 4] & 0xff) << 32)
| ((long) (bits[offset + 5] & 0xff) << 40)
| ((long) (bits[offset + 6] & 0xff) << 48)
| ((long) (bits[offset + 7] & 0xff) << 56);
return Double.longBitsToDouble(valueAsLong);
}
public abstract double getNativeDouble(int columnIndex) throws SQLException;
protected float getNativeFloat(byte[] bits, int offset) {
int asInt = (bits[offset + 0] & 0xff)
| ((bits[offset + 1] & 0xff) << 8)
| ((bits[offset + 2] & 0xff) << 16)
| ((bits[offset + 3] & 0xff) << 24);
return Float.intBitsToFloat(asInt);
}
public abstract float getNativeFloat(int columnIndex) throws SQLException;
protected int getNativeInt(byte[] bits, int offset) {
int valueAsInt = (bits[offset + 0] & 0xff)
| ((bits[offset + 1] & 0xff) << 8)
| ((bits[offset + 2] & 0xff) << 16)
| ((bits[offset + 3] & 0xff) << 24);
return valueAsInt;
}
public abstract int getNativeInt(int columnIndex) throws SQLException;
protected long getNativeLong(byte[] bits, int offset) {
long valueAsLong = (bits[offset + 0] & 0xff)
| ((long) (bits[offset + 1] & 0xff) << 8)
| ((long) (bits[offset + 2] & 0xff) << 16)
| ((long) (bits[offset + 3] & 0xff) << 24)
| ((long) (bits[offset + 4] & 0xff) << 32)
| ((long) (bits[offset + 5] & 0xff) << 40)
| ((long) (bits[offset + 6] & 0xff) << 48)
| ((long) (bits[offset + 7] & 0xff) << 56);
return valueAsLong;
}
public abstract long getNativeLong(int columnIndex) throws SQLException;
protected short getNativeShort(byte[] bits, int offset) {
short asShort = (short) ((bits[offset + 0] & 0xff) | ((bits[offset + 1] & 0xff) << 8));
return asShort;
}
public abstract short getNativeShort(int columnIndex) throws SQLException;
protected Time getNativeTime(int columnIndex, byte[] bits, int offset,
int length, Calendar targetCalendar, TimeZone tz,
boolean rollForward, ConnectionImpl conn, ResultSetImpl rs)
throws SQLException {
int hour = 0;
int minute = 0;
int seconds = 0;
if (length != 0) {
// bits[0] // skip tm->neg
// binaryData.readLong(); // skip daysPart
hour = bits[offset + 5];
minute = bits[offset + 6];
seconds = bits[offset + 7];
}
Calendar sessionCalendar = rs.getCalendarInstanceForSessionOrNew();
synchronized (sessionCalendar) {
Time time = TimeUtil.fastTimeCreate(sessionCalendar, hour, minute,
seconds);
Time adjustedTime = TimeUtil.changeTimezone(conn, sessionCalendar,
targetCalendar, time, conn.getServerTimezoneTZ(), tz,
rollForward);
return adjustedTime;
}
}
public abstract Time getNativeTime(int columnIndex,
Calendar targetCalendar, TimeZone tz, boolean rollForward,
ConnectionImpl conn, ResultSetImpl rs) throws SQLException;
protected Timestamp getNativeTimestamp(byte[] bits, int offset, int length,
Calendar targetCalendar, TimeZone tz, boolean rollForward,
ConnectionImpl conn, ResultSetImpl rs) throws SQLException {
int year = 0;
int month = 0;
int day = 0;
int hour = 0;
int minute = 0;
int seconds = 0;
int nanos = 0;
if (length != 0) {
year = (bits[offset + 0] & 0xff) | ((bits[offset + 1] & 0xff) << 8);
month = bits[2];
day = bits[3];
if (length > 4) {
hour = bits[offset + 4];
minute = bits[offset + 5];
seconds = bits[offset + 6];
}
if (length > 7) {
// MySQL uses microseconds
nanos = ((bits[offset + 7] & 0xff)
| ((bits[offset + 8] & 0xff) << 8)
| ((bits[offset + 9] & 0xff) << 16) | ((bits[offset + 10] & 0xff) << 24)) * 1000;
}
}
if ((year == 0) && (month == 0) && (day == 0)) {
if (ConnectionPropertiesImpl.ZERO_DATETIME_BEHAVIOR_CONVERT_TO_NULL
.equals(conn.getZeroDateTimeBehavior())) {
return null;
} else if (ConnectionPropertiesImpl.ZERO_DATETIME_BEHAVIOR_EXCEPTION
.equals(conn.getZeroDateTimeBehavior())) {
throw SQLError
.createSQLException(
"Value '0000-00-00' can not be represented as java.sql.Timestamp",
SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
}
year = 1;
month = 1;
day = 1;
}
Calendar sessionCalendar = conn.getUseJDBCCompliantTimezoneShift() ? conn
.getUtcCalendar()
: rs.getCalendarInstanceForSessionOrNew();
synchronized (sessionCalendar) {
Timestamp ts = rs.fastTimestampCreate(sessionCalendar, year, month,
day, hour, minute, seconds, nanos);
Timestamp adjustedTs = TimeUtil.changeTimezone(conn,
sessionCalendar, targetCalendar, ts, conn
.getServerTimezoneTZ(), tz, rollForward);
return adjustedTs;
}
}
public abstract Timestamp getNativeTimestamp(int columnIndex,
Calendar targetCalendar, TimeZone tz, boolean rollForward,
ConnectionImpl conn, ResultSetImpl rs) throws SQLException;
public abstract Reader getReader(int columnIndex) throws SQLException;
/**
* Returns the value at the given column (index starts at 0) as a
* java.lang.String with the requested encoding, using the given
* ConnectionImpl to find character converters.
*
* @param index
* of the column value (starting at 0) to return.
* @param encoding
* the Java name for the character encoding
* @param conn
* the connection that created this result set row
*
* @return the value for the given column (including NULL if it is) as a
* String
*
* @throws SQLException
* if an error occurs while retrieving the value.
*/
public abstract String getString(int index, String encoding,
ConnectionImpl conn) throws SQLException;
/**
* Convenience method for turning a byte[] into a string with the given
* encoding.
*
* @param encoding
* the Java encoding name for the byte[] -> char conversion
* @param conn
* the ConnectionImpl that created the result set
* @param value
* the String value as a series of bytes, encoded using
* "encoding"
* @param offset
* where to start the decoding
* @param length
* how many bytes to decode
*
* @return the String as decoded from bytes with the given encoding
*
* @throws SQLException
* if an error occurs
*/
protected String getString(String encoding, ConnectionImpl conn,
byte[] value, int offset, int length) throws SQLException {
String stringVal = null;
if ((conn != null) && conn.getUseUnicode()) {
try {
if (encoding == null) {
stringVal = new String(value);
} else {
SingleByteCharsetConverter converter = conn
.getCharsetConverter(encoding);
if (converter != null) {
stringVal = converter.toString(value, offset, length);
} else {
stringVal = new String(value, offset, length, encoding);
}
}
} catch (java.io.UnsupportedEncodingException E) {
throw SQLError
.createSQLException(
Messages
.getString("ResultSet.Unsupported_character_encoding____101") //$NON-NLS-1$
+ encoding + "'.", "0S100");
}
} else {
stringVal = StringUtils.toAsciiString(value, offset, length);
}
return stringVal;
}
protected Time getTimeFast(int columnIndex, byte[] timeAsBytes, int offset,
int length, Calendar targetCalendar, TimeZone tz,
boolean rollForward, ConnectionImpl conn, ResultSetImpl rs)
throws SQLException {
int hr = 0;
int min = 0;
int sec = 0;
try {
if (timeAsBytes == null) {
return null;
}
boolean allZeroTime = true;
boolean onlyTimePresent = false;
for (int i = 0; i < length; i++) {
if (timeAsBytes[offset + i] == ':') {
onlyTimePresent = true;
break;
}
}
for (int i = 0; i < length; i++) {
byte b = timeAsBytes[offset + i];
if (b == ' ' || b == '-' || b == '/') {
onlyTimePresent = false;
}
if (b != '0' && b != ' ' && b != ':' && b != '-' && b != '/'
&& b != '.') {
allZeroTime = false;
break;
}
}
if (!onlyTimePresent && allZeroTime) {
if (ConnectionPropertiesImpl.ZERO_DATETIME_BEHAVIOR_CONVERT_TO_NULL
.equals(conn.getZeroDateTimeBehavior())) {
return null;
} else if (ConnectionPropertiesImpl.ZERO_DATETIME_BEHAVIOR_EXCEPTION
.equals(conn.getZeroDateTimeBehavior())) {
throw SQLError.createSQLException("Value '"
+ new String(timeAsBytes)
+ "' can not be represented as java.sql.Time",
SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
}
// We're left with the case of 'round' to a time Java _can_
// represent, which is '00:00:00'
return rs.fastTimeCreate(null, 0, 0, 0);
}
Field timeColField = this.metadata[columnIndex];
if (timeColField.getMysqlType() == MysqlDefs.FIELD_TYPE_TIMESTAMP) {
switch (length) {
case 19: { // YYYY-MM-DD hh:mm:ss
hr = StringUtils.getInt(timeAsBytes, offset + length - 8,
offset + length - 6);
min = StringUtils.getInt(timeAsBytes, offset + length - 5,
offset + length - 3);
sec = StringUtils.getInt(timeAsBytes, offset + length - 2,
offset + length);
}
break;
case 14:
case 12: {
hr = StringUtils.getInt(timeAsBytes, offset + length - 6,
offset + length - 4);
min = StringUtils.getInt(timeAsBytes, offset + length - 4,
offset + length - 2);
sec = StringUtils.getInt(timeAsBytes, offset + length - 2,
offset + length);
}
break;
case 10: {
hr = StringUtils
.getInt(timeAsBytes, offset + 6, offset + 8);
min = StringUtils.getInt(timeAsBytes, offset + 8,
offset + 10);
sec = 0;
}
break;
default:
throw SQLError
.createSQLException(
Messages
.getString("ResultSet.Timestamp_too_small_to_convert_to_Time_value_in_column__257") //$NON-NLS-1$
+ (columnIndex + 1)
+ "("
+ timeColField + ").",
SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
} /* endswitch */
SQLWarning precisionLost = new SQLWarning(
Messages
.getString("ResultSet.Precision_lost_converting_TIMESTAMP_to_Time_with_getTime()_on_column__261") //$NON-NLS-1$
+ columnIndex + "(" + timeColField + ").");
/*
* if (this.warningChain == null) { this.warningChain =
* precisionLost; } else {
* this.warningChain.setNextWarning(precisionLost); }
*/
} else if (timeColField.getMysqlType() == MysqlDefs.FIELD_TYPE_DATETIME) {
hr = StringUtils.getInt(timeAsBytes, offset + 11, offset + 13);
min = StringUtils.getInt(timeAsBytes, offset + 14, offset + 16);
sec = StringUtils.getInt(timeAsBytes, offset + 17, offset + 19);
SQLWarning precisionLost = new SQLWarning(
Messages
.getString("ResultSet.Precision_lost_converting_DATETIME_to_Time_with_getTime()_on_column__264") //$NON-NLS-1$
+ (columnIndex + 1) + "(" + timeColField + ").");
/*
* if (this.warningChain == null) { this.warningChain =
* precisionLost; } else {
* this.warningChain.setNextWarning(precisionLost); }
*/
} else if (timeColField.getMysqlType() == MysqlDefs.FIELD_TYPE_DATE) {
return rs.fastTimeCreate(null, 0, 0, 0); // midnight on the
// given
// date
} else {
// convert a String to a Time
if ((length != 5) && (length != 8)) {
throw SQLError.createSQLException(Messages
.getString("ResultSet.Bad_format_for_Time____267") //$NON-NLS-1$
+ new String(timeAsBytes)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -