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

📄 serverpreparedstatement.java

📁 mysql5.0 JDBC 驱动 放在glassfish或者tomcat的lib文件夹下就可以了
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
							ProfilerEvent.TYPE_EXECUTE,							"", this.currentCatalog, //$NON-NLS-1$							this.connectionId, this.statementId, -1, System									.currentTimeMillis(), (int) (mysql									.getCurrentTimeNanosOrMillis() - begin),							mysql.getQueryTimingUnits(), null, new Throwable(),							truncateQueryToLog(asSql(true))));				}					com.mysql.jdbc.ResultSetInternalMethods rs = mysql.readAllResults(this,						maxRowsToRetrieve, this.resultSetType,						this.resultSetConcurrency, createStreamingResultSet,						this.currentCatalog, resultPacket, true, this.fieldCount,						metadataFromCache);								if (this.profileSQL) {					long fetchEndTime = mysql.getCurrentTimeNanosOrMillis();					this.eventSink.consumeEvent(new ProfilerEvent(							ProfilerEvent.TYPE_FETCH,							"", this.currentCatalog, this.connection.getId(), //$NON-NLS-1$							getId(), 0 /* FIXME rs.resultId */, System.currentTimeMillis(),							(fetchEndTime - queryEndTime), mysql									.getQueryTimingUnits(), null,							new Throwable(), null));				}					if (queryWasSlow && this.connection.getExplainSlowQueries()) {					String queryAsString = asSql(true);					mysql.explainSlowQuery(queryAsString.getBytes(),							queryAsString);				}								if (!createStreamingResultSet && 						this.serverNeedsResetBeforeEachExecution) {					serverResetStatement(); // clear any long data...				}									this.sendTypesToServer = false;				this.results = rs;					if (mysql.hadWarnings()) {		            mysql.scanForAndThrowDataTruncation();		        }								return rs;			} finally {				if (timeoutTask != null) {					timeoutTask.cancel();				}			}		}	}	/**	 * Sends stream-type data parameters to the server.	 * 	 * <pre>	 * 	 *  Long data handling:	 * 	 *  - Server gets the long data in pieces with command type 'COM_LONG_DATA'.	 *  - The packet recieved will have the format as:	 *    [COM_LONG_DATA:     1][STMT_ID:4][parameter_number:2][type:2][data]	 *  - Checks if the type is specified by client, and if yes reads the type,	 *    and  stores the data in that format.	 *  - It's up to the client to check for read data ended. The server doesn't	 *    care;  and also server doesn't notify to the client that it got the	 *    data  or not; if there is any error; then during execute; the error	 *    will  be returned	 *  	 * </pre>	 * 	 * @param parameterIndex	 *            DOCUMENT ME!	 * @param longData	 *            DOCUMENT ME!	 * 	 * @throws SQLException	 *             if an error occurs.	 */	private void serverLongData(int parameterIndex, BindValue longData)			throws SQLException {		synchronized (this.connection.getMutex()) {			MysqlIO mysql = this.connection.getIO();			Buffer packet = mysql.getSharedSendPacket();			Object value = longData.value;			if (value instanceof byte[]) {				packet.clear();				packet.writeByte((byte) MysqlDefs.COM_LONG_DATA);				packet.writeLong(this.serverStatementId);				packet.writeInt((parameterIndex));				packet.writeBytesNoNull((byte[]) longData.value);				mysql.sendCommand(MysqlDefs.COM_LONG_DATA, null, packet, true,						null, 0);			} else if (value instanceof InputStream) {				storeStream(mysql, parameterIndex, packet, (InputStream) value);			} else if (value instanceof java.sql.Blob) {				storeStream(mysql, parameterIndex, packet,						((java.sql.Blob) value).getBinaryStream());			} else if (value instanceof Reader) {				storeReader(mysql, parameterIndex, packet, (Reader) value);			} else {				throw SQLError.createSQLException(Messages						.getString("ServerPreparedStatement.18") //$NON-NLS-1$						+ value.getClass().getName() + "'", //$NON-NLS-1$						SQLError.SQL_STATE_ILLEGAL_ARGUMENT);			}		}	}	private void serverPrepare(String sql) throws SQLException {		synchronized (this.connection.getMutex()) {			MysqlIO mysql = this.connection.getIO();			if (this.connection.getAutoGenerateTestcaseScript()) {				dumpPrepareForTestcase();			}			try {				long begin = 0;				if (StringUtils.startsWithIgnoreCaseAndWs(sql, "LOAD DATA")) { //$NON-NLS-1$					this.isLoadDataQuery = true;				} else {					this.isLoadDataQuery = false;				}				if (this.connection.getProfileSql()) {					begin = System.currentTimeMillis();				}				String characterEncoding = null;				String connectionEncoding = this.connection.getEncoding();				if (!this.isLoadDataQuery && this.connection.getUseUnicode()						&& (connectionEncoding != null)) {					characterEncoding = connectionEncoding;				}				Buffer prepareResultPacket = mysql.sendCommand(						MysqlDefs.COM_PREPARE, sql, null, false,						characterEncoding, 0);				if (this.connection.versionMeetsMinimum(4, 1, 1)) {					// 4.1.1 and newer use the first byte					// as an 'ok' or 'error' flag, so move					// the buffer pointer past it to					// start reading the statement id.					prepareResultPacket.setPosition(1);				} else {					// 4.1.0 doesn't use the first byte as an					// 'ok' or 'error' flag					prepareResultPacket.setPosition(0);				}				this.serverStatementId = prepareResultPacket.readLong();				this.fieldCount = prepareResultPacket.readInt();				this.parameterCount = prepareResultPacket.readInt();				this.parameterBindings = new BindValue[this.parameterCount];				for (int i = 0; i < this.parameterCount; i++) {					this.parameterBindings[i] = new BindValue();				}				this.connection.incrementNumberOfPrepares();				if (this.profileSQL) {					this.eventSink.consumeEvent(new ProfilerEvent(							ProfilerEvent.TYPE_PREPARE,							"", this.currentCatalog, //$NON-NLS-1$							this.connectionId, this.statementId, -1,							System.currentTimeMillis(), 							mysql.getCurrentTimeNanosOrMillis() - begin, 							mysql.getQueryTimingUnits(), null,							new Throwable(), truncateQueryToLog(sql)));				}				if (this.parameterCount > 0) {					if (this.connection.versionMeetsMinimum(4, 1, 2)							&& !mysql.isVersion(5, 0, 0)) {						this.parameterFields = new Field[this.parameterCount];						Buffer metaDataPacket = mysql.readPacket();						int i = 0;						while (!metaDataPacket.isLastDataPacket()								&& (i < this.parameterCount)) {							this.parameterFields[i++] = mysql.unpackField(									metaDataPacket, false);							metaDataPacket = mysql.readPacket();						}					}				}				if (this.fieldCount > 0) {					this.resultFields = new Field[this.fieldCount];					Buffer fieldPacket = mysql.readPacket();					int i = 0;					// Read in the result set column information					while (!fieldPacket.isLastDataPacket()							&& (i < this.fieldCount)) {						this.resultFields[i++] = mysql.unpackField(fieldPacket,								false);						fieldPacket = mysql.readPacket();					}				}			} catch (SQLException sqlEx) {				if (this.connection.getDumpQueriesOnException()) {					StringBuffer messageBuf = new StringBuffer(this.originalSql							.length() + 32);					messageBuf							.append("\n\nQuery being prepared when exception was thrown:\n\n");					messageBuf.append(this.originalSql);					sqlEx = ConnectionImpl.appendMessageToException(sqlEx,							messageBuf.toString());				}				throw sqlEx;			} finally {				// Leave the I/O channel in a known state...there might be				// packets out there				// that we're not interested in				this.connection.getIO().clearInputStream();			}		}	}	private String truncateQueryToLog(String sql) {		String query = null;				if (sql.length() > this.connection.getMaxQuerySizeToLog()) {			StringBuffer queryBuf = new StringBuffer(					this.connection.getMaxQuerySizeToLog() + 12);			queryBuf.append(sql.substring(0, this.connection.getMaxQuerySizeToLog()));			queryBuf.append(Messages.getString("MysqlIO.25"));						query = queryBuf.toString();		} else {			query = sql;		}				return query;	}	private void serverResetStatement() throws SQLException {		synchronized (this.connection.getMutex()) {			MysqlIO mysql = this.connection.getIO();			Buffer packet = mysql.getSharedSendPacket();			packet.clear();			packet.writeByte((byte) MysqlDefs.COM_RESET_STMT);			packet.writeLong(this.serverStatementId);			try {				mysql.sendCommand(MysqlDefs.COM_RESET_STMT, null, packet,						!this.connection.versionMeetsMinimum(4, 1, 2), null, 0);			} catch (SQLException sqlEx) {				throw sqlEx;			} catch (Exception ex) {				SQLException sqlEx = SQLError.createSQLException(ex.toString(),						SQLError.SQL_STATE_GENERAL_ERROR);				sqlEx.initCause(ex);								throw sqlEx;			} finally {				mysql.clearInputStream();			}		}	}	/**	 * @see java.sql.PreparedStatement#setArray(int, java.sql.Array)	 */	public void setArray(int i, Array x) throws SQLException {		throw SQLError.notImplemented();	}	/**	 * @see java.sql.PreparedStatement#setAsciiStream(int, java.io.InputStream,	 *      int)	 */	public void setAsciiStream(int parameterIndex, InputStream x, int length)			throws SQLException {		checkClosed();		if (x == null) {			setNull(parameterIndex, java.sql.Types.BINARY);		} else {			BindValue binding = getBinding(parameterIndex, true);			setType(binding, MysqlDefs.FIELD_TYPE_BLOB);			binding.value = x;			binding.isNull = false;			binding.isLongData = true;			if (this.connection.getUseStreamLengthsInPrepStmts()) {				binding.bindLength = length;			} else {				binding.bindLength = -1;			}		}	}	/**	 * @see java.sql.PreparedStatement#setBigDecimal(int, java.math.BigDecimal)	 */	public void setBigDecimal(int parameterIndex, BigDecimal x)			throws SQLException {		checkClosed();		if (x == null) {			setNull(parameterIndex, java.sql.Types.DECIMAL);		} else {					BindValue binding = getBinding(parameterIndex, false);			if (this.connection.versionMeetsMinimum(5, 0, 3)) {				setType(binding, MysqlDefs.FIELD_TYPE_NEW_DECIMAL);			} else {				setType(binding, this.stringTypeCode);			}			binding.value = StringUtils				.fixDecimalExponent(StringUtils.consistentToString(x));			binding.isNull = false;			binding.isLongData = false;		}	}	/**	 * @see java.sql.PreparedStatement#setBinaryStream(int, java.io.InputStream,	 *      int)	 */	public void setBinaryStream(int parameterIndex, InputStream x, int length)			throws SQLException {		checkClosed();		if (x == null) {			setNull(parameterIndex, java.sql.Types.BINARY);		} else {			BindValue binding = getBinding(parameterIndex, true);			setType(binding, MysqlDefs.FIELD_TYPE_BLOB);			binding.value = x;			binding.isNull = false;			binding.isLongData = true;			if (this.connection.getUseStreamLengthsInPrepStmts()) {				binding.bindLength = length;			} else {				binding.bindLength = -1;			}		}	}	/**	 * @see java.sql.PreparedStatement#setBlob(int, java.sql.Blob)	 */	public void setBlob(int parameterIndex, Blob x) throws SQLException {		checkClosed();		if (x == null) {			setNull(parameterIndex, java.sql.Types.BINARY);		} else {			BindValue binding = getBinding(parameterIndex, true);			setType(binding, MysqlDefs.FIELD_TYPE_BLOB);			binding.value = x;			binding.isNull = false;			binding.isLongData = true;			if (this.connection.getUseStreamLengthsInPrepStmts()) {				binding.bindLength = x.length();			} else {				binding.bindLength = -1;			}		}	}	/**	 * @see java.sql.PreparedStatement#setBoolean(int, boolean)	 */	public void setBoolean(int parameterIndex, boolean x) throws SQLException {		setByte(parameterIndex, (x ? (byte) 1 : (byte) 0));	}	/**	 * @see java.sql.PreparedStatement#setByte(int, byte)	 */	public void setByte(int parameterIndex, byte x) throws SQLException {		checkClosed();		BindValue binding = getBinding(parameterIndex, false);		setType(binding, MysqlDefs.FIELD_TYPE_TINY);		binding.value = null;		binding.byteBinding = x;		binding.isNull = false;		binding.isLongData = false;	}	/**	 * @see java.sql.PreparedStatement#setBytes(int, byte)	 */	public void setBytes(int parameterIndex, byte[] x) throws SQLException {		checkClosed();		if (x == null) {			setNull(parameterIndex, java.sql.Types.BINARY);		} else {			BindValue binding = getBinding(parameterIndex, false);			setType(binding, MysqlDefs.FIELD_TYPE_VAR_STRING);			binding.value = x;			binding.isNull = false;			binding.isLongData = false;		}	}	/**	 * @see java.sql.PreparedStatement#setCharacterStream(int, java.io.Reader,	 *      int)	 */	public void setCharacterStream(int parameterIndex, Reader reader, int length)			throws SQLException {		checkClosed();		if (reader == null) {			setNull(parameterIndex, java.sql.Types.BINARY);		} else {			BindValue binding = getBinding(parameterIndex, true);			setType(binding, MysqlDefs.FIELD_TYPE_BLOB);			binding.value = reader;			binding.isNull = false;			binding.isLongData = true;			if (this.connection.getUseStreamLengthsInPrepStmts()) {				binding.bindLength = length;			} else {				binding.bindLength = -1;			}		}	}	/**	 * @see java.sql.PreparedStatement#setClob(int, java.sql.Clob)	 */	public void setClob(int parameterIndex, Clob x) throws SQLException {		checkClosed();		if (x == null) {			setNull(parameterIndex, java.sql.Types.BINARY);		} else {			BindValue binding = getBinding(parameterIndex, true);			setType(binding, MysqlDefs.FIELD_TYPE_BLOB);			binding.value = x.getCharacterStream();			binding.isNull = false;

⌨️ 快捷键说明

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