2017-02-15 16 views
1

Я использую JDBC lib из vertx, и мне нужно вставить значения вставки, содержащие поле массива.Batch Insert Array с Vertx JDBC-обработчиком

Я попытался это:

String query = "UPSERT INTO " + TABLENAME + " (ID, NODES) VALUES (?,?)"; 
      JsonArray param= new JsonArray(); 
      param.add(currentUser.getId().toString()); 
      param.add(new JsonArray(currentUser.getNodes())); 
      List<JsonArray> params = new ArrayList<>(); 
      params.add(param); 

Мой выход:

UPSERT INTO USER (ID, NODES) VALUES (?,?) 
    [["4ec99c96-7ece-34df-9da0-c42e18f9ec51",["9385fe01-980b-3fb1-b911-7cc3a62c028b","1a05f21a-5278-3d2c-8ee1-b8fd44059e5b","a0b34f81-ef77-3eb2-9c81-8841b9277dd8","2e2ebd32-a7a9-38c8-9b35-b7d1c9b97335","7384ac4c-9796-38b1-8069-45bfc57f1beb","19afe185-8b2a-324e-a8e1-0861a0df8d40","e5efd51e-cc8f-348c-a975-5a25ac9f3321","b9bd2bf0-a581-31a5-a4ca-531cfd0420a1","97200212-af2a-3db9-bfe9-c7a9e09da278","919b6f2a-25f9-32d4-bae3-1a270a1e7e6d","a5271df9-aee2-36ae-85ff-b706cac8be2d","b9ad27fd-28b6-3463-b3e9-1e98e0e3c0e1","37c3790a-cd1d-3d1a-91e4-95fbcd25c592","d3b74229-5b18-3e3e-863e-1b56c2e024ba","331f9940-39ce-3af2-b9ba-cfb6d08066bf","14ee65c5-d48c-3c85-ae9e-639c918af5bd","f81898a1-aad9-34bf-ab3f-e7c314c74a81","48adeeeb-8301-39d3-bfd9-9e5557504b55","68f1d824-1c62-3d6d-a529-ef15cda96ad1"]]] 

Прежде чем перейти к подготовленному заявлению моего рабочему запроса был:

String query = "UPSERT INTO " + TABLENAME + " (ID, NODES) VALUES ('id',ARRAY['1','2'])"; 



phoenixSharedJDBCClient.getConnection(conn -> { 

      if (conn.succeeded()) { 

       SQLConnection connection = conn.result(); 

       connection.batchWithParams(query,params, res -> { 

        if (res.succeeded()) { 
         resultHandler.handle(Future.succeededFuture(Boolean.TRUE)); 
        } else if (res.failed()) { 
         resultHandler.handle(Future.failedFuture("Prepared statement request: "+res.cause().getMessage())); 
        } 
       }); 
       connection.close(); 
      } 

Моей база данных Apache Phoenix SQL- слой для Hbase.

Любая идея, как исправить это?

ответ

2

В настоящее время клиент JDBC vert.x не может обрабатывать массивы, потому что базовый API JDBC требует, чтобы тип данных в массиве был известен в начале, и мы не можем обнаружить его из JSON.

Был попытку решить этот: https://github.com/vert-x3/vertx-jdbc-client/commit/3ea6103f4d698137da533522f2c3d4096522f8c6 но очень RDBMS конкретно, она будет работать на Postgres, так как при работе с пустыми Массивами oid ссылки всегда принимается, но нет такой вещи (к моему знанию) для других RDBMS.

К сожалению, вам пока еще нужно полагаться на конкатенацию строк, пока мы не сможем улучшить текущий API или в духе Open Source, помогите нам обсудить пример использования и провести мозговой штурм, как мы можем его решить.