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

📄 connectionjdbc2.java

📁 第三方的SQL Server and Sybase的jdbc dirver,速度更快
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
    }    /**     * Indicates whether fast forward only cursors should be used for forward     * only result sets.     *     * @return <code>true</code> if fast forward cursors are requested     */    boolean getUseCursors() {        return this.useCursors;    }    /**     * Indicates whether large types (IMAGE and TEXT/NTEXT) should be mapped by     * default to LOB types or <code>String</code> and <code>byte[]</code>     * respectively.     *     * @return <code>true</code> if the default mapping should be to LOBs,     *         <code>false</code> otherwise     */    boolean getUseLOBs() {        return this.useLOBs;    }    /**     * Transfers the properties to the local instance variables.     *     * @param info The connection properties Object.     * @throws SQLException If an invalid property value is found.     */    protected void unpackProperties(Properties info)            throws SQLException {        serverName = info.getProperty(Messages.get(Driver.SERVERNAME));        portNumber = parseIntegerProperty(info, Driver.PORTNUMBER);        serverType = parseIntegerProperty(info, Driver.SERVERTYPE);        databaseName = info.getProperty(Messages.get(Driver.DATABASENAME));        instanceName = info.getProperty(Messages.get(Driver.INSTANCE));        domainName = info.getProperty(Messages.get(Driver.DOMAIN));        user = info.getProperty(Messages.get(Driver.USER));        password = info.getProperty(Messages.get(Driver.PASSWORD));        macAddress = info.getProperty(Messages.get(Driver.MACADDRESS));        appName = info.getProperty(Messages.get(Driver.APPNAME));        progName = info.getProperty(Messages.get(Driver.PROGNAME));        wsid = info.getProperty(Messages.get(Driver.WSID));        serverCharset = info.getProperty(Messages.get(Driver.CHARSET));        language = info.getProperty(Messages.get(Driver.LANGUAGE));        lastUpdateCount = "true".equalsIgnoreCase(                info.getProperty(Messages.get(Driver.LASTUPDATECOUNT)));        useUnicode = "true".equalsIgnoreCase(                info.getProperty(Messages.get(Driver.SENDSTRINGPARAMETERSASUNICODE)));        namedPipe = "true".equalsIgnoreCase(                info.getProperty(Messages.get(Driver.NAMEDPIPE)));        tcpNoDelay = "true".equalsIgnoreCase(                info.getProperty(Messages.get(Driver.TCPNODELAY)));        useCursors = (serverType == Driver.SQLSERVER)                && "true".equalsIgnoreCase(                        info.getProperty(Messages.get(Driver.USECURSORS)));        useLOBs = "true".equalsIgnoreCase(                info.getProperty(Messages.get(Driver.USELOBS)));        useMetadataCache = "true".equalsIgnoreCase(                info.getProperty(Messages.get(Driver.CACHEMETA)));        xaEmulation = "true".equalsIgnoreCase(                info.getProperty(Messages.get(Driver.XAEMULATION)));        charsetSpecified = serverCharset.length() > 0;        Integer parsedTdsVersion =                DefaultProperties.getTdsVersion(info.getProperty(Messages.get(Driver.TDS)));        if (parsedTdsVersion == null) {            throw new SQLException(Messages.get("error.connection.badprop",                    Messages.get(Driver.TDS)), "08001");        }        tdsVersion = parsedTdsVersion.intValue();        packetSize = parseIntegerProperty(info, Driver.PACKETSIZE);        if (packetSize < TdsCore.MIN_PKT_SIZE) {            if (tdsVersion >= Driver.TDS70) {                // Default of 0 means let the server specify packet size                packetSize = (packetSize == 0) ? 0 : TdsCore.DEFAULT_MIN_PKT_SIZE_TDS70;            } else {                // Sensible minimum for all other versions of TDS                packetSize = TdsCore.MIN_PKT_SIZE;            }        }        if (packetSize > TdsCore.MAX_PKT_SIZE) {            packetSize = TdsCore.MAX_PKT_SIZE;        }        packetSize = (packetSize / 512) * 512;        loginTimeout = parseIntegerProperty(info, Driver.LOGINTIMEOUT);        lobBuffer = parseLongProperty(info, Driver.LOBBUFFER);        maxStatements = parseIntegerProperty(info, Driver.MAXSTATEMENTS);        statementCache = new ProcedureCache(maxStatements);        prepareSql = parseIntegerProperty(info, Driver.PREPARESQL);        if (prepareSql < 0) {            prepareSql = 0;        } else if (prepareSql > 3) {            prepareSql = 3;        }        // For Sybase use equivalent of sp_executesql.        if (tdsVersion < Driver.TDS70 && prepareSql == TdsCore.PREPARE) {            prepareSql = TdsCore.EXECUTE_SQL;        }        // For SQL 6.5 sp_executesql not available so use stored procedures.        if (tdsVersion < Driver.TDS50 && prepareSql == TdsCore.EXECUTE_SQL) {            prepareSql = TdsCore.TEMPORARY_STORED_PROCEDURES;        }        ssl = info.getProperty(Messages.get(Driver.SSL));        batchSize = parseIntegerProperty(info, Driver.BATCHSIZE);        if (batchSize < 0) {            throw new SQLException(Messages.get("error.connection.badprop",                    Messages.get(Driver.BATCHSIZE)), "08001");        }        bufferMaxMemory = parseIntegerProperty(info, Driver.BUFFERMAXMEMORY);        if (bufferMaxMemory < 0) {            throw new SQLException(Messages.get("error.connection.badprop",                    Messages.get(Driver.BUFFERMAXMEMORY)), "08001");        }        bufferMinPackets = parseIntegerProperty(info, Driver.BUFFERMINPACKETS);        if (bufferMinPackets < 1) {            throw new SQLException(Messages.get("error.connection.badprop",                    Messages.get(Driver.BUFFERMINPACKETS)), "08001");        }    }    /**     * Parse a string property value into an integer value.     *     * @param info The connection properties object.     * @param key The message key used to retrieve the property name.     * @return The integer value of the string property value.     * @throws SQLException If the property value can't be parsed.     */    private static int parseIntegerProperty(final Properties info, final String key)            throws SQLException {        final String propertyName = Messages.get(key);        try {            return Integer.parseInt(info.getProperty(propertyName));        } catch (NumberFormatException e) {            throw new SQLException(                    Messages.get("error.connection.badprop", propertyName), "08001");        }    }    /**     * Parse a string property value into a long value.     *     * @param info The connection properties object.     * @param key The message key used to retrieve the property name.     * @return The long value of the string property value.     * @throws SQLException If the property value can't be parsed.     */    private static long parseLongProperty(final Properties info, final String key)            throws SQLException {        final String propertyName = Messages.get(key);        try {            return Long.parseLong(info.getProperty(propertyName));        } catch (NumberFormatException e) {            throw new SQLException(                    Messages.get("error.connection.badprop", propertyName), "08001");        }    }    /**     * Retrieve the Java charset to use for encoding.     *     * @return the Charset name as a <code>String</code>     */    protected String getCharset() {        return charsetInfo.getCharset();    }    /**     * Retrieve the multibyte status of the current character set.     *     * @return <code>boolean</code> true if a multi byte character set     */    protected boolean isWideChar() {        return charsetInfo.isWideChars();    }    /**     * Retrieve the <code>CharsetInfo</code> instance used by this connection.     *     * @return the default <code>CharsetInfo</code> for this connection     */    protected CharsetInfo getCharsetInfo() {        return charsetInfo;    }    /**     * Retrieve the sendParametersAsUnicode flag.     *     * @return <code>boolean</code> true if parameters should be sent as unicode.     */    protected boolean isUseUnicode() {        return this.useUnicode;    }    /**     * Retrieve the Sybase capability data.     *     * @return Capability bit mask as an <code>int</code>.     */    protected boolean getSybaseInfo(int flag) {        return (this.sybaseInfo & flag) != 0;    }    /**     * Set the Sybase capability data.     *     * @param mask The capability bit mask.     */    protected void setSybaseInfo(int mask) {        this.sybaseInfo = mask;    }    /**     * Called by the protocol to change the current character set.     *     * @param charset the server character set name     */    protected void setServerCharset(final String charset) throws SQLException {        // If the user specified a charset, ignore environment changes        if (charsetSpecified) {            Logger.println("Server charset " + charset +                    ". Ignoring as user requested " + serverCharset + '.');            return;        }        if (!charset.equals(serverCharset)) {            loadCharset(charset);            if (Logger.isActive()) {                Logger.println("Set charset to " + serverCharset + '/'                        + charsetInfo);            }        }    }    /**     * Load the Java charset to match the server character set.     *     * @param charset the server character set     */    private void loadCharset(String charset) throws SQLException {        // Do not default to any charset; if the charset is not found we want        // to know about it        CharsetInfo tmp = CharsetInfo.getCharset(charset);        if (tmp == null) {            throw new SQLException(                    Messages.get("error.charset.nomapping", charset), "2C000");        }        loadCharset(tmp, charset);        serverCharset = charset;    }    /**     * Load the Java charset to match the server character set.     *     * @param ci the <code>CharsetInfo</code> to load     */    private void loadCharset(CharsetInfo ci, String ref) throws SQLException {        try {            "This is a test".getBytes(ci.getCharset());            charsetInfo = ci;        } catch (UnsupportedEncodingException ex) {            throw new SQLException(                    Messages.get("error.charset.invalid", ref,                            ci.getCharset()),                    "2C000");        }        socket.setCharsetInfo(charsetInfo);    }    /**     * Discovers the server charset for server versions that do not send     * <code>ENVCHANGE</code> packets on login ack, by executing a DB     * vendor/version specific query.     * <p>     * Will throw an <code>SQLException</code> if used on SQL Server 7.0 or     * 2000; the idea is that the charset should already be determined from     * <code>ENVCHANGE</code> packets for these DB servers.     * <p>     * Should only be called from the constructor.     *     * @return the default server charset     * @throws SQLException if an error condition occurs     */    private String determineServerCharset() throws SQLException {        String queryStr = null;        switch (serverType) {            case Driver.SQLSERVER:                if (databaseProductVersion.indexOf("6.5") >= 0) {                    queryStr = SQL_SERVER_65_CHARSET_QUERY;                } else {                    // This will never happen. Versions 7.0 and 2000 of SQL                    // Server always send ENVCHANGE packets, even over TDS 4.2.                    throw new SQLException(                            "Please use TDS protocol version 7.0 or higher");                }                break;            case Driver.SYBASE:                // There's no need to check for versions here                queryStr = SYBASE_SERVER_CHARSET_QUERY;                break;        }        Statement stmt = this.createStatement();        ResultSet rs = stmt.executeQuery(queryStr);        rs.next();        String charset = rs.getString(1);        rs.close();        stmt.close();        return charset;    }    /**     * Set the default collation for this connection.     * <p>     * Set by a SQL Server 2000 environment change packet. The collation     * consists of the following fields:     * <ul>     * <li>bits 0-19  - The locale eg 0x0409 for US English which maps to code     *                  page 1252 (Latin1_General).     * <li>bits 20-31 - Reserved.     * <li>bits 32-39 - Sort order (csid from syscharsets)     * </ul>     * If the sort order is non-zero it determines the character set, otherwise     * the character set is determined by the locale id.     *     * @param collation The new collation.     */    void setCollation(byte[] collation) throws SQLException {        String strCollation = "0x" + Support.toHex(collation);        // If the user specified a charset, ignore environment changes        if (charsetSpecified) {            Logger.println("Server collation " + strCollation +                    ". Ignoring as user requested " + serverCharset + '.');            return;        }        CharsetInfo tmp = CharsetInfo.getCharset(collation);        loadCharset(tmp, strCollation);        this.collation = collation;        if (Logger.isActive()) {            Logger.println("Set collation to " + strCollation + '/'                    + charsetInfo);        }    }    /**     * Retrieve the SQL Server 2000 default collation.     *     * @return The collation as a <code>byte[5]</code>.     */    byte[] getCollation() {        return this.collation;    }    /**     * Retrieves whether a specific charset was requested on creation. If this     * is the case, all character data should be encoded/decoded using that     * charset.

⌨️ 快捷键说明

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