PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

JOOQ json बाइंडिंग के साथ समस्या

कार्य कोड

public class PostgresJSONGsonBinding implements Binding<Object, JsonElement> {
    // Binding <T> = Object (unknown JDBC type), and <U> = JsonElement (user type)

    private static final Logger LOGGER = LoggerFactory.getLogger(PostgresJSONGsonBinding.class);

    // The converter does all the work
    @Override
    public Converter<Object, JsonElement> converter() {
        return new Converter<Object, JsonElement>() {

            //Convert a database object to a user object
            @Override
            public JsonElement from(Object t) {
                return t == null ? JsonNull.INSTANCE : new Gson().fromJson(t.toString(), JsonElement.class);
            }

            // Convert a user object to a database object
            @Override
            public Object to(JsonElement u) {
                return u == null || u == JsonNull.INSTANCE ? null : new Gson().toJson(u);
            }

            @Override
            public Class<Object> fromType() {
                return Object.class;
            }

            @Override
            public Class<JsonElement> toType() {
                return JsonElement.class;
            }
        };
    }

    // Rending a bind variable for the binding context's value and casting it to the json type
    @Override
    public void sql(BindingSQLContext<JsonElement> ctx) throws SQLException {
        // Depending on how you generate your SQL, you may need to explicitly distinguish
        // between jOOQ generating bind variables or inlined literals.
        if (ctx.render().paramType() == ParamType.INLINED){
            ctx.render().visit(DSL.inline(ctx.convert(converter()).value())).sql("::json");
        }
        else{
            ctx.render().sql("?::json");
        }
    }

    // Registering VARCHAR types for JDBC CallableStatement OUT parameters
    @Override
    public void register(BindingRegisterContext<JsonElement> ctx) throws SQLException {
        ctx.statement().registerOutParameter(ctx.index(), Types.VARCHAR);
    }

    // Converting the JsonElement to a String value and setting that on a JDBC PreparedStatement
    @Override
    public void set(BindingSetStatementContext<JsonElement> ctx) throws SQLException {
        ctx.statement().setString(ctx.index(), Objects.toString(ctx.convert(converter()).value(), null));
    }

    // Getting a String value from a JDBC ResultSet and converting that to a JsonElement
    @Override
    public void get(BindingGetResultSetContext<JsonElement> ctx) throws SQLException {
        ctx.convert(converter()).value(ctx.resultSet().getString(ctx.index()));
    }

    // Getting a String value from a JDBC CallableStatement and converting that to a JsonElement
    @Override
    public void get(BindingGetStatementContext<JsonElement> ctx) throws SQLException {
        ctx.convert(converter()).value(ctx.statement().getString(ctx.index()));
    }

    // Setting a value on a JDBC SQLOutput (useful for Oracle OBJECT types)
    @Override
    public void set(BindingSetSQLOutputContext<JsonElement> ctx) throws SQLException {
        throw new SQLFeatureNotSupportedException();
    }

    // Getting a value from a JDBC SQLInput (useful for Oracle OBJECT types)
    @Override
    public void get(BindingGetSQLInputContext<JsonElement> ctx) throws SQLException {
        throw new SQLFeatureNotSupportedException();
    }
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पोस्टग्रेज़ दिनांक प्रतिनिधित्व को ISO 8601 स्ट्रिंग में बदलें

  2. प्राथमिक कुंजी ऑटोइनक्रिकमेंट के लिए Django और PostgreSQL अनुक्रम

  3. PostgreSQL में डेलाइट सेविंग टाइम के साथ टाइम ज़ोन

  4. सभी सक्रिय सत्रों के लिए सभी तैयार बयानों को कैसे सूचीबद्ध करें?

  5. MySQL से PostgreSQL तालिका रूपांतरण बनाएं - वर्णसेट और संयोजन