<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      秋·風

        博客園 :: 首頁 :: 博問 :: 閃存 :: 新隨筆 :: 聯系 :: 訂閱 訂閱 :: 管理 ::

      最近準備使用lazrus開發SQLite小應用,發現在linux aarch64下沒找到適合的libsqlite3.so加密版本,需然網上有wxsqlite等開源版本,但編譯不成功,最終發現開源的SQLite3 Multiple Ciphers能滿足使用,最主要是編譯so很簡單,適合新手根據不同平臺自行編譯加密的so文件。

      SQLite3MultipleCiphers下載網址:
      https://github.com/utelle/SQLite3MultipleCiphers/

      下載解壓后,在終端執行以下2行命令就能生成libsqlite3.so,建議將libsqlite3.so拷貝到工程的文件夾。

      gcc -O2 -s -shared -fPIC -c sqlite3mc.c
      gcc -O2 -s -shared -fPIC -o libsqlite3.so sqlite3mc.o

      發現linux x86_64下不能按以述方法編譯,經測試使用以下方法就可以編譯:

      linux x86_64編譯so步驟:
      1、安裝sudo apt install -y autoconf 如已安裝請跳過
      2、autoreconf
      3、配置:./configure --prefix =/home/sqlite3/ (注:=后面是sqlite的安裝路徑,可以自己新建一個文件夾存放)
      4、編譯,安裝
      命令:make clean;make;make install (注:make clean是為了清除以前的編譯文件,make是在編譯,make install是安裝)
      安裝完成后,在安裝目錄下可以看到生成了lib,include

      使用Zeos控件時要注意指定libsqlite3.so和位置(必須使用絕對路徑),可以參考以下代碼:

      ZConnection1.LibraryLocation:=ExtractFilePath(Application.ExeName)+'libsqlite3.so';
      如需加密SQLite庫,只需在生成時ZConnection1.Password加上密碼就可以。

        ZConnection1.DisConnect;
        ZConnection1.Protocol:='sqlite-3';
        ZConnection1.LibraryLocation:=ExtractFilePath(Application.ExeName)+'libsqlite3.so';
        ZConnection1.Properties.Add('encrypted=yes');
        ZConnection1.Database:='demo.db3';
        ZConnection1.Password:='123asd';
        ZConnection1.Connect;
        ZQuery1.SQL.Text := 'CREATE TABLE hardware (id INTEGER PRIMARY KEY, compname VARCHAR(30), username VARCHAR(30), model VARCHAR(30))';
        ZQuery1.ExecSQL;
        ZQuery1.SQL.Text := 'CREATE INDEX sHardware ON hardware(compname)';
        ZQuery1.ExecSQL;
        ZQuery1.SQL.Text := 'INSERT INTO hardware(id, compname, username, model) VALUES (1, "AMD8537", "OMonge", "Gigabyte");';
        ZQuery1.ExecSQL;
        ZConnection1.Disconnect;

      打開SQLite數據庫,如果數據庫沒設置密碼,則為數據庫設置密碼:

      procedure RekeyDB(conn: TZConnection; pwd: string);
      var
      db: Pointer;
      i: integer;
      begin
        if not conn.Connected Then conn.Connect;
        db := (conn.DbcConnection as IZSQLiteConnection).GetConnectionHandle;
        i := (conn.DbcConnection as IZSQLiteConnection).GetPlainDriver.ReKey
           (db, PChar(pwd), Length(pwd));
        If (i <> 0) then // 函數正常執行返回0,否則
        begin
        // xxxxxxx
        end;
      end;
      
      function IsSQLite3File(const FileName: TFileName): boolean;
      var F: THandle;
          Header:array [0..15] of char ;
      begin
        F := FileOpen(FileName,fmOpenRead or fmShareDenyNone);
        if F= THandle(-1) then
          result := false else 
      begin FileRead(F,Header,15); if Header='SQLite format 3' then result:=true
      else result:=false;
      FileClose(F);
      end;
      end;

      procedure TForm1.Button2Click(Sender: TObject);
      begin
        ZConnection1.Disconnect;
        ZConnection1.Protocol:='sqlite-3';
        ZConnection1.LibraryLocation:=ExtractFilePath(Application.ExeName)+'libsqlite3.so';
        ZConnection1.Properties.Clear;
        ZConnection1.Properties.Add('encrypted=yes');
        ZConnection1.Properties.Add('controls_cp=CP_UTF8');
        ZConnection1.Properties.Add('AutoEncodeStrings=True');
        ZConnection1.Database:='demo.db3';
        if IsSQLite3File('demo.db3') then
          RekeyDB(ZConnection1,'123asd')  //未加密,則設置數據庫密碼
        else
        begin
          ZConnection1.Password:='123asd';//已加密
          ZConnection1.connect;
        end;
      end;

      執行上面的代碼后就能生成加密的demo.db3。

       設置或取消數據庫密碼:

      uses ZDbcSqLite---要加上這個單元
      procedure
      RekeyDB(conn: TZConnection; pwd: string); var db: Pointer; i: integer; begin db := (conn.DbcConnection as IZSQLiteConnection).GetConnectionHandle; i := (conn.DbcConnection as IZSQLiteConnection).GetPlainDriver.ReKey (db, PChar(pwd), Length(pwd)); If (i <> 0) then // 函數正常執行返回0,否則 begin // xxxxxxx end; end;

      使用方法:

      procedure TForm1.Button2Click(Sender: TObject);
      begin
        ZConnection1.Disconnect;
        ZConnection1.Protocol:='sqlite-3';
        ZConnection1.LibraryLocation:=ExtractFilePath(Application.ExeName)+'libsqlite3.so';
        ZConnection1.Properties.Clear;
        ZConnection1.Properties.Add('encrypted=yes');
        ZConnection1.Properties.Add('controls_cp=CP_UTF8');
        ZConnection1.Properties.Add('AutoEncodeStrings=True');
        ZConnection1.Database:='demo.db3';
        ZConnection1.Password:='123asd';
        ZConnection1.Connect;
        RekeyDB(ZConnection1,'');//取消密碼
      end;


      linux aarch64編譯SQLite3命令行:

      gcc shell.c sqlite3mc.c -lpthread -ldl -o sqlite3

      linux x86_64 SQLite3命令行的編譯:

      autoreconf
      mkdir build-gtk [or any other suitable name]
      cd build-gtk
      ../configure
      make

      使用SQLite3命令行數據密碼設置和取消的方法:

      sqlite3 demo.db3 # 創建一個新的數據庫
      sqlite> PRAGMA key='123asd'; # 設置加密數據庫的密碼
      ok # 顯示 ok 說明設置密碼成功
      sqlite> create table help (id int, name text); # 創建一些數據
      sqlite> .q # 退出數據庫
      sqlite3 demo.db3 # 再次進入數據庫,相當于進入了一個已經加密的數據庫
      sqlite> .tab # 在不輸入密碼的情況下查看當前的表
      Error: file is not a database # 不輸入密碼的情況下,解析數據庫失敗
      sqlite> PRAGMA key = '123asd'; # 使用密碼進行認證
      ok # 輸出 ok,說明認證成功
      sqlite> .tab # 查看數據庫中的表
      help # 查看表成功,目前數據庫中只有表 help
      PRAGMA key = '123asd'--設置密碼
      PRAGMA rekey = ''--取消密碼

       

      posted on 2022-07-24 09:31  秋·風  閱讀(1287)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 真人无码作爱免费视频| 久久国产精品精品国产色| 亚洲日本韩国欧美云霸高清| 东京热一精品无码av| 中国亚洲女人69内射少妇| 国产午夜福利高清在线观看 | 精品国产日韩亚洲一区| 亚洲av色在线观看国产| 四虎永久播放地址免费| 岛国最新亚洲伦理成人| 亚洲人成网线在线播放VA| 亚洲欧美中文日韩V在线观看| 亚洲欧洲日产国码久在线| 无码成人一区二区三区| 色伦专区97中文字幕| 女人被狂躁c到高潮| 不卡视频在线一区二区三区 | 亚洲av二区三区在线| 亚洲免费网站观看视频| 国产精品妇女一区二区三区| 国产精品99中文字幕| 亚洲日本精品一区二区| 欧美日韩在线亚洲二区综二| 国产91特黄特色A级毛片| 免费国产一级 片内射老| 精品欧洲av无码一区二区| 精品视频一区二区福利午夜| 亚洲精品日韩在线观看| 日韩V欧美V中文在线| 亚洲啪啪精品一区二区的| 天天综合天天添夜夜添狠狠添| 啊灬啊灬啊灬快灬高潮了电影片段 | 亚洲人成网站77777在线观看| 亚洲精品国产无套在线观| 色综合久久中文综合久久激情 | 亚洲男人AV天堂午夜在| 国内视频偷拍久久伊人网| 国产日韩久久免费影院| 欧美视频二区欧美影视| 安国市| 精品亚洲综合一区二区三区|