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

SQLite数据库部署到Android设备的路径是什么?,android,sqlite,delphi,firemonkey,delphi-xe5,Android,Sqlite,Delphi,Firemonkey,Delphi Xe5,遵循之后,我将SQLite DB部署到assets\internal\ 并使用以下代码: SQLConnection1.Params.Values['Database'] := TPath.Combine(TPath.GetDocumentsPath, 'myDB.db'); 但是,当我尝试访问其中一个表时,它并不存在 SQLite部署/访问的正确设置是什么?我刚刚将SQLite数据库部署到android应用程序。这是我学到的 在应用程序中部署数据库的过程中,我在connect上创建数据库,

遵循之后,我将SQLite DB部署到assets\internal\

并使用以下代码:

SQLConnection1.Params.Values['Database'] := 
TPath.Combine(TPath.GetDocumentsPath, 'myDB.db');
但是,当我尝试访问其中一个表时,它并不存在


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

我刚刚将SQLite数据库部署到android应用程序。这是我学到的

在应用程序中部署数据库的过程中,我在connect上创建数据库,如果表不存在,则创建表

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

因此,在连接之前先使用TFD连接:


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

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

  {$ENDIF}
在TFD连接上,连接后:


FDConnection1.ExecSQL('CREATE TABLE IF NOT EXISTS MyTable (myField1 TEXT NOT NULL)');
我刚刚在模拟器上测试了这个方法,我的DroidX

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

我使用了FireDac

FDConnection1.Params.Values['Database'] := '$(DOC)/QuickQuote.s3db';
在重新连接之前,我在FDConnection1b上使用此选项

因此,请确保在Deploment中包含数据库文件


我遵循了这个TUT,添加了“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;
这是一个很好的例子


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

**i.m.o-您只应在测试/调试时执行此操作。我完全同意@FLDelphi的帖子,并将在我的应用程序中实现他的方法***

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

连接前的事件必须遵循以下代码:

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;

谢谢,但我需要部署一个现有的数据库。只有在Android上有类似的问题,在Windows上是可以的。路径是正常的,我检查了,文件是可见的。你能粘贴更多的代码,这样我们就可以看到问题了吗?我有一个类似的窗口,我没有看到任何表,虽然它们在那里,但只有在窗体设计器中。当我执行应用程序时,数据就在那里。只有在Android上有类似的问题,在Windows上是可以的。路径正常,我检查了,文件可见。有人在Android上使用TSQLConnection吗?如何将DB从'assets\internal'复制到文档路径?请注意,这是不鼓励的,因此答案应该是搜索解决方案的终点(而不是另一个参考的中途停留,随着时间的推移,它往往会过时)。请考虑在这里添加一个独立的概要,将链接作为参考。虽然这个链接可以回答这个问题,但是最好把答案的重要部分包含在这里,并提供链接以供参考。如果链接页面发生更改,只有链接的答案可能无效。请先在Android中卸载应用程序。我也遇到过这样的情况。
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;