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

📄 mysqlio.java

📁 基于java的oa系统
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
        if ((this.reusablePacket != null)                && (this.reusablePacket.getBufLength() > 1048576)) {            this.reusablePacket = new Buffer(this.connection.getNetBufferLength());        }    }    /**     * Re-use a packet to read from the MySQL server     *     * @param reuse DOCUMENT ME!     *     * @return DOCUMENT ME!     *     * @throws SQLException DOCUMENT ME!     * @throws SQLException DOCUMENT ME!     */    private final Buffer reuseAndReadPacket(Buffer reuse)        throws SQLException {        try {            reuse.setWasMultiPacket(false);            int lengthRead = readFully(mysqlInput, this.packetHeaderBuf, 0, 4);            if (lengthRead < 4) {                forceClose();                throw new IOException("Unexpected end of input stream");            }            int packetLength = ((int) (this.packetHeaderBuf[0] & 0xff))                + (((int) (this.packetHeaderBuf[1] & 0xff)) << 8)                + (((int) (this.packetHeaderBuf[2] & 0xff)) << 16);            byte multiPacketSeq = this.packetHeaderBuf[3];            //byte multiPacketSeq = (byte) this.mysqlInput.read();            // Set the Buffer to it's original state            reuse.setPosition(0);            reuse.setSendLength(0);            // Do we need to re-alloc the byte buffer?            //            // Note: We actually check the length of the buffer,            // rather than getBufLength(), because getBufLength() is not            // necesarily the actual length of the byte array            // used as the buffer            if (reuse.getByteBuffer().length <= packetLength) {                reuse.setByteBuffer(new byte[packetLength + 1]);            }            // Set the new length            reuse.setBufLength(packetLength);            // Read the data from the server            readFully(this.mysqlInput, reuse.getByteBuffer(), 0, packetLength);            boolean isMultiPacket = false;            if (packetLength == maxThreeBytes) {                reuse.setPosition((int) maxThreeBytes);                int packetEndPoint = packetLength;                // it's multi-packet                isMultiPacket = true;                lengthRead = readFully(mysqlInput, this.packetHeaderBuf, 0, 4);                if (lengthRead < 4) {                    forceClose();                    throw new IOException("Unexpected end of input stream");                }                packetLength = ((int) (this.packetHeaderBuf[0] & 0xff))                    + (((int) (this.packetHeaderBuf[1] & 0xff)) << 8)                    + (((int) (this.packetHeaderBuf[2] & 0xff)) << 16);                Buffer multiPacket = new Buffer(packetLength);                boolean firstMultiPkt = true;                while (true) {                    if (!firstMultiPkt) {                        lengthRead = readFully(mysqlInput,                                this.packetHeaderBuf, 0, 4);                        if (lengthRead < 4) {                            forceClose();                            throw new IOException(                                "Unexpected end of input stream");                        }                        packetLength = ((int) (this.packetHeaderBuf[0] & 0xff))                            + (((int) (this.packetHeaderBuf[1] & 0xff)) << 8)                            + (((int) (this.packetHeaderBuf[2] & 0xff)) << 16);                    } else {                        firstMultiPkt = false;                    }                    if (!this.useNewLargePackets && (packetLength == 1)) {                        clearInputStream();                        break;                    } else if (packetLength < this.maxThreeBytes) {                        byte newPacketSeq = this.packetHeaderBuf[3];                        if (newPacketSeq != (multiPacketSeq + 1)) {                            throw new IOException(                                "Packets received out of order");                        }                        multiPacketSeq = newPacketSeq;                        // Set the Buffer to it's original state                        multiPacket.setPosition(0);                        multiPacket.setSendLength(0);                        // Set the new length                        multiPacket.setBufLength(packetLength);                        // Read the data from the server                        byte[] byteBuf = multiPacket.getByteBuffer();                        int lengthToWrite = packetLength;                        int bytesRead = readFully(this.mysqlInput, byteBuf, 0,                                packetLength);                        if (bytesRead != lengthToWrite) {                            throw new SQLException(                                "Short read from server, expected "                                + lengthToWrite + " bytes, received only "                                + bytesRead + ".",                                SQLError.SQL_STATE_COMMUNICATION_LINK_FAILURE);                        }                        reuse.writeBytesNoNull(byteBuf, 0, lengthToWrite);                        packetEndPoint += lengthToWrite;                        break; // end of multipacket sequence                    }                    byte newPacketSeq = this.packetHeaderBuf[3];                    if (newPacketSeq != (multiPacketSeq + 1)) {                        throw new IOException("Packets received out of order");                    }                    multiPacketSeq = newPacketSeq;                    // Set the Buffer to it's original state                    multiPacket.setPosition(0);                    multiPacket.setSendLength(0);                    // Set the new length                    multiPacket.setBufLength(packetLength);                    // Read the data from the server                    byte[] byteBuf = multiPacket.getByteBuffer();                    int lengthToWrite = packetLength;                    int bytesRead = readFully(this.mysqlInput, byteBuf, 0,                            packetLength);                    if (bytesRead != lengthToWrite) {                        throw new SQLException(                            "Short read from server, expected " + lengthToWrite                            + " bytes, received only " + bytesRead + ".",                            SQLError.SQL_STATE_COMMUNICATION_LINK_FAILURE);                    }                    reuse.writeBytesNoNull(byteBuf, 0, lengthToWrite);                    packetEndPoint += lengthToWrite;                }                //reuse.writeByte((byte) 0);                reuse.setPosition(0);                reuse.setWasMultiPacket(true);            }            if (!isMultiPacket) {                reuse.getByteBuffer()[packetLength] = 0; // Null-termination            }            return reuse;        } catch (IOException ioEx) {            StringBuffer message = new StringBuffer(SQLError.get(                        SQLError.SQL_STATE_COMMUNICATION_LINK_FAILURE));            message.append(": ");            message.append(ioEx.getClass().getName());            message.append(", underlying cause: ");            message.append(ioEx.getMessage());            if (!this.connection.useParanoidErrorMessages()) {                message.append(Util.stackTraceToString(ioEx));            }            throw new java.sql.SQLException(message.toString(),                SQLError.SQL_STATE_COMMUNICATION_LINK_FAILURE, 0);        }    }    /**     * Send a packet to the MySQL server     *     * @param packet DOCUMENT ME!     *     * @throws SQLException DOCUMENT ME!     */    private final void send(Buffer packet) throws SQLException {        int l = packet.getPosition();        send(packet, l);        //         // Don't hold on to large packets        //        if (packet == this.sharedSendPacket) {            reclaimLargeSharedSendPacket();        }    }    private final void send(Buffer packet, int packetLen)        throws SQLException {        try {            if (packetLen > this.maxAllowedPacket) {                throw new PacketTooBigException(packetLen, this.maxAllowedPacket);            }            if ((serverMajorVersion >= 4) && (packetLen >= maxThreeBytes)) {                sendSplitPackets(packet);            } else {                this.packetSequence++;                Buffer packetToSend = packet;                packetToSend.setPosition(0);                if (this.useCompression) {                    packetToSend = compressPacket(packet, 0, packetLen,                            HEADER_LENGTH);                    packetLen = packetToSend.getPosition();                } else {                    packetToSend.writeLongInt(packetLen - HEADER_LENGTH);                    packetToSend.writeByte(this.packetSequence);                }                this.mysqlOutput.write(packetToSend.getByteBuffer(), 0,                    packetLen);                this.mysqlOutput.flush();            }            //             // Don't hold on to large packets            //            if (packet == this.sharedSendPacket) {                reclaimLargeSharedSendPacket();            }        } catch (IOException ioEx) {            StringBuffer message = new StringBuffer(SQLError.get(                        SQLError.SQL_STATE_COMMUNICATION_LINK_FAILURE));            message.append(": ");            message.append(ioEx.getClass().getName());            message.append(", underlying cause: ");            message.append(ioEx.getMessage());            if (!this.connection.useParanoidErrorMessages()) {                message.append(Util.stackTraceToString(ioEx));            }            throw new java.sql.SQLException(message.toString(),                SQLError.SQL_STATE_COMMUNICATION_LINK_FAILURE, 0);        }    }    /**     * Reads and sends a file to the server for LOAD DATA LOCAL INFILE     *     * @param fileName the file name to send.     *     * @return DOCUMENT ME!     *     * @throws SQLException DOCUMENT ME!     */    private final ResultSet sendFileToServer(String fileName)        throws SQLException {        Buffer filePacket = (loadFileBufRef == null) ? null                                                     : (Buffer) (loadFileBufRef            .get());        int packetLength = Math.min(this.connection.getMaxAllowedPacket()                - (HEADER_LENGTH * 3),                alignPacketSize(this.connection.getMaxAllowedPacket() - 16, 4096)                - (HEADER_LENGTH * 3));        //        // This packet may be _way_ too large to actually allocate,        // unforunately, LOAD DATA LOCAL INFILE requires this setup...        //        try {            if (filePacket == null) {                filePacket = new Buffer((int) (packetLength + HEADER_LENGTH));                loadFileBufRef = new SoftReference(filePacket);            }        } catch (OutOfMemoryError oom) {            // Attempt to do this, but it might not work...            // The server is expecting at least one packet, so we             // send an empty 'EOF' packet...            this.reusablePacket.clear();            send(this.reusablePacket);            throw new SQLException("Unable to allocate packet of size '"                + (packetLength + HEADER_LENGTH)                + "' for LOAD DATA LOCAL INFILE. Either increase heap space available to your JVM, or adjust the MySQL server variable 'max_allowed_packet'",                SQLError.SQL_STATE_MEMORY_ALLOCATION_FAILURE);        }        filePacket.clear();        send(filePacket, 0);        byte[] fileBuf = new byte[packetLength];        BufferedInputStream fileIn = null;        try {            fileIn = new BufferedInputStream(new FileInputStream(fileName));            int bytesRead = 0;            while ((bytesRead = fileIn.read(fileBuf)) != -1) {                filePacket.clear();                filePacket.writeBytesNoNull(fileBuf, 0, bytesRead);                send(filePacket);            }        } catch (IOException ioEx) {            StringBuffer messageBuf = new StringBuffer("Unable to open file ");            if (!this.connection.useParanoidErrorMessages()) {                messageBuf.append("'");                if (fileName != null) {                    messageBuf.append(fileName);                }                messageBuf.append("'");            }            messageBuf.append("for 'LOAD DATA LOCAL INFILE' command.");            if (!this.connection.useParanoidErrorMessages()) {                messageBuf.append("Due to underlying IOException: ");                messageBuf.append(Util.stackTraceToString(ioEx));            }            throw new SQLException(messageBuf.toString(),                SQLError.SQL_STATE_ILLEGAL_ARGUMENT);        } finally {            if (fileIn != null) {                try {                    fileIn.close();                } catch (Exception ex) {                    throw new SQLException("Unable to close local file during LOAD DATA LOCAL INFILE command",                        SQLError.SQL_STATE_GENERAL_ERROR);                }                fileIn = null;            } else {                // file open failed, but server needs one packet                filePacket.clear();                send(filePacket);            }        }        // send empty packet to mark EOF        filePacket.clear();        send(filePacket);        Buffer resultPacket = checkErrorPacket();        return buildResultSetWithUpdat

⌨️ 快捷键说明

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