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

📄 resultsetrow.java

📁 mysql5.0 JDBC 驱动 放在glassfish或者tomcat的lib文件夹下就可以了
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
				// 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)
							+ Messages.getString("ResultSet.___in_column__268")
							+ (columnIndex + 1),
							SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
				}

				hr = StringUtils.getInt(timeAsBytes, offset + 0, offset + 2);
				min = StringUtils.getInt(timeAsBytes, offset + 3, offset + 5);
				sec = (length == 5) ? 0 : StringUtils.getInt(timeAsBytes,
						offset + 6, offset + 8);
			}

			Calendar sessionCalendar = rs.getCalendarInstanceForSessionOrNew();

			if (!rs.useLegacyDatetimeCode) {
				return rs.fastTimeCreate(targetCalendar, hr, min, sec);
			}
			
			synchronized (sessionCalendar) {
				return TimeUtil.changeTimezone(conn, sessionCalendar,
						targetCalendar, rs.fastTimeCreate(sessionCalendar, hr,
								min, sec), conn.getServerTimezoneTZ(), tz,
						rollForward);
			}
		} catch (Exception ex) {
			SQLException sqlEx = SQLError.createSQLException(ex.toString(),
					SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
			sqlEx.initCause(ex);
			
			throw sqlEx;
		}
	}

	public abstract Time getTimeFast(int columnIndex, Calendar targetCalendar,
			TimeZone tz, boolean rollForward, ConnectionImpl conn,
			ResultSetImpl rs) throws SQLException;

	protected Timestamp getTimestampFast(int columnIndex,
			byte[] timestampAsBytes, int offset, int length,
			Calendar targetCalendar, TimeZone tz, boolean rollForward,
			ConnectionImpl conn, ResultSetImpl rs) throws SQLException {

		try {
			Calendar sessionCalendar = conn.getUseJDBCCompliantTimezoneShift() ? conn
					.getUtcCalendar()
					: rs.getCalendarInstanceForSessionOrNew();

			synchronized (sessionCalendar) {
				boolean allZeroTimestamp = true;

				boolean onlyTimePresent = false;

				for (int i = 0; i < length; i++) {
					if (timestampAsBytes[offset + i] == ':') {
						onlyTimePresent = true;
						break;
					}
				}

				for (int i = 0; i < length; i++) {
					byte b = timestampAsBytes[offset + i];

					if (b == ' ' || b == '-' || b == '/') {
						onlyTimePresent = false;
					}

					if (b != '0' && b != ' ' && b != ':' && b != '-'
							&& b != '/' && b != '.') {
						allZeroTimestamp = false;

						break;
					}
				}

				if (!onlyTimePresent && allZeroTimestamp) {

					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 '"
												+ timestampAsBytes
												+ "' can not be represented as java.sql.Timestamp",
										SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
					}

					if (!rs.useLegacyDatetimeCode) {
						return TimeUtil.fastTimestampCreate(tz, 1, 1, 1, 0, 0, 0, 0);
					}
					// We're left with the case of 'round' to a date Java _can_
					// represent, which is '0001-01-01'.
					return rs.fastTimestampCreate(null, 1, 1, 1, 0, 0, 0, 0);

				} else if (this.metadata[columnIndex].getMysqlType() == MysqlDefs.FIELD_TYPE_YEAR) {

					if (!rs.useLegacyDatetimeCode) {
						return TimeUtil.fastTimestampCreate(tz, StringUtils
								.getInt(timestampAsBytes, offset, 4), 1, 1, 0,
								0, 0, 0);
					}
					
					return TimeUtil.changeTimezone(conn, sessionCalendar,
						targetCalendar, rs.fastTimestampCreate(
								sessionCalendar, StringUtils.getInt(
										timestampAsBytes, offset, 4), 1, 1,
								0, 0, 0, 0), conn.getServerTimezoneTZ(),
						tz, rollForward);
				} else {
					if (timestampAsBytes[offset + length - 1] == '.') {
						length--;
					}

					// Convert from TIMESTAMP or DATE
					
					int year = 0;
					int month = 0;
					int day = 0;
					int hour = 0;
					int minutes = 0;
					int seconds = 0;
					int nanos = 0;
					
					switch (length) {
					case 26:
					case 25:
					case 24:
					case 23:
					case 22:
					case 21:
					case 20:
					case 19: {
						year = StringUtils.getInt(timestampAsBytes,
								offset + 0, offset + 4);
						month = StringUtils.getInt(timestampAsBytes,
								offset + 5, offset + 7);
						day = StringUtils.getInt(timestampAsBytes,
								offset + 8, offset + 10);
						hour = StringUtils.getInt(timestampAsBytes,
								offset + 11, offset + 13);
						minutes = StringUtils.getInt(timestampAsBytes,
								offset + 14, offset + 16);
						seconds = StringUtils.getInt(timestampAsBytes,
								offset + 17, offset + 19);

						nanos = 0;

						if (length > 19) {
							int decimalIndex = -1;

							for (int i = 0; i < length; i++) {
								if (timestampAsBytes[offset + i] == '.') {
									decimalIndex = i;
								}
							}

							if (decimalIndex != -1) {
								if ((decimalIndex + 2) <= length) {
									nanos = StringUtils.getInt(
											timestampAsBytes, decimalIndex + 1,
											offset + length);
									
									int numDigits = (offset + length) - (decimalIndex + 1);
									
									if (numDigits < 9) {
										int factor = (int)(Math.pow(10, 9 - numDigits));
										nanos = nanos * factor;
									}
								} else {
									throw new IllegalArgumentException(); // re-thrown
									// further
									// down
									// with
									// a
									// much better error message
								}
							}
						}

						break;
					}

					case 14: {
						year = StringUtils.getInt(timestampAsBytes,
								offset + 0, offset + 4);
						month = StringUtils.getInt(timestampAsBytes,
								offset + 4, offset + 6);
						day = StringUtils.getInt(timestampAsBytes,
								offset + 6, offset + 8);
						hour = StringUtils.getInt(timestampAsBytes,
								offset + 8, offset + 10);
						minutes = StringUtils.getInt(timestampAsBytes,
								offset + 10, offset + 12);
						seconds = StringUtils.getInt(timestampAsBytes,
								offset + 12, offset + 14);

						break;
					}

					case 12: {
						year = StringUtils.getInt(timestampAsBytes,
								offset + 0, offset + 2);

						if (year <= 69) {
							year = (year + 100);
						}
						
						year += 1900;

						month = StringUtils.getInt(timestampAsBytes,
								offset + 2, offset + 4);
						day = StringUtils.getInt(timestampAsBytes,
								offset + 4, offset + 6);
						hour = StringUtils.getInt(timestampAsBytes,
								offset + 6, offset + 8);
						minutes = StringUtils.getInt(timestampAsBytes,
								offset + 8, offset + 10);
						seconds = StringUtils.getInt(timestampAsBytes,
								offset + 10, offset + 12);

						break;
					}

					case 10: {
						boolean hasDash = false;

						for (int i = 0; i < length; i++) {
							if (timestampAsBytes[offset + i] == '-') {
								hasDash = true;
								break;
							}
						}

						if ((this.metadata[columnIndex].getMysqlType() == MysqlDefs.FIELD_TYPE_DATE)
								|| hasDash) {
							year = StringUtils.getInt(timestampAsBytes,
									offset + 0, offset + 4);
							month = StringUtils.getInt(timestampAsBytes,
									offset + 5, offset + 7);
							day = StringUtils.getInt(timestampAsBytes,
									offset + 8, offset + 10);
							hour = 0;
							minutes = 0;
						} else {
							year = StringUtils.getInt(timestampAsBytes,
									offset + 0, offset + 2);

							if (year <= 69) {
								year = (year + 100);
							}

							month = StringUtils.getInt(timestampAsBytes,
									offset + 2, offset + 4);
							day = StringUtils.getInt(timestampAsBytes,
									offset + 4, offset + 6);
							hour = StringUtils.getInt(timestampAsBytes,
									offset + 6, offset + 8);
							minutes = StringUtils.getInt(timestampAsBytes,
									offset + 8, offset + 10);

							year += 1900; // two-digit year
						}

						break;
					}

					case 8: {
						boolean hasColon = false;

						for (int i = 0; i < length; i++) {
							if (timestampAsBytes[offset + i] == ':') {
								hasColon = true;
								break;
							}
						}

						if (hasColon) {
							hour = StringUtils.getInt(timestampAsBytes,
									offset + 0, offset + 2);
							minutes = StringUtils.getInt(timestampAsBytes,
									offset + 3, offset + 5);
							seconds = StringUtils.getInt(timestampAsBytes,
									offset + 6, offset + 8);
							
							year = 1970;
							month = 1;
							day = 1;

							break;
						}

						year = StringUtils.getInt(timestampAsBytes,
								offset + 0, offset + 4);
						month = StringUtils.getInt(timestampAsBytes,
								offset + 4, offset + 6);
						day = StringUtils.getInt(timestampAsBytes,
								offset + 6, offset + 8);

						year -= 1900;
						month--;
						
						break;
					}

					case 6: {
						year = StringUtils.getInt(timestampAsBytes,
								offset + 0, offset + 2);

						if (year <= 69) {
							year = (year + 100);
						}

						year += 1900;
						
						month = StringUtils.getInt(timestampAsBytes,
								offset + 2, offset + 4);
						day = StringUtils.getInt(timestampAsBytes,
								offset + 4, offset + 6);

						break;
					}

					case 4: {
						year = StringUtils.getInt(timestampAsBytes,
								offset + 0, offset + 2);

						if (year <= 69) {
							year = (year + 100);
						}

						month = StringUtils.getInt(timestampAsBytes,
								offset + 2, offset + 4);
						
						day = 1;
						
						break;
					}

					case 2: {
						year = StringUtils.getInt(timestampAsBytes,
								offset + 0, offset + 2);

						if (year <= 69) {
							year = (year + 100);
						}

						year += 1900;
						month = 1;
						day = 1;
						
						break;
					}

					default:
						throw new java.sql.SQLException(
								"Bad format for Timestamp '"
										+ new String(timestampAsBytes)
										+ "' in column " + (columnIndex + 1)
										+ ".",
								SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
					}
					
					if (!rs.useLegacyDatetimeCode) {
						return TimeUtil.fastTimestampCreate(tz,
								year, month,
								day, hour, minutes, seconds,
								nanos);
					}
						
					return TimeUtil
							.changeTimezone(conn, sessionCalendar,
									targetCalendar, rs.fastTimestampCreate(
											sessionCalendar, year, month,
											day, hour, minutes, seconds,
											nanos), conn
											.getServerTimezoneTZ(), tz,
									rollForward);
				}
			}
		} catch (Exception e) {
			SQLException sqlEx = SQLError.createSQLException("Cannot convert value '"
					+ getString(columnIndex, "ISO8859_1", conn)
					+ "' from column " + (columnIndex + 1) + " to TIMESTAMP.",
					SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
			sqlEx.initCause(e);
			
			throw sqlEx;
		}
	}

	public abstract Timestamp getTimestampFast(int columnIndex,
			Calendar targetCalendar, TimeZone tz, boolean rollForward,
			ConnectionImpl conn, ResultSetImpl rs) throws SQLException;

	/**
	 * Could the column value at the given index (which starts at 0) be
	 * interpreted as a floating-point number (has +/-/E/e in it)?
	 * 
	 * @param index
	 *            of the column value (starting at 0) to check.
	 * 
	 * @return true if the column value at the given index looks like it might
	 *         be a floating-point number, false if not.
	 * 
	 * @throws SQLException
	 *             if an error occurs
	 */
	public abstract boolean isFloatingPointNumber(int index)
			throws SQLException;

	/**
	 * Is the column value at the given index (which starts at 0) NULL?
	 * 
	 * @param index
	 *            of the column value (starting at 0) to check.
	 * 
	 * @return true if the column value is NULL, false if not.
	 * 
	 * @throws SQLException
	 *             if an error occurs
	 */
	public abstract boolean isNull(int index) throws SQLException;

	/**
	 * Returns the length of the column at the given index (which starts at 0).
	 * 
	 * @param index
	 *            of the column value (starting at 0) for which to return the
	 *            length.
	 * @return the length of the requested column, 0 if null (clients of this
	 *         interface should use isNull() beforehand to determine status of
	 *         NULL values in the column).
	 * 
	 * @throws SQLException
	 */
	public abstract long length(int index) throws SQLException;

	/**
	 * Sets the given column value (only works currently with
	 * ByteArrayRowHolder).
	 * 
	 * @param index
	 *            index of the column value (starting at 0) to set.
	 * @param value
	 *            the (raw) value to set
	 * 
	 * @throws SQLException
	 *             if an error occurs, or the concrete RowHolder doesn't support
	 *             this operation.
	 */
	public abstract void setColumnValue(int index, byte[] value)
			throws SQLException;

	public ResultSetRow setMetadata(Field[] f) throws SQLException {
		this.metadata = f;
		
		return this;
	}
}

⌨️ 快捷键说明

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