当前位置: 首页 > news >正文

在统信UOS(Linux)中构建SQLite3桌面应用笔记

目录

1 下载lazarus

2 下载sqlite3源码编译生成库文件

3 新建项目

4 设置并编译


一次极简单的测试,记录一下。

操作系统:统信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 Download Page

下载了 sqlite-amalgamation-3500100,编译生成 libsqlite3.so

建一个存放编译生成程序的文件夹,例如数据盘中,bin/

上面的so文件保存在 bin/sys/ 

3 新建项目

窗体很简单,form中只有一个按钮。

代码:

unit Unit1;{$mode objfpc}{$H+}interfaceusesClasses, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,SQLite3Conn, SQLDB, dynlibs, sqlite3dyn;type{ TForm1 }TForm1 = class(TForm)Button1: TButton;procedure Button1Click(Sender: TObject);privateprocedure ConnectDB;publicend;varForm1: TForm1;implementation{$R *.lfm}procedure TForm1.Button1Click(Sender: TObject);
beginConnectDB;
end;procedure TForm1.ConnectDB;
varConn: 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) thenbeginShowMessage('SQLite 库文件不存在:' + LineEnding + LibPath);Exit;end;// 4. 加载库文件xOK:=sqlite3dyn.InitializeSqlite(LibPath);if xOK=0 thenbeginshowmessage('ERROR: ' + LibName +' NOT Loaded');exit;end elsebeginshowmessage( LibName + ' Loaded OK');end;// 5. 构建数据库路径DBPath := ConcatPaths([ExtractFilePath(ParamStr(0)),'data','test.db']);// 6. 确保目录存在if not DirectoryExists(ExtractFilePath(DBPath)) thenif not ForceDirectories(ExtractFilePath(DBPath)) thenbeginShowMessage('无法创建目录: ' + 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) thenbegintryConn.Open;Conn.ExecuteDirect('CREATE TABLE IF NOT EXISTS Test (id INTEGER PRIMARY KEY, name TEXT)');Trans.Commit;Conn.Close;ShowMessage('新建数据库: ' + DBPath);excepton E: Exception doShowMessage('创建数据库失败: ' + E.Message);end;end;// 10. 连接数据库tryConn.Open;Trans.Active := True;if Conn.Connected thenShowMessage('数据库连接成功!' + LineEnding +'路径: ' + DBPath + LineEnding)elseShowMessage('连接失败');excepton E: Exception doShowMessage('数据库连接错误: ' + E.Message + LineEnding +'请检查文件权限: ' + DBPath);end;finallyConn.Free;Trans.Free;end;
end;end.

4 设置并编译

设置输出路径到前面建立的目录。

然后编译。

运行试试:

相关文章:

  • 2023年5月份疫情最新消息上海外包seo
  • 做都是正品的网站很难吗it培训机构哪个好
  • 上海建设工程学校快排seo排名软件
  • 网站模型怎么做搜索引擎关键词怎么优化
  • 你的安全设置不允许网站便民信息微信平台推广
  • 高端网站制作建设软件外包网
  • C++之string类的实现代码及其详解(上)
  • 0 数学习题本
  • 【stm32】HAL库开发——Cube配置基本定时器
  • Llama 3 + Qwen2双模型实战:单张3090构建企业级多模态知识库(2025精解版)
  • 关于 ARM64 汇编:调用流程与栈帧结构解析
  • Jenkins与Kubernetes深度整合实践
  • GitLab 18.1 高级 SAST 已支持 PHP,可升级体验!
  • OSPF 路由协议详细笔记
  • Python-7-读取/写入文件数据
  • mb_bootloop_le.elf是使用microblaze默认的elf文件,这个文件包括哪些内容?
  • n8n智能体新境界:MCP服务器简化复杂自动化
  • Apache 支持 HTTPS
  • 系统性能优化-6 TCP 三次握手
  • easyExcel导入多sheet的Excel,存在合并单元格、列不固定的情况
  • 自动获取文件的内存大小怎么设置?批量获取文件名和内存大小到Excel中的方法
  • notepad++ 怎么快速给 python (nginx、shell) 文件加 # 注释
  • 远程玩3A大作要多少帧?ToDesk、向日葵、UU远程性能对决
  • 从零搭建高效本地代理池:设计与实现
  • Ubuntu中控制用户cpu资源分配控制步骤
  • Flutter 多平台项目开发指南