1. 程式人生 > >mysql處理json資料(自我總結,後期會繼續補充)

mysql處理json資料(自我總結,後期會繼續補充)

1.如果資料量小的話,將json資料直接複製到mysql的json欄位中,如果資料過大可以通過java等後臺形式對json資料解析,然後寫入資料庫中。

查詢操作
 

select *,json->'$.features[0].geometry.rings' as rings from JSON;

從一張表讀取一部分資料存入另一張表中(一條資料)

insert into DT_village(name, border) SELECT
  json->'$.features[0].attributes.CJQYMC',json->'$.features[0].geometry.rings'
from JSON;

讀取json資料並寫入資料庫(此時使用的是定義函式的形式來執行方法,可以定義便量)

#清空資料庫
TRUNCATE table DT_village;

#定義儲存過程
delimiter //
DROP PROCEDURE IF EXISTS insert_test_val;
##num_limit 要插入資料的數量,rand_limit 最大隨機的數值
CREATE PROCEDURE insert_test_val()
  BEGIN

    DECLARE i int default 0;
    DECLARE a,b varchar(5000);

    WHILE i<10 do
      set a=CONCAT('$.features[',i,'].attributes.CJQYMC');
      set b=CONCAT('$.features[',i,'].geometry.rings');
      insert into DT_village(name, border) select
              #json->'$.features[0].attributes.CJQYMC',json->'$.features[0].geometry.rings'
                                                 # (json->a),(json->b)
   json_extract(json,a),json_extract(json,b)
      from JSON;
      set i = i + 1;

    END WHILE;

  END
//

#呼叫儲存過程
call insert_test_val();

呼叫遊標的方式獲取jsosn資料中的一行,並執行插入操作
 

delimiter //
drop procedure if exists StatisticStore;
CREATE PROCEDURE StatisticStore()
  BEGIN
    #建立接收遊標資料的變數
    declare j json;#儲存json資料
    DECLARE i int default 0; #建立總數變數,記錄執行次數,控制迴圈
    DECLARE a,b,c varchar(5000);#定義json陣列中的某個資料的鍵值

    #建立結束標誌變數
    declare done int default false;
    #建立遊標
    declare cur cursor for select json from JSON where name = '1';
    #指定遊標迴圈結束時的返回值
    declare continue HANDLER for not found set done = true;
    #設定初始值
    set a=CONCAT('$.features[',i,'].attributes.XZQDM');
    set b=CONCAT('$.features[',i,'].attributes.XZQMC');
    set c=CONCAT('$.features[',i,']');
    #開啟遊標
    open cur;
    #開始循環遊標裡的資料
    read_loop:loop
      #根據遊標當前指向的一條資料
      fetch cur into j;
      #判斷遊標的迴圈是否結束
      if done then
        leave read_loop;#跳出遊標迴圈
      end if;
      #這裡可以做任意你想做的操作
      WHILE i<11 do
        insert into dt_border(xzq_code,name,border) select
                                                           json_extract(j,a),json_extract(j,b),json_extract(j,c)
        from JSON;
        set i = i + 1;
      END WHILE;
      #結束遊標迴圈
    end loop;
    #關閉遊標
    close cur;

    #輸出結果
    select j,i;
  END;
#呼叫儲存過程
call StatisticStore();