delphi sqlite3.dll怎么操作sqlite3

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi sqlite3.dll怎么操作sqlite3相关的知识,希望对你有一定的参考价值。

procedure TForm1.btnTestClick(Sender: TObject);
var
  slDBpath: string;
  sldb: TSQLiteDatabase;
  sltb: TSQLIteTable;
  sSQL: string;
  Notes: string;
  i, ts: integer;

begin

  slDBPath := ExtractFilepath(application.exename) + 'test.db';

  //slDBPath := 'r:\\test.db';


  sldb := TSQLiteDatabase.Create(slDBPath);
  try

    slDb.Synchronised :=  false;
    if sldb.TableExists('testTable') then
    begin
      sSQL := 'DROP TABLE testtable';
      sldb.execsql(sSQL);
    end;

    //sSQL := 'CREATE TABLE testtable ([ID] INTEGER PRIMARY KEY,[OtherID] INTEGER NULL,';
    //sSQL := sSQL + '[Name] VARCHAR (255),[Number] FLOAT, [notes] BLOB, [picture] BLOB COLLATE NOCASE);';

    sSQL := 'CREATE TABLE testtable ([ID] INTEGER PRIMARY KEY ,[OtherID] INTEGER NULL,';
    sSQL := sSQL + '[Name] VARCHAR (255),[Notes] VARCHAR (255),[Number] FLOAT COLLATE NOCASE);';

    sldb.execsql(sSQL);

    //sldb.execsql('CREATE INDEX TestTableName ON [testtable]([Name]);');

    ts := GetTickCount();
    //begin a transaction
    sldb.BeginTransaction;

    for i := 0 to 10000 do
    begin

      sSQL := 'INSERT INTO testtable(Name,OtherID,Number,Notes) VALUES ("Some Name",4,587.6594,"Here are some notes");';
      //do the insert
      sldb.ExecSQL(sSQL);

      sSQL := 'INSERT INTO testtable(Name,OtherID,Number,Notes) VALUES ("Another Name",12,4758.3265,"More notes");';
      //do the insert
      sldb.ExecSQL(sSQL);
    end;

    //end the transaction
    sldb.Commit;
    ts := GetTickCount() - ts;
    showmessage(format('insert 10000 : %d ms', [ts])); //'Sqlite dll version:'+SlDb.version);

//
//    sSQL := 'INSERT INTO testtable(Name,OtherID,Number,Notes) VALUES ("Another Name",12,4758.3265,"More notes");';
//    sldb.PrepareSQL(sSQL);
//    sldb.bind


    //query the data
    sltb := slDb.GetTable('SELECT * FROM testtable');
    try

      if sltb.Count > 0 then
      begin
        //display first row

        ebName.Text := sltb.FieldAsString(sltb.FieldIndex['Name']);
        ebID.Text := inttostr(sltb.FieldAsInteger(sltb.FieldIndex['ID']));
        ebNumber.Text := floattostr(sltb.FieldAsDouble(sltb.FieldIndex['Number']));
        //Notes := sltb.FieldAsBlobText(sltb.FieldIndex['Notes']);
        memNotes.Text := notes;

      end;

    finally
      sltb.Free;
    end;
    
  finally
    sldb.Free;

  end;

end;

下载 Delphi SQLite3的开源插件 http://www.itwriting.com/repos/sqlitewrapper/trunk/sqlitesimpledelphi.zip

 这个demo中包含了sqlite3.pas,sqlite3table.pas,sqlite.dll三个文件,里面包含了操作sqlite3的源代码,利用这三个文件,就不需要第三方组件了

添加步骤:

将simple sqlite 3.0 for delphi 中的 sqlite3.pas,sqlite3table.pas拷贝至工程所在的文件夹。并在工程中添加这两个个文件。

拷贝 sqlite.dll到编译生成exe文件的文件夹。这个根据个人的设定。


更新到SQLite3 dll文件   http://www.sqlite.org/download.html

参考技术A sqlite是c语言写的,开源的小型数据库。官网可以下到源代码(不带加密功能的),里面包含API的格式。sqlite3
是数据库定义的数据结构,**ppDb是个指针的指针,原文定义是:OUT: SQLite db
handle,所以delphi定义一个无类型指针就可以,比如db: pointer;
可以很容易搜索到Delphi与C语言类型转换对照表。有很多组件可以操作sqlite数据库(部分收费),比如UniDAC、zeoslib(开源)、DISQLite3、sivak3,高版本Delphi自带的FireDAC、dbExpress等。

Python + SQLite + ST_Geometry

SQLite是嵌入式的轻量级数据库,ArcMap可以建立SQLite数据库,并配合ST_Geometry直接对数据库中的空间数据进行操作,
为了可以更加灵活的编写SQL语言,使用Python调用SQLite。

参考ArcGIS的帮助文档,SQLite要使用ST_Geometry对数据进行处理,需要加载stgeometry_sqlite.dll组件

为了将空间属性字段(ST_Geometry类型)加入到数据库中,还需要调用CreateOGCTables()函数

在PyCharm中建立Python代码如下:因为使用的是64位的Python,所以调用了Windows64的stgeometry_sqlite.dll组件。

运行代码提示错误,原因是没有权限

修改将上述代码,添加 conn.enable_load_extension(True),开启加入扩展组件的权限,并运行代码。

运行代码提示错误,原因是找不到指定模块,但是stgeometry_sqlite.dll模块的路径正确,不存在模块没有找到,终于得知解决办法。

代码中import sqlite3是调用的Python自带的sqlite3.dll模块,如下图所示,但是这个sqlite3.dll模块只满足了SQLite基础功能

笔者从网上下了sqlite3.exe,https://www.sqlite.org/download.html

解压上下面的zip文件,sqlite-tools-win32-x86-3300100.zip中的sqlite3.exe是官方提供的SQL编辑器,
将sqlite-dll-win64-x64-3300100.zip中的文件解压,放入sqlite-tools-win32-x86-3300100文件中,sqlite3.exe就可以使用64位的SQLite了。

将上述sqlite-dll-win64.x64-3300100.zip解压后的sqlite3.dll文件,替换Python自带的sqlite3.dll(将Python自带的重命名为sqlite3_old.dll),对比文件大小,可以明显看到差异。

以上是关于delphi sqlite3.dll怎么操作sqlite3的主要内容,如果未能解决你的问题,请参考以下文章

sqlite3.dll丢失怎么办

delphi上用啥控件访问SQLITE的速度最快

sqlite.dll文件缺失怎么办

SQLite3的使用(用到了dll)good

那位大侠教教我。delphi怎么调用sql 还有就是直接调用sql的存储过程

sqlite3.dll是啥程序?他在电脑硬盘里面哪个位置的