android sqlite3 创建数据库文件,在内部存储ANDROID上创建SQLite数据库

我正在尝试在我的Xamarin应用程序中的内部存储上创建一个SQLIte数据库。 我正在为离线环境创建一个系统,其中至少有3个应用程序与共享数据相互连接。 因此,如果一个应用程序创建了一些数据,则其他应用程序应该能够读取该数

Database项目是一个可移植类库,我打算将其包含在所有三个应用程序中。

我的DbHelper如下:

public Database()

{

string folder ="/data/data/Anchor.Main";

_dbPath = System.IO.Path.Combine(folder,"Anchor.db");

try

{

if (!System.IO.Directory.Exists(folder))

{

System.IO.Directory.CreateDirectory(folder); //Getting error here

}

_connection = new SQLiteConnection(_dbPath);

_connection.CreateTable();

_connection.CreateTable();

}

catch(Exception ex)

{  }

}

我得到了错误

Access to the path"/data/data/Anchor.Main" is denied.

以下是堆栈跟踪

at System.IO.Directory.CreateDirectoriesInternal (System.String path)

[0x0004b] in <3fd174ff54b146228c505f23cf75ce71>:0 at

System.IO.Directory.CreateDirectory (System.String path) [0x00075] in

<3fd174ff54b146228c505f23cf75ce71>:0 at

anchorapp.db.Helper.Database..ctor () [0x0002e]

我理解这是因为权限,但我需要设置哪些权限才能从PCL写入内部存储?

您正在访问"/data/data/Anchor.Main"的Android系统文件夹。

您的应用内部存储空间将在

/data/data/@PACKAGE_NAME@/files

您可以使用以下代码获取存储数据库的文件夹:

// Equal to /data/data/@PACKAGE_NAME@/files

var homePath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);

_dbPath = System.IO.Path.Combine(homePath,"Anchor.db");

_connection = new SQLiteConnection(_dbPath);

我可以这样做,但我需要其他应用程序来访问此应用程序创建的数据库。 是否可以从另一个数据库创建的数据库中读取数据?

您可以在清单中定义android:sharedUserId以启用2个应用程序来共享数据。 但是,您应该考虑您的应用是否真的需要使用此方法。 查看ContentProvider,看看它是否能够首先实现您计划对应用程序执行的操作。

我尝试使用内容提供程序,导致了一个不同的错误stackoverflow.com/questions/45074287/我肯定需要访问数据库中的至少1个应用程序。我怎样才能使用sharedId。

Android和iOS无法正常工作。 每个平台都将应用程序保存在沙盒环境中。 如果要在应用程序中创建和存储数据,则需要创建如下示例的路径:

var docFolder = Environment.GetFolderPath(Environment.SpecialFolder.Personal);

_dbPath = System.IO.Path.Combine(docFolder,"Anchor.db");

还要在Android项目中设置权限ReadExternalStorage和WriteExternalStorage

您可以在公共文件夹中创建数据库,而不是写入私人文件夹。 为此,docFolder将更改为:

var docFolder = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath,"YourDirectoryName");

请注意,如果你这样走,每个人都可以看到并打开数据库。

我可以这样做,但我需要其他应用程序来访问此应用程序创建的数据库。 是否可以从另一个数据库创建的数据库中读取数据?

我通过在项目中创建sharedId并使用SharedContext访问其他应用程序创建的数据库来实现此目的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值