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

📄 tdscore.java

📁 第三方的SQL Server and Sybase的jdbc dirver,速度更快
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
                inBatch = false;            }        }    }    /**     * Prepares the SQL for use with Microsoft server.     *     * @param sql                  the SQL statement to prepare.     * @param params               the actual parameter list     * @param needCursor           true if a cursorprepare is required     * @param resultSetType        value of the resultSetType parameter when     *                             the Statement was created     * @param resultSetConcurrency value of the resultSetConcurrency parameter     *                             whenthe Statement was created     * @return name of the procedure or prepared statement handle.     * @exception SQLException     */    String microsoftPrepare(String sql,                            ParamInfo[] params,                            boolean needCursor,                            int resultSetType,                            int resultSetConcurrency)            throws SQLException {        //        checkOpen();        messages.clearWarnings();        int prepareSql = connection.getPrepareSql();        if (prepareSql == TEMPORARY_STORED_PROCEDURES) {            StringBuffer spSql = new StringBuffer(sql.length() + 32 + params.length * 15);            String procName = connection.getProcName();            spSql.append("create proc ");            spSql.append(procName);            spSql.append(' ');            for (int i = 0; i < params.length; i++) {                spSql.append("@P");                spSql.append(i);                spSql.append(' ');                spSql.append(params[i].sqlType);                if (i + 1 < params.length) {                    spSql.append(',');                }            }            // continue building proc            spSql.append(" as ");            spSql.append(Support.substituteParamMarkers(sql, params));            try {                submitSQL(spSql.toString());                return procName;            } catch (SQLException e) {                if ("08S01".equals(e.getSQLState())) {                    // Serious (I/O) error, rethrow                    throw e;                }                // This exception probably caused by failure to prepare                // Add a warning                messages.addWarning((SQLWarning) Support.linkException(                        new SQLWarning(                                Messages.get("error.prepare.prepfailed",                                        e.getMessage()),                                e.getSQLState(), e.getErrorCode()),                        e));            }        } else if (prepareSql == PREPARE) {            int scrollOpt, ccOpt;            ParamInfo prepParam[] = new ParamInfo[needCursor ? 6 : 4];            // Setup prepare handle param            prepParam[0] = new ParamInfo(Types.INTEGER, null, ParamInfo.OUTPUT);            // Setup parameter descriptor param            prepParam[1] = new ParamInfo(Types.LONGVARCHAR,                    Support.getParameterDefinitions(params),                    ParamInfo.UNICODE);            // Setup sql statemement param            prepParam[2] = new ParamInfo(Types.LONGVARCHAR,                    Support.substituteParamMarkers(sql, params),                    ParamInfo.UNICODE);            // Setup options param            prepParam[3] = new ParamInfo(Types.INTEGER, new Integer(1), ParamInfo.INPUT);            if (needCursor) {                // Select the correct type of Server side cursor to                // match the scroll and concurrency options.                scrollOpt = MSCursorResultSet.getCursorScrollOpt(resultSetType,                        resultSetConcurrency, true);                ccOpt = MSCursorResultSet.getCursorConcurrencyOpt(resultSetConcurrency);                // Setup scroll options parameter                prepParam[4] = new ParamInfo(Types.INTEGER,                        new Integer(scrollOpt),                        ParamInfo.OUTPUT);                // Setup concurrency options parameter                prepParam[5] = new ParamInfo(Types.INTEGER,                        new Integer(ccOpt),                        ParamInfo.OUTPUT);            }            columns = null; // Will be populated if preparing a select            try {                executeSQL(null, needCursor ? "sp_cursorprepare" : "sp_prepare",                        prepParam, false, 0, -1, -1, true);                int resultCount = 0;                while (!endOfResponse) {                    nextToken();                    if (isResultSet()) {                        resultCount++;                    }                }                // columns will now hold meta data for any select statements                if (resultCount != 1) {                    // More than one result set was returned or none                    // therefore metadata not available or unsafe.                    columns = null;                }                Integer prepareHandle = (Integer) prepParam[0].getOutValue();                if (prepareHandle != null) {                    return prepareHandle.toString();                }                // Probably an exception occured, check for it                messages.checkErrors();            } catch (SQLException e) {                if ("08S01".equals(e.getSQLState())) {                    // Serious (I/O) error, rethrow                    throw e;                }                // This exception probably caused by failure to prepare                // Add a warning                messages.addWarning((SQLWarning) Support.linkException(                        new SQLWarning(                                Messages.get("error.prepare.prepfailed",                                        e.getMessage()),                                e.getSQLState(), e.getErrorCode()),                        e));            }        }        return null;    }    /**     * Creates a light weight stored procedure on a Sybase server.     *     * @param sql    SQL statement to prepare     * @param params the actual parameter list     * @return name of the procedure     * @throws SQLException if an error occurs     */    synchronized String sybasePrepare(String sql, ParamInfo[] params)            throws SQLException {        checkOpen();        messages.clearWarnings();        if (sql == null || sql.length() == 0) {            throw new IllegalArgumentException(                    "sql parameter must be at least 1 character long.");        }        String procName = connection.getProcName();        if (procName == null || procName.length() != 11) {            throw new IllegalArgumentException(                    "procName parameter must be 11 characters long.");        }        // TODO Check if output parameters are handled ok        // Check no text/image parameters        for (int i = 0; i < params.length; i++) {            if (params[i].sqlType.equals("text")                || params[i].sqlType.equals("image")) {                return null; // Sadly no way            }        }        Semaphore mutex = null;        try {            mutex = connection.getMutex();            out.setPacketType(SYBQUERY_PKT);            out.write((byte)TDS5_DYNAMIC_TOKEN);            byte buf[] = Support.encodeString(connection.getCharset(), sql);            out.write((short) (buf.length + 41));            out.write((byte) 1);            out.write((byte) 0);            out.write((byte) 10);            out.writeAscii(procName.substring(1));            out.write((short) (buf.length + 26));            out.writeAscii("create proc ");            out.writeAscii(procName.substring(1));            out.writeAscii(" as ");            out.write(buf);            out.flush();            endOfResponse = false;            clearResponseQueue();            messages.checkErrors();            return procName;        } catch (IOException ioe) {            connection.setClosed();            throw Support.linkException(                new SQLException(                       Messages.get(                                "error.generic.ioerror", ioe.getMessage()),                                    "08S01"), ioe);        } catch (SQLException e) {            if ("08S01".equals(e.getSQLState())) {                // Serious error rethrow                throw e;            }            // This exception probably caused by failure to prepare            // Return null;            return null;        } finally {            if (mutex != null) {                mutex.release();            }        }    }    /**     * Drops a Sybase temporary stored procedure.     *     * @param procName the temporary procedure name     * @throws SQLException if an error occurs     */    synchronized void sybaseUnPrepare(String procName)            throws SQLException {        checkOpen();        messages.clearWarnings();        if (procName == null || procName.length() != 11) {            throw new IllegalArgumentException(                    "procName parameter must be 11 characters long.");        }        Semaphore mutex = null;        try {            mutex = connection.getMutex();            out.setPacketType(SYBQUERY_PKT);            out.write((byte)TDS5_DYNAMIC_TOKEN);            out.write((short) (15));            out.write((byte) 4);            out.write((byte) 0);            out.write((byte) 10);            out.writeAscii(procName.substring(1));            out.write((short)0);            out.flush();            endOfResponse = false;            clearResponseQueue();            messages.checkErrors();        } catch (IOException ioe) {            connection.setClosed();            throw Support.linkException(                new SQLException(                       Messages.get(                                "error.generic.ioerror", ioe.getMessage()),                                    "08S01"), ioe);        } catch (SQLException e) {            if ("08S01".equals(e.getSQLState())) {                // Serious error rethrow                throw e;            }            // This exception probably caused by failure to unprepare        } finally {            if (mutex != null) {                mutex.release();            }        }    }    /**     * Enlist the current connection in a distributed transaction or request the location of the     * MSDTC instance controlling the server we are connected to.     *     * @param type      set to 0 to request TM address or 1 to enlist connection     * @param oleTranID the 40 OLE transaction ID     * @return a <code>byte[]</code> array containing the TM address data     * @throws SQLException     */    synchronized byte[] enlistConnection(int type, byte[] oleTranID) throws SQLException {        Semaphore mutex = null;        try {            mutex = connection.getMutex();            out.setPacketType(MSDTC_PKT);            out.write((short)type);            switch (type) {                case 0: // Get result set with location of MSTDC                    out.write((short)0);                    break;                case 1: // Set OLE transaction ID                    if (oleTranID != null) {                        out.write((short)oleTranID.length);                        out.write(oleTranID);                    } else {                        // Delist the connection from all transactions.                        out.write((short)0);                    }                    break;            }            out.flush();            endOfResponse = false;            endOfResults  = true;        } catch (IOException ioe) {            connection.setClosed();            throw Support.linkException(                    new SQLException(                            Messages.get(                                    "error.generic.ioerror", ioe.getMessage()),                            "08S01"),                    ioe);        } finally {            if (mutex != null) {                mutex.release();            }        }        byte[] tmAddress = null;        if (getMoreResults() && getNextRow()) {            if (rowData.length == 1) {                Object x = rowData[0];                if (x instanceof byte[]) {                    tmAddress = (byte[])x;                }            }        }        clearResponseQueue();        messages.checkErrors();        return tmAddress;    }    /**

⌨️ 快捷键说明

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