目录
一次极简单的测试,记录一下。
操作系统:统信UOS,
内核:4.19.0-arm64-desktop
处理器:D3000
整个流程难点是生成so库文件并正确加载。从别的地方复制过来的so文件都不行,反复加载测试都失败。
以下是操作步骤:
1 下载lazarus
使用秋风定制的lazarus,全面支持常用操作系统,常见国产CPU。自己写的FPC/Lazarus安装程序(2025-06-24 v0.5.9.0下载) - 秋·风 - 博客园
安装说明非常详细,按照说明完成编译安装。
2 下载sqlite3源码编译生成库文件
下载了 sqlite-amalgamation-3500100,编译生成 libsqlite3.so
建一个存放编译生成程序的文件夹,例如数据盘中,bin/
上面的so文件保存在 bin/sys/
3 新建项目
窗体很简单,form中只有一个按钮。
代码:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,
SQLite3Conn, SQLDB, dynlibs, sqlite3dyn;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
procedure ConnectDB;
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
ConnectDB;
end;
procedure TForm1.ConnectDB;
var
Conn: TSQLite3Connection;
Trans: TSQLTransaction;
DBPath, LibPath, LibName: String;
xOK:Integer;
begin
// 1. 确定库文件名
{$IFDEF WINDOWS}
LibName := 'sqlite3.dll';
{$ENDIF}
{$IFDEF LINUX}
LibName := 'libsqlite3.so';
{$ENDIF}
{$IFDEF DARWIN}
LibName := 'libsqlite3.dylib';
{$ENDIF}
// 2. 构建库文件路径
LibPath := ConcatPaths([
ExtractFilePath(ParamStr(0)),
'sys',
LibName
]);
// 3. 验证库文件是否存在
if not FileExists(LibPath) then
begin
ShowMessage('SQLite 库文件不存在:' + LineEnding + LibPath);
Exit;
end;
// 4. 加载库文件
xOK:=sqlite3dyn.InitializeSqlite(LibPath);
if xOK=0 then
begin
showmessage('ERROR: ' + LibName +' NOT Loaded');
exit;
end else
begin
showmessage( LibName + ' Loaded OK');
end;
// 5. 构建数据库路径
DBPath := ConcatPaths([
ExtractFilePath(ParamStr(0)),
'data',
'test.db'
]);
// 6. 确保目录存在
if not DirectoryExists(ExtractFilePath(DBPath)) then
if not ForceDirectories(ExtractFilePath(DBPath)) then
begin
ShowMessage('无法创建目录: ' + ExtractFilePath(DBPath));
Exit;
end;
// 7. 创建数据库对象
Conn := TSQLite3Connection.Create(nil);
Trans := TSQLTransaction.Create(nil);
Conn.Transaction := Trans;
try
// 8. 设置数据库路径
Conn.DatabaseName := DBPath;
// 9. 处理新数据库创建
if not FileExists(DBPath) then
begin
try
Conn.Open;
Conn.ExecuteDirect('CREATE TABLE IF NOT EXISTS Test (id INTEGER PRIMARY KEY, name TEXT)');
Trans.Commit;
Conn.Close;
ShowMessage('新建数据库: ' + DBPath);
except
on E: Exception do
ShowMessage('创建数据库失败: ' + E.Message);
end;
end;
// 10. 连接数据库
try
Conn.Open;
Trans.Active := True;
if Conn.Connected then
ShowMessage('数据库连接成功!' + LineEnding +
'路径: ' + DBPath + LineEnding)
else
ShowMessage('连接失败');
except
on E: Exception do
ShowMessage('数据库连接错误: ' + E.Message + LineEnding +
'请检查文件权限: ' + DBPath);
end;
finally
Conn.Free;
Trans.Free;
end;
end;
end.
4 设置并编译
设置输出路径到前面建立的目录。
然后编译。
运行试试: