2017-02-15 104 views
1

我正在使用vertx的JDBC lib,我需要批量插入包含數組字段的值。使用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的鳳凰SQL層爲Hbase。

任何想法如何解決這個問題?

回答

2

當前vert.x JDBC客戶端無法處理數組,因爲底層的JDBC API要求數組中的數據類型在啓動時是已知的,我們無法從JSON中檢測到它。

有解決這個嘗試:https://github.com/vert-x3/vertx-jdbc-client/commit/3ea6103f4d698137da533522f2c3d4096522f8c6但它是非常特定於RDBMS,它會爲Postgres的工作,因爲空數組打交道時,一個oid參考始終接受,但有沒有這樣的事(據我所知)其他RDBMS。

所以,你現在仍然需要依賴你的字符串連接,直到我們能夠改進當前的API,或者本着開放源代碼的精神,幫助我們討論用例和集體討論如何解決它。