⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 resultsetrow.java

📁 mysql5.0 JDBC 驱动 放在glassfish或者tomcat的lib文件夹下就可以了
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
			}

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

				if (!rs.useLegacyDatetimeCode) {
					return TimeUtil.fastDateCreate(year, month, day, targetCalendar);
				}
				
				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;
				}

				if (!rs.useLegacyDatetimeCode) {
					return TimeUtil.fastTimestampCreate(tz, year, month, day, hour, minute, 
							seconds, nanos);
				}
				
				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];
		}

		if (!rs.useLegacyDatetimeCode) {
			return TimeUtil.fastTimeCreate(hour, minute, seconds, targetCalendar);
		}
		
		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[offset + 2];
			day = bits[offset + 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;
		}

		if (!rs.useLegacyDatetimeCode) {
			return TimeUtil.fastTimestampCreate(tz, year, month,
					day, hour, minute, seconds, nanos);
		}
		
		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(targetCalendar, 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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -