Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何准备Sqlite数据库以供跨平台使用_Sqlite_Xamarin - Fatal编程技术网

如何准备Sqlite数据库以供跨平台使用

如何准备Sqlite数据库以供跨平台使用,sqlite,xamarin,Sqlite,Xamarin,我正在构建一个Xamarin跨平台应用程序。我希望我的应用程序以初始数据库开始。我如何创建sqlite数据库重要吗?我的意思是,我可以使用一些SQlite浏览器应用程序来创建它,并期望它在Android、IOS和UWP中工作吗?我是否应该关心每个平台使用的sqlite版本 在iOS上要复制添加到Xamarin iOS项目根目录的数据库,请在AppDelegate.FinsishedLaunching方法中运行以下代码: var dbPath = Path.Combine (System.Envi

我正在构建一个Xamarin跨平台应用程序。我希望我的应用程序以初始数据库开始。我如何创建sqlite数据库重要吗?我的意思是,我可以使用一些SQlite浏览器应用程序来创建它,并期望它在Android、IOS和UWP中工作吗?我是否应该关心每个平台使用的sqlite版本

在iOS上要复制添加到Xamarin iOS项目根目录的数据库,请在
AppDelegate.FinsishedLaunching
方法中运行以下代码:

var dbPath = Path.Combine (System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal), "yourdatabase.db3");
var appDir = NSBundle.MainBundle.ResourcePath;
var seedFile = Path.Combine(appDir, "yourdatabase.db3");
if (!File.Exists(dbPath) && File.Exists(seedFile))
{
    File.Copy(seedFile, dbPath);
}
对于Android,将数据库文件放在
Resources
文件夹中名为
Raw
的文件夹中(如果不存在
Raw
文件夹,则创建该文件夹)。还要确保将
ReadExternalStorage
WriteExternalStorage
权限添加到
AndroidManifest.xml
文件中。然后在
main活动中运行以下代码。OnCreate
方法:

var dbPath = Path.Combine (System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal), "yourdatabase.db3"); 
var readStream = Resources.OpenRawResource(Resource.Raw.yourdatabase);
if (!System.IO.File.Exists(dbPath)) {
    FileStream writeStream = new FileStream(dbPath, FileMode.OpenOrCreate, FileAccess.Write);
    ReadWriteStream(readStream, writeStream);
}
并将以下方法添加到
MainActivity
类中:

private void ReadWriteStream(Stream readStream, Stream writeStream)
{
    int Length = 256;
    Byte[] buffer = new Byte[Length];
    int bytesRead = readStream.Read(buffer, 0, Length);
    // write the required bytes
    while (bytesRead > 0)
    {
        writeStream.Write(buffer, 0, bytesRead);
        bytesRead = readStream.Read(buffer, 0, Length);
    }
    readStream.Close();
    writeStream.Close();
}

然后,数据库文件将位于
dbPath
变量路径中的可写位置。注意:此代码假设您只想复制db文件,如果它在可写位置不存在,这似乎是一个有效的假设。:-)

在iOS上要复制添加到Xamarin iOS项目根目录的数据库,请在
AppDelegate.FinsishedLaunching
方法中运行以下代码:

var dbPath = Path.Combine (System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal), "yourdatabase.db3");
var appDir = NSBundle.MainBundle.ResourcePath;
var seedFile = Path.Combine(appDir, "yourdatabase.db3");
if (!File.Exists(dbPath) && File.Exists(seedFile))
{
    File.Copy(seedFile, dbPath);
}
对于Android,将数据库文件放在
Resources
文件夹中名为
Raw
的文件夹中(如果不存在
Raw
文件夹,则创建该文件夹)。还要确保将
ReadExternalStorage
WriteExternalStorage
权限添加到
AndroidManifest.xml
文件中。然后在
main活动中运行以下代码。OnCreate
方法:

var dbPath = Path.Combine (System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal), "yourdatabase.db3"); 
var readStream = Resources.OpenRawResource(Resource.Raw.yourdatabase);
if (!System.IO.File.Exists(dbPath)) {
    FileStream writeStream = new FileStream(dbPath, FileMode.OpenOrCreate, FileAccess.Write);
    ReadWriteStream(readStream, writeStream);
}
并将以下方法添加到
MainActivity
类中:

private void ReadWriteStream(Stream readStream, Stream writeStream)
{
    int Length = 256;
    Byte[] buffer = new Byte[Length];
    int bytesRead = readStream.Read(buffer, 0, Length);
    // write the required bytes
    while (bytesRead > 0)
    {
        writeStream.Write(buffer, 0, bytesRead);
        bytesRead = readStream.Read(buffer, 0, Length);
    }
    readStream.Close();
    writeStream.Close();
}

然后,数据库文件将位于
dbPath
变量路径中的可写位置。注意:此代码假设您只想复制db文件,如果它在可写位置不存在,这似乎是一个有效的假设。:-)

也许这个链接可以帮助你

请注意,此链接显示了如何使用xamarin.Forms创建本地数据库,并根据每个平台获取数据库路径。如果您使用的是mvvmcross,我建议您不要使用此解决方案

我正在寻找一种方法,根据每个平台获取本地数据库路径,而不使用xamarin.Forms,因为xamarin.Forms依赖于旧版本的android.support.v4/v7,在我的例子中,这会导致其他问题,例如无法安装下载缓存插件

在同一个链接中,我提供了一些信息来执行我正在尝试的操作,但这些代码不适用于mvvmcross v4.4.0。在
//winPhone
中无法识别

ApplicationData.Current.LocalFolder.Path
好吧,这是我的过期不是一个真正的答案,但也许我帮助过你,或者你可以帮助我;)谢谢。

也许这个链接可以帮助你

请注意,此链接显示了如何使用xamarin.Forms创建本地数据库,并根据每个平台获取数据库路径。如果您使用的是mvvmcross,我建议您不要使用此解决方案

我正在寻找一种方法,根据每个平台获取本地数据库路径,而不使用xamarin.Forms,因为xamarin.Forms依赖于旧版本的android.support.v4/v7,在我的例子中,这会导致其他问题,例如无法安装下载缓存插件

在同一个链接中,我提供了一些信息来执行我正在尝试的操作,但这些代码不适用于mvvmcross v4.4.0。在
//winPhone
中无法识别

ApplicationData.Current.LocalFolder.Path
好吧,这是我的过期不是一个真正的答案,但也许我帮助过你,或者你可以帮助我;)谢谢。

我通常使用FF SQLItemManager插件创建数据库,然后将其复制到我的各个项目中。这应该很简单。我从来没有一个版本conflict@Jason当您将数据库文件包含在各种平台项目中时,您将数据库文件存储在哪个文件夹中?对于iOS和WinPhone,它可以放在根目录中,对于Android,它可以放在根目录中Assets@Jason在Android中,如何获取资产文件夹的路径?我看到的所有示例都使用AssetManager读取资产,但我没有看到任何显示如何获取资产路径的示例?在我的例子中,我将其从资产复制到一个可写文件夹。我通常使用FF SQLItemManager插件创建db,然后将其复制到我的各个项目中。这应该很简单。我从来没有一个版本conflict@Jason当您将数据库文件包含在各种平台项目中时,您将数据库文件存储在哪个文件夹中?对于iOS和WinPhone,它可以放在根目录中,对于Android,它可以放在根目录中Assets@Jason在Android中,如何获取资产文件夹的路径?我看到的所有示例都使用AssetManager来读取资产,但我没有看到任何显示如何获取资产路径的示例?在我的示例中,我将它从资产复制到一个可写文件夹。