篇首语:本文由小常识网(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
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),对比文件大小,可以明显看到差异。