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

iBatisを使用してOracle10gXEデータベースに配列を書き込むにはどうすればよいですか?

    私はMybatis3を使用しましたが、古いiBatisのものと同様であるはずです。 JDBCのものを入手するには、このスレッド 。それは巨大なスレッドですが、そこにあります。 「ArrayDescriptor」を探します。

    基本的に、TypeHandlerを作成する必要があります。 TypeHandlerで、setArrayを呼び出します。 mybatis3.xではこのようなものになるはずです。リストを操作するには、toArrayメソッドで変換するだけです。これは例であり、パラメーターはString[]です。

    import oracle.sql.ARRAY;
    import oracle.sql.ArrayDescriptor;   
    .....
    public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException
    {
     //null check?
    
       ArrayDescriptor desc = ArrayDescriptor.createDescriptor("STRARRAY ", ps.getConnection());
       ARRAY oracleArray = new ARRAY(desc, ps.getConnection(), parameter);
       ps.setArray(i, oracleArray);
    }
    

    おそらくibatisではこのようなものです

    public void setParameter(ParameterSetter setter, Object parameter) throws SQLException
    {
        ArrayDescriptor desc = ArrayDescriptor.createDescriptor("STRARRAY", setter.getPreparedStatement().getConnection());
        ARRAY oracleArray = new ARRAY(desc, setter.getPreparedStatement().getConnection(), parameter);
        setter.setArray(oracleArray);
    }
    

    そのスレッドに書かれているように、タイプを作成しました。

    つまり

    CREATE OR REPLACE TYPE STRARRAY AS TABLE OF VARCHAR2 (255)
    

    次に、SQLマップで、必ずタイプハンドラーを参照してください。




    1. PostgreSQLのスペースの計算と節約

    2. MySQLクエリ結果をネイティブデータ型として取得しますか?

    3. ダービーまたはMySQLまたは...?

    4. JSONの組み合わせをクエリすると、奇妙な結果が返されます