SQLite数据库部署到Android设备的路径是什么?
遵循之后,我将SQLite DB部署到assets\internal\ 并使用以下代码: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上创建数据库,
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;