SQLite数据库部署到Android设备的路径是什么?

时间:2013-09-18 16:50:35

标签: android sqlite delphi firemonkey delphi-xe5

关注DocWiki后,我将SQLite数据库部署到资产\ internal \

并使用以下代码:

SQLConnection1.Params.Values['Database'] := 
TPath.Combine(TPath.GetDocumentsPath, 'myDB.db');

但是,当我尝试访问其中一个表时,它不存在。

SQLite的部署/访问的正确设置是什么?

5 个答案:

答案 0 :(得分:4)

我刚刚将一个SQLite数据库部署到一个Android应用程序。这就是我所学到的。

使用应用程序部署数据库的Instad,我在connect上创建它,然后创建表(如果它们不存在)。

我还使用TFDConnection组件而不是TSQLConnection组件。

所以在TFDConnection BeforeConnect上:


  {$IF DEFINED(IOS) or DEFINED(ANDROID)}

  FDConnection1.Params.Values['Database'] :=
    TPath.GetDocumentsPath + PathDelim + 'MyDatabase.s3db';

  {$ENDIF}

关于TFDConnection AfterConnect:


FDConnection1.ExecSQL('CREATE TABLE IF NOT EXISTS MyTable (myField1 TEXT NOT NULL)');

我刚刚在模拟器和我的Droid X上测试了这个方法。

还要确保包含TFDGUIxWaitCursor和TFDPhysSQLiteDriverLink组件。

答案 1 :(得分:1)

添加使用“System.IOUtils”

在连接按钮中:

var
  DbYol : string;
begin

DbYol := System.IOUtils.TPath.GetDocumentsPath + PathDelim + 'SqliteDers.s3db';

With FDConnection1 do
begin
LoginPrompt := False;
Params.Clear;
Params.Values['Database'] := DbYol; 
Params.Values['DriverID'] := 'SQLite';
Params.Values['CharacterSet'] := 'utf8'; 
Connected := True; 
// Create new database if no exist
end;

With FDQuery1 do
begin
Active := False; 

Connection := FDConnection1;
SQL.Clear;
SQL.Add( 'CREATE TABLE IF NOT EXISTS DERS (' );
SQL.Add( ' ADI nvarchar(10)');
SQL.Add( ' );');
ExecSQL; 
göre ayarlıyoruz
SQL.Clear;
SQL.Add( 'SELECT');
SQL.Add( ' ADI' );
SQL.Add( ' FROM DERS' );
Active := True;
end;

这是详细信息的好例子。

http://www.brsatalay.com/xe5-mobil-uygulamada-sqlite-veritabani-kullanimi

答案 2 :(得分:1)

我发现当您更改数据库并部署这些更改时,更改有时不会对设备生效(仅在ANDROID上进行测试)。从设备本身卸载应用程序并执行“全新”部署/安装将确保您使用应用程序部署更改的SQLITE数据库。

** i.m.o - 你应该只为测试/调试这样做。我完全同意@FLDelphi的帖子,并且一旦完成***就会在我的APP中实现他的方法

答案 3 :(得分:1)

正确的部署集(所有配置 - Android平台):

Local Name: myDB.db
Remote Path: .\assets\internal\
Remote Filename: myDB.db

事件BeforeConnection必须遵循代码:

procedure TDM.conSQLiteBeforeConnect(Sender: TObject);
var
    dbPath: string;
begin
{$IF DEFINED(iOS) or DEFINED(ANDROID)}
    dbPath := TPath.Combine(TPath.GetDocumentsPath, 'myDB.db');
{$ENDIF}
    FDConnection1.Params.Values['Database'] := dbPath;
end;

答案 4 :(得分:0)

我使用过FireDac。

FDConnection1.Params.Values['Database'] := '$(DOC)/QuickQuote.s3db';

我在FDConnection1BeforeConnect上使用它。

所有这些都要确保在Deploment中包含数据库文件。

我遵循了这个TUT Click Here