Lazarus连接SQLite示例
<p>以下是一个完整的 Lazarus 连接 SQLite 的示例:</p>
<h2>1. 准备工作</h2>
<p>windows要安装SQLite3和配置环境。[详细点击](<a href="https://www.showdoc.com.cn/atech/11559027240620309">https://www.showdoc.com.cn/atech/11559027240620309</a> "详细点击")</p>
<h2>2. 界面设计</h2>
<p>在窗体上放置以下组件:</p>
<ul>
<li>TSQLConnector</li>
<li>TSQLTransaction </li>
<li>TSQLQuery</li>
<li>TDataSource</li>
<li>TDBGrid</li>
<li>TButton(几个操作按钮)</li>
</ul>
<h2>3. 完整代码示例</h2>
<pre><code class="language-pascal">unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, DBGrids, StdCtrls,
DB, sqldb, SQLite3Conn;
type
{ TForm1 }
TForm1 = class(TForm)
btnConnect: TButton;
btnCreateTable: TButton;
btnInsert: TButton;
btnSelect: TButton;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
SQLConnector1: TSQLConnector;
SQLQuery1: TSQLQuery;
SQLTransaction1: TSQLTransaction;
procedure btnConnectClick(Sender: TObject);
procedure btnCreateTableClick(Sender: TObject);
procedure btnInsertClick(Sender: TObject);
procedure btnSelectClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
FDatabasePath: string;
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
// 设置数据库文件路径
FDatabasePath := ExtractFilePath(Application.ExeName) + &#039;test.db&#039;;
Caption := &#039;SQLite Demo - 数据库: &#039; + FDatabasePath;
// 配置数据库连接
SQLConnector1.ConnectorType := &#039;SQLite3&#039;;
SQLConnector1.DatabaseName := FDatabasePath;
SQLConnector1.Transaction := SQLTransaction1;
SQLQuery1.DataBase := SQLConnector1;
DataSource1.DataSet := SQLQuery1;
DBGrid1.DataSource := DataSource1;
end;
procedure TForm1.btnConnectClick(Sender: TObject);
begin
try
// 连接数据库
SQLConnector1.Connected := True;
ShowMessage(&#039;数据库连接成功!&#039;);
except
on E: Exception do
ShowMessage(&#039;连接失败: &#039; + E.Message);
end;
end;
procedure TForm1.btnCreateTableClick(Sender: TObject);
var
SQL: string;
begin
if not SQLConnector1.Connected then
begin
ShowMessage(&#039;请先连接数据库!&#039;);
Exit;
end;
try
SQL := &#039;CREATE TABLE IF NOT EXISTS users (&#039; +
&#039;id INTEGER PRIMARY KEY AUTOINCREMENT, &#039; +
&#039;name VARCHAR(50) NOT NULL, &#039; +
&#039;email VARCHAR(100), &#039; +
&#039;age INTEGER, &#039; +
&#039;created_date DATETIME DEFAULT CURRENT_TIMESTAMP)&#039;;
SQLQuery1.SQL.Text := SQL;
SQLQuery1.ExecSQL;
SQLTransaction1.Commit;
ShowMessage(&#039;数据表创建成功!&#039;);
except
on E: Exception do
begin
SQLTransaction1.Rollback;
ShowMessage(&#039;创建表失败: &#039; + E.Message);
end;
end;
end;
procedure TForm1.btnInsertClick(Sender: TObject);
begin
if not SQLConnector1.Connected then
begin
ShowMessage(&#039;请先连接数据库!&#039;);
Exit;
end;
try
// 插入示例数据
SQLQuery1.SQL.Text :=
&#039;INSERT INTO users (name, email, age) VALUES &#039; +
&#039;(&#039;&#039;张三&#039;&#039;, &#039;&#039;zhangsan@email.com&#039;&#039;, 25), &#039; +
&#039;(&#039;&#039;李四&#039;&#039;, &#039;&#039;lisi@email.com&#039;&#039;, 30), &#039; +
&#039;(&#039;&#039;王五&#039;&#039;, &#039;&#039;wangwu@email.com&#039;&#039;, 28)&#039;;
SQLQuery1.ExecSQL;
SQLTransaction1.Commit;
ShowMessage(&#039;数据插入成功!&#039;);
except
on E: Exception do
begin
SQLTransaction1.Rollback;
ShowMessage(&#039;插入数据失败: &#039; + E.Message);
end;
end;
end;
procedure TForm1.btnSelectClick(Sender: TObject);
begin
if not SQLConnector1.Connected then
begin
ShowMessage(&#039;请先连接数据库!&#039;);
Exit;
end;
try
SQLQuery1.Close;
SQLQuery1.SQL.Text := &#039;SELECT * FROM users&#039;;
SQLQuery1.Open;
ShowMessage(&#039;查询成功,共 &#039; + IntToStr(SQLQuery1.RecordCount) + &#039; 条记录&#039;);
except
on E: Exception do
ShowMessage(&#039;查询失败: &#039; + E.Message);
end;
end;
end.</code></pre>
<h2>4. 组件属性设置</h2>
<p>在对象检查器中设置以下属性:</p>
<p><strong>SQLConnector1:</strong></p>
<ul>
<li>ConnectorType: SQLite3</li>
<li>DatabaseName: (程序运行时会自动设置)</li>
</ul>
<p><strong>SQLTransaction1:</strong></p>
<ul>
<li>DataBase: SQLConnector1</li>
</ul>
<p><strong>SQLQuery1:</strong></p>
<ul>
<li>DataBase: SQLConnector1</li>
<li>Transaction: SQLTransaction1</li>
</ul>
<p><strong>DataSource1:</strong></p>
<ul>
<li>DataSet: SQLQuery1</li>
</ul>
<p><strong>DBGrid1:</strong></p>
<ul>
<li>DataSource: DataSource1</li>
</ul>
<h2>5. 使用说明</h2>
<ol>
<li><strong>连接数据库</strong>:点击"连接"按钮建立数据库连接</li>
<li><strong>创建表</strong>:点击"创建表"按钮创建用户表</li>
<li><strong>插入数据</strong>:点击"插入数据"按钮添加示例数据</li>
<li><strong>查询数据</strong>:点击"查询数据"按钮显示所有记录</li>
</ol>
<h2>6. 高级示例 - 参数化查询</h2>
<pre><code class="language-pascal">// 安全的参数化插入
procedure TForm1.SafeInsert;
begin
SQLQuery1.SQL.Text :=
&#039;INSERT INTO users (name, email, age) VALUES (:name, :email, :age)&#039;;
SQLQuery1.ParamByName(&#039;name&#039;).AsString := &#039;赵六&#039;;
SQLQuery1.ParamByName(&#039;email&#039;).AsString := &#039;zhaoliu@email.com&#039;;
SQLQuery1.ParamByName(&#039;age&#039;).AsInteger := 35;
SQLQuery1.ExecSQL;
SQLTransaction1.Commit;
end;
// 带条件的查询
procedure TForm1.ConditionalQuery;
begin
SQLQuery1.Close;
SQLQuery1.SQL.Text := &#039;SELECT * FROM users WHERE age &gt; :min_age&#039;;
SQLQuery1.ParamByName(&#039;min_age&#039;).AsInteger := 25;
SQLQuery1.Open;
end;</code></pre>
<h2>注意事项</h2>
<ol>
<li>SQLite 数据库文件会在首次连接时自动创建</li>
<li>记得在数据修改后调用 <code>SQLTransaction1.Commit</code></li>
<li>异常处理中要调用 <code>SQLTransaction1.Rollback</code></li>
<li>程序关闭时会自动断开数据库连接</li>
</ol>
<p>这个示例展示了 Lazarus 连接 SQLite 的基本操作,你可以根据实际需求进行扩展。</p>