如何准备Sqlite数据库以供跨平台使用
我正在构建一个Xamarin跨平台应用程序。我希望我的应用程序以初始数据库开始。我如何创建sqlite数据库重要吗?我的意思是,我可以使用一些SQlite浏览器应用程序来创建它,并期望它在Android、IOS和UWP中工作吗?我是否应该关心每个平台使用的sqlite版本 在iOS上要复制添加到Xamarin iOS项目根目录的数据库,请在如何准备Sqlite数据库以供跨平台使用,sqlite,xamarin,Sqlite,Xamarin,我正在构建一个Xamarin跨平台应用程序。我希望我的应用程序以初始数据库开始。我如何创建sqlite数据库重要吗?我的意思是,我可以使用一些SQlite浏览器应用程序来创建它,并期望它在Android、IOS和UWP中工作吗?我是否应该关心每个平台使用的sqlite版本 在iOS上要复制添加到Xamarin iOS项目根目录的数据库,请在AppDelegate.FinsishedLaunching方法中运行以下代码: var dbPath = Path.Combine (System.Envi
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来读取资产,但我没有看到任何显示如何获取资产路径的示例?在我的示例中,我将它从资产复制到一个可写文件夹。