使用SQLite的xamarin表单的新功能。我需要一些有关如何在Xamarin表单中使用SQLite的指导。下面是代码。
1) Create Interface
using System;
using SQLite.Net;
namespace SQLiteSample
{
public interface ISQLite
{
SQLiteConnection GetConnection();
}
}
2) Implementing ISQLite interface
using System;
using Xamarin.Forms;
using SQLiteEx.Droid;
using System.IO;
[assembly: Dependency(typeof(SqliteService))]
namespace SQLiteEx.Droid
{
public class SqliteService : ISQLite
{
public SqliteService() { }
public SQLite.Net.SQLiteConnection GetConnection()
{
var sqliteFilename = "myDB.db3";
// Documents folder
string documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var path = Path.Combine(documentsPath, sqliteFilename);
Console.WriteLine(path);
if (!File.Exists(path)) File.Create(path);
var plat = new SQLite.Net.Platform.XamarinAndroid.SQLitePlatformAndroid();
var conn = new SQLite.Net.SQLiteConnection(plat, path);
// Return the database connection
return conn;
}
}
}
3) Class for Database Operation :CRUD
using SQLite.Net;
using Xamarin.Forms;
namespace SQLiteEx
{
public class DataAccess
{
SQLiteConnection dbConn;
public DataAccess()
{
dbConn = DependencyService.Get<ISQLite>().GetConnection();
// create the table(s)
dbConn.CreateTable<Employee>();
}
public List<Employee> GetAllEmployees()
{
return dbConn.Query<Employee>("Select * From [Employee]");
}
public int SaveEmployee(Employee aEmployee)
{
return dbConn.Insert(aEmployee);
}
public int DeleteEmployee(Employee aEmployee)
{
return dbConn.Delete(aEmployee);
}
public int EditEmployee(Employee aEmployee)
{
return dbConn.Update(aEmployee);
}
}
}
我想知道:
1)在哪里创建可以在整个应用程序中使用的数据库。这意味着我可以在任何页面的任何地方使用它,而不必每次都需要重新创建它。
2)每次在上述代码中都会重新创建表吗?
3)如何在任何页面(即CustomerPage.xaml或SalesPage.xaml)中执行select语句?
在WinRT中,我使用了以下代码。如何以Xamarin形式进行?我需要重新创建SQLite DB吗?如何获取路径?
Using (var db = new SQLite.SQLiteConnection(App.DBPath){
var query = db.query<CashReceivable>("select * from CashRcvdTbl where Cust='" + Id + "'";
foreach( var item in query)
{
}
}
答案 0 :(得分:0)
1)在这里,
string documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
您的ISQlite
实现中的这一行指向您的myDB.db3 SQLite
文件。
您可以在/data/data/@APP_PACKAGE_NAME@/files
目录中看到此文件。
if (!File.Exists(path)) File.Create(path);
此行检查数据库文件是否在上述路径中。如果不是,那么它将一次创建此文件。这次它将是一个空的sqlite文件,其中没有任何表。 因此,它不会每次都重新创建。
但是,我认为不需要检查此文件是否存在,因为在创建与SQLite文件的连接时,如果不存在,它将自动创建文件。
因此,它可以很简单,如下所示:
public class SqliteService : ISQLite
{
string dpPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), “myDB.db3”);
public SQLiteConnection GetConnection()
{
return new SQLiteConnection(new SQLite.Net.Platform.XamarinAndroid.SQLitePlatformAndroid(), dpPath, false);
}
}
2)每次创建DataAccess
类的实例时,它将基于Table是否存在重新创建Employee
表/定义,因为它调用{{1} }
我通常在应用程序启动代码中写这一行。
dbConn.CreateTable<Employee>();
如果表不存在,这只会在public App ()
{
InitializeComponent ();
//Create all tables here. This will create them once when app launches.
using (var conn = DependencyService.Get<ISQLite>().GetConnection())
{
conn.CreateTable<Employee>();
}
MainPage = new HomePage ();
}
文件中创建一个新表,否则将更新表定义。
3)您可以执行以下select语句:
SQLite
您可以在任何页面中调用此public List<Employee> GetAllEmployees()
{
using (var conn = DependencyService.Get<ISQLite>().GetConnection())
{
return conn.Table<Employee>().ToList();
//OR
return conn.Query<Employee>("Select * From Employee");
}
}
方法来检索GetAllEmployees
的列表。