sql >> データベース >  >> RDS >> Oracle

ibatisではカスタム配列オブジェクトを渡し、javaではoracleを返します

    TypeHandlerのカスタムインスタンスから始める必要があります 。より単純なTypeHandlerCallbackを実装することをお勧めします 、ただし、このシナリオでは、基になるConnectionにアクセスする必要があります 。

    public class ArrayTypeHandler implements TypeHandler {
    
        public void setParameter(PreparedStatement ps, int i, Object param, String jdbcType)
                throws SQLException {
            if (param == null) {
                ps.setNull(i, Types.ARRAY);
            } else {
                Connection conn = ps.getConnection();
                Array loc = conn.createArrayOf("myArrayType", (Object[]) param);
                ps.setArray(i, loc);
            }
        }
    
        public Object getResult(CallableStatement statement, int i)
                throws SQLException {
            return statement.getArray(i).getArray();
        }
        ...
    }
    

    次に、iBATIS構成に接続するには:

    <?xml version="1.0"?>
    <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
    
    <sqlMap namespace="arrayTest">
    
        <parameterMap id="storedprocParams" class="map">
            <parameter property="result" mode="OUT" jdbcType="ARRAY" typeHandler="ArrayTypeHandler"/>
            <parameter property="argument" mode="IN" jdbcType="ARRAY" typeHandler="ArrayTypeHandler"/>
        </parameterMap>
    
        <procedure id="storedproc" parameterMap="arrayTest.storedprocParams">
            {? = call My_Array_Function( ? )}
        </procedure>
    
    </sqlMap>
    

    これがお役に立てば幸いです!



    1. MySQLを再起動せずにMySQLの遅いクエリログを有効にするにはどうすればよいですか?

    2. リクエストが失敗したか、サービスがタイムリーに応答しませんでしたか?

    3. SQLiteケース

    4. PostgreSQL JSON列をJSONBにアップグレードしますか?