最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解如何獲取PreparedStatement參數(shù)示例詳解

 更新時間:2023年09月06日 10:30:41   作者:codecraft  
這篇文章主要為大家介紹了詳解如何獲取PreparedStatement參數(shù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

本文主要研究一下如何獲取PreparedStatement的參數(shù)

PreparedStatement

java/sql/PreparedStatement.java

public interface PreparedStatement extends Statement {
     void setNull(int parameterIndex, int sqlType) throws SQLException;
     void setBoolean(int parameterIndex, boolean x) throws SQLException;
     void setInt(int parameterIndex, int x) throws SQLException;
     void setLong(int parameterIndex, long x) throws SQLException;
     //......
    default void setObject(int parameterIndex, Object x, SQLType targetSqlType,
             int scaleOrLength) throws SQLException {
        throw new SQLFeatureNotSupportedException("setObject not implemented");
    }
    default void setObject(int parameterIndex, Object x, SQLType targetSqlType)
      throws SQLException {
        throw new SQLFeatureNotSupportedException("setObject not implemented");
    }
    /**
     * Retrieves the number, types and properties of this
     * <code>PreparedStatement</code> object's parameters.
     *
     * @return a <code>ParameterMetaData</code> object that contains information
     *         about the number, types and properties for each
     *  parameter marker of this <code>PreparedStatement</code> object
     * @exception SQLException if a database access error occurs or
     * this method is called on a closed <code>PreparedStatement</code>
     * @see ParameterMetaData
     * @since 1.4
     */
    ParameterMetaData getParameterMetaData() throws SQLException;
}
PreparedStatement繼承了Statement接口,它主要是多定義了一系列的set方法,但是沒有定義get方法,只是定義了getParameterMetaData方法返回ParameterMetaData

ParameterMetaData

java/sql/ParameterMetaData.java

public interface ParameterMetaData extends Wrapper {
    /**
     * Retrieves the number of parameters in the <code>PreparedStatement</code>
     * object for which this <code>ParameterMetaData</code> object contains
     * information.
     *
     * @return the number of parameters
     * @exception SQLException if a database access error occurs
     * @since 1.4
     */
    int getParameterCount() throws SQLException;
    /**
     * Retrieves whether null values are allowed in the designated parameter.
     *
     * @param param the first parameter is 1, the second is 2, ...
     * @return the nullability status of the given parameter; one of
     *        <code>ParameterMetaData.parameterNoNulls</code>,
     *        <code>ParameterMetaData.parameterNullable</code>, or
     *        <code>ParameterMetaData.parameterNullableUnknown</code>
     * @exception SQLException if a database access error occurs
     * @since 1.4
     */
    int isNullable(int param) throws SQLException;
    /**
     * The constant indicating that a
     * parameter will not allow <code>NULL</code> values.
     */
    int parameterNoNulls = 0;
    /**
     * The constant indicating that a
     * parameter will allow <code>NULL</code> values.
     */
    int parameterNullable = 1;
    /**
     * The constant indicating that the
     * nullability of a parameter is unknown.
     */
    int parameterNullableUnknown = 2;
    /**
     * Retrieves whether values for the designated parameter can be signed numbers.
     *
     * @param param the first parameter is 1, the second is 2, ...
     * @return <code>true</code> if so; <code>false</code> otherwise
     * @exception SQLException if a database access error occurs
     * @since 1.4
     */
    boolean isSigned(int param) throws SQLException;
    /**
     * Retrieves the designated parameter's specified column size.
     *
     * <P>The returned value represents the maximum column size for the given parameter.
     * For numeric data, this is the maximum precision.  For character data, this is the length in characters.
     * For datetime datatypes, this is the length in characters of the String representation (assuming the
     * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes.  For the ROWID datatype,
     * this is the length in bytes. 0 is returned for data types where the
     * column size is not applicable.
     *
     * @param param the first parameter is 1, the second is 2, ...
     * @return precision
     * @exception SQLException if a database access error occurs
     * @since 1.4
     */
    int getPrecision(int param) throws SQLException;
    /**
     * Retrieves the designated parameter's number of digits to right of the decimal point.
     * 0 is returned for data types where the scale is not applicable.
     *
     * @param param the first parameter is 1, the second is 2, ...
     * @return scale
     * @exception SQLException if a database access error occurs
     * @since 1.4
     */
    int getScale(int param) throws SQLException;
    /**
     * Retrieves the designated parameter's SQL type.
     *
     * @param param the first parameter is 1, the second is 2, ...
     * @return SQL type from <code>java.sql.Types</code>
     * @exception SQLException if a database access error occurs
     * @since 1.4
     * @see Types
     */
    int getParameterType(int param) throws SQLException;
    /**
     * Retrieves the designated parameter's database-specific type name.
     *
     * @param param the first parameter is 1, the second is 2, ...
     * @return type the name used by the database. If the parameter type is
     * a user-defined type, then a fully-qualified type name is returned.
     * @exception SQLException if a database access error occurs
     * @since 1.4
     */
    String getParameterTypeName(int param) throws SQLException;
    /**
     * Retrieves the fully-qualified name of the Java class whose instances
     * should be passed to the method <code>PreparedStatement.setObject</code>.
     *
     * @param param the first parameter is 1, the second is 2, ...
     * @return the fully-qualified name of the class in the Java programming
     *         language that would be used by the method
     *         <code>PreparedStatement.setObject</code> to set the value
     *         in the specified parameter. This is the class name used
     *         for custom mapping.
     * @exception SQLException if a database access error occurs
     * @since 1.4
     */
    String getParameterClassName(int param) throws SQLException;
    /**
     * The constant indicating that the mode of the parameter is unknown.
     */
    int parameterModeUnknown = 0;
    /**
     * The constant indicating that the parameter's mode is IN.
     */
    int parameterModeIn = 1;
    /**
     * The constant indicating that the parameter's mode is INOUT.
     */
    int parameterModeInOut = 2;
    /**
     * The constant indicating that the parameter's mode is  OUT.
     */
    int parameterModeOut = 4;
    /**
     * Retrieves the designated parameter's mode.
     *
     * @param param the first parameter is 1, the second is 2, ...
     * @return mode of the parameter; one of
     *        <code>ParameterMetaData.parameterModeIn</code>,
     *        <code>ParameterMetaData.parameterModeOut</code>, or
     *        <code>ParameterMetaData.parameterModeInOut</code>
     *        <code>ParameterMetaData.parameterModeUnknown</code>.
     * @exception SQLException if a database access error occurs
     * @since 1.4
     */
    int getParameterMode(int param) throws SQLException;
}
ParameterMetaDatat提供了getParameterCount、getParameterType、getParameterTypeName、getParameterClassName、getParameterMode

com.mysql.jdbc.PreparedStatement

com/mysql/jdbc/PreparedStatement.java

public class PreparedStatement extends com.mysql.jdbc.StatementImpl implements
        java.sql.PreparedStatement {
    //......
    protected int parameterCount;
    protected MysqlParameterMetadata parameterMetaData;
    private InputStream[] parameterStreams = null;
    private byte[][] parameterValues = null;
    /**
     * Only used by statement interceptors at the moment to
     * provide introspection of bound values
     */
    protected int[] parameterTypes = null;
    public ParameterBindings getParameterBindings() throws SQLException {
        synchronized (checkClosed()) {
            return new EmulatedPreparedStatementBindings();
        }
    }
    //......
}
mysql的PreparedStatement實(shí)現(xiàn)定義了parameterCount、parameterMetaData、parameterStreams、parameterValues、parameterTypes屬性,提供了getParameterBindings方法,返回的是EmulatedPreparedStatementBindings

ParameterBindings

com/mysql/jdbc/ParameterBindings.java

public interface ParameterBindings {
    public abstract Array getArray(int parameterIndex) throws SQLException;
    public abstract InputStream getAsciiStream(int parameterIndex) throws SQLException;
    public abstract BigDecimal getBigDecimal(int parameterIndex) throws SQLException;
    public abstract InputStream getBinaryStream(int parameterIndex) throws SQLException;
    public abstract java.sql.Blob getBlob(int parameterIndex) throws SQLException;
    public abstract boolean getBoolean(int parameterIndex) throws SQLException;
    public abstract byte getByte(int parameterIndex) throws SQLException;
    public abstract byte[] getBytes(int parameterIndex) throws SQLException;
    public abstract Reader getCharacterStream(int parameterIndex) throws SQLException;
    public abstract Clob getClob(int parameterIndex) throws SQLException;
    public abstract Date getDate(int parameterIndex) throws SQLException;
    public abstract double getDouble(int parameterIndex) throws SQLException;
    public abstract float getFloat(int parameterIndex) throws SQLException;
    public abstract int getInt(int parameterIndex) throws SQLException;
    public abstract long getLong(int parameterIndex) throws SQLException;
    public abstract Reader getNCharacterStream(int parameterIndex) throws SQLException;
    public abstract Reader getNClob(int parameterIndex) throws SQLException;
    public abstract Object getObject(int parameterIndex) throws SQLException;
    public abstract Ref getRef(int parameterIndex) throws SQLException;
    public abstract short getShort(int parameterIndex) throws SQLException;
    public abstract String getString(int parameterIndex) throws SQLException;
    public abstract Time getTime(int parameterIndex) throws SQLException;
    public abstract Timestamp getTimestamp(int parameterIndex) throws SQLException;
    public abstract URL getURL(int parameterIndex) throws SQLException;
    public abstract boolean isNull(int parameterIndex) throws SQLException;
}
ParameterBindings定義了一系列的get方法

EmulatedPreparedStatementBindings

class EmulatedPreparedStatementBindings implements ParameterBindings {
        private ResultSetImpl bindingsAsRs;
        private boolean[] parameterIsNull;
        EmulatedPreparedStatementBindings() throws SQLException {
            List<ResultSetRow> rows = new ArrayList<ResultSetRow>();
            parameterIsNull = new boolean[parameterCount];
            System
                    .arraycopy(isNull, 0, this.parameterIsNull, 0,
                            parameterCount);
            byte[][] rowData = new byte[parameterCount][];
            Field[] typeMetadata = new Field[parameterCount];
            for (int i = 0; i < parameterCount; i++) {
                if (batchCommandIndex == -1)
                    rowData[i] = getBytesRepresentation(i);
                else
                    rowData[i] = getBytesRepresentationForBatch(i, batchCommandIndex);
                int charsetIndex = 0;
                if (parameterTypes[i] == Types.BINARY
                        || parameterTypes[i] == Types.BLOB) {
                    charsetIndex = 63;
                } else {
                    try {
                        String mysqlEncodingName = CharsetMapping
                                .getMysqlEncodingForJavaEncoding(connection
                                        .getEncoding(), connection);
                        charsetIndex = CharsetMapping
                                .getCharsetIndexForMysqlEncodingName(mysqlEncodingName);
                    } catch (SQLException ex) {
                        throw ex;
                    } catch (RuntimeException ex) {
                        SQLException sqlEx = SQLError.createSQLException(ex.toString(), SQLError.SQL_STATE_ILLEGAL_ARGUMENT, null);
                        sqlEx.initCause(ex);
                        throw sqlEx;
                    }
                }
                Field parameterMetadata = new Field(null, "parameter_"
                        + (i + 1), charsetIndex, parameterTypes[i],
                        rowData[i].length);
                parameterMetadata.setConnection(connection);
                typeMetadata[i] = parameterMetadata;
            }
            rows.add(new ByteArrayRow(rowData, getExceptionInterceptor()));
            this.bindingsAsRs = new ResultSetImpl(connection.getCatalog(),
                    typeMetadata, new RowDataStatic(rows), connection, null);
            this.bindingsAsRs.next();
        }
        //......
    }
EmulatedPreparedStatementBindings實(shí)現(xiàn)了ParameterBindings接口,它主要是把參數(shù)組裝到rowData,然后創(chuàng)建了RowDataStatic,構(gòu)造ResultSetImpl這個對象來實(shí)現(xiàn)

小結(jié)

jdbc的PreparedStatement并未提供相應(yīng)的get參數(shù)的方法,只能從driver的實(shí)現(xiàn)類去找,比如mysql的PreparedStatement實(shí)現(xiàn)提供了getParameterBindings方法,返回的是EmulatedPreparedStatementBindings,可以獲取參數(shù)

以上就是詳解如何獲取PreparedStatement參數(shù)示例詳解的詳細(xì)內(nèi)容,更多關(guān)于PreparedStatement參數(shù)獲取的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • VSCode高效配置Maven開發(fā)Java項目全過程

    VSCode高效配置Maven開發(fā)Java項目全過程

    之前一直使用VSCode開發(fā)C、Go兩種語言,現(xiàn)在需要對java進(jìn)行學(xué)習(xí),這篇文章主要介紹了VSCode高效配置Maven開發(fā)Java項目的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-08-08
  • 如何在Spring MVC中查詢字符串與參數(shù)

    如何在Spring MVC中查詢字符串與參數(shù)

    本文給大家介紹在Spring MVC中查詢字符串與參數(shù)的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-09-09
  • Java?mybatis?開發(fā)自定義插件

    Java?mybatis?開發(fā)自定義插件

    這篇文章主要介紹了Java?mybatis開發(fā)自定義插件,MyBatis允許你在映射語句執(zhí)行過程中的某一點(diǎn)進(jìn)行攔截調(diào)用,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • 將springboot項目生成可依賴的jar并引入到項目中的方法

    將springboot項目生成可依賴的jar并引入到項目中的方法

    SpringBoot項目默認(rèn)打包的是可運(yùn)行jar包,也可以打包成不可運(yùn)行的jar包,本文給大家介紹將springboot項目生成可依賴的jar并引入到項目中的方法,感興趣的朋友一起看看吧
    2023-11-11
  • SpringMVC域?qū)ο蠊蚕頂?shù)據(jù)示例詳解

    SpringMVC域?qū)ο蠊蚕頂?shù)據(jù)示例詳解

    這篇文章主要為大家介紹了SpringMVC域?qū)ο蠊蚕頂?shù)據(jù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Java數(shù)據(jù)結(jié)構(gòu)之最小堆和最大堆的原理及實(shí)現(xiàn)詳解

    Java數(shù)據(jù)結(jié)構(gòu)之最小堆和最大堆的原理及實(shí)現(xiàn)詳解

    在計算機(jī)科學(xué)中,堆(heap)?的實(shí)現(xiàn)是一種基于樹的特殊的數(shù)據(jù)結(jié)構(gòu),它可以在數(shù)組上構(gòu)建出樹的結(jié)構(gòu)體,并滿足堆的屬性。本文就來和大家詳細(xì)聊聊Java數(shù)據(jù)結(jié)構(gòu)中的堆,感興趣的可以了解一下
    2022-09-09
  • form表單數(shù)據(jù)通過@RequestBody解析成java實(shí)體類的實(shí)現(xiàn)過程

    form表單數(shù)據(jù)通過@RequestBody解析成java實(shí)體類的實(shí)現(xiàn)過程

    解決@RequestBody請求無法接收前端數(shù)據(jù)問題:前端通過axios提交數(shù)據(jù),后端使用fastJSON解析時出現(xiàn)NULL,通過在實(shí)體類上添加@JSONField注解指定屬性對應(yīng)關(guān)系,可以成功接收數(shù)據(jù)
    2025-12-12
  • java 實(shí)現(xiàn)圖片像素質(zhì)量壓縮與圖片長寬縮放

    java 實(shí)現(xiàn)圖片像素質(zhì)量壓縮與圖片長寬縮放

    這篇文章主要介紹了java 實(shí)現(xiàn)圖片像素質(zhì)量壓縮與圖片長寬縮放,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Jetpack Room 使用示例詳解

    Jetpack Room 使用示例詳解

    Room 是 Android 開發(fā)中強(qiáng)大的持久化解決方案,它簡化了 SQLite 的使用,提供了類型安全的數(shù)據(jù)庫訪問,并與 Android 架構(gòu)組件深度集成,本文給大家介紹Jetpack Room 使用詳解,感興趣的朋友一起看看吧
    2025-04-04
  • 淺談Redis在微服務(wù)架構(gòu)中的幾種應(yīng)用場景

    淺談Redis在微服務(wù)架構(gòu)中的幾種應(yīng)用場景

    本文介紹在SpringCloud中使用Redis作為Pub/Sub異步通信、緩存或主數(shù)據(jù)庫和配置服務(wù)器的三種場景應(yīng)用。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05

最新評論

苍梧县| 华阴市| 隆子县| 石渠县| 祥云县| 义马市| 红原县| 涪陵区| 济南市| 谷城县| 巴楚县| 池州市| 宕昌县| 响水县| 阳山县| 贺兰县| 温州市| 石狮市| 阳西县| 丹巴县| 金沙县| 怀化市| 邹平县| 道孚县| 咸宁市| 菏泽市| 夏邑县| 夹江县| 安岳县| 通山县| 应用必备| 蓬莱市| 社旗县| 咸丰县| 图们市| 浠水县| 华亭县| 余庆县| 南和县| 黑山县| 栾川县|