我试图让SQLite在本地存储一些信息,到目前为止,我遇到了一个恼人的问题:每当我调用sqlite函数CreateTable时,它都会返回一个异常。
下面是一个例外:
Unhandled Exception:
System.MissingMethodException: Method not found: string SQLitePCL.raw.sqlite3_column_name(SQLitePCL.sqlite3_stmt,int).下面是我用来使其跨平台的接口:
public interface IDataBase
{
SQLiteConnection GetConnection();
}Android实现:
[assembly: Dependency(typeof(DataBase))]
namespace MyNameSpace.Droid
{
public class DataBase : IDataBase
{
public DataBase() { }
public SQLiteConnection GetConnection()
{
var fileName = "DataBase.db3";
string docsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
string path = Path.Combine(docsPath, fileName);
var conn = new SQLiteConnection(path);
return conn;
}
}
}还有一个iOs版本:
[assembly: Dependency(typeof(DataBase))]
namespace MyNameSpace.iOS
{
public class DataBase : IDataBase
{
public DataBase() { }
public SQLiteConnection GetConnection()
{
var fileName = "DataBase.db3";
var docPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var libraryPath = Path.Combine(docPath, "..", "Library");
var path = Path.Combine(libraryPath, fileName);
var conn = new SQLiteConnection(path);
return conn;
}
}
}然后我有我的表类型:
namespace MyNameSpace.DataBase
{
public class MacroCategoria
{
[PrimaryKey]
public int ID { get; set; }
public string descrizione { get; set; }
public MacroCategoria() { }
}
}获取第一个元素的DataBase控制器和I方法:
namespace MyNameSpace.DataBase
{
public class DBController
{
static object locker = new object();
SQLiteConnection database;
public DBController()
{
database = DependencyService.Get<IDataBase>().GetConnection();
if (database != null)
{
database.CreateTable<MacroCategoria>();
database.Insert(new MacroCategoria() { ID = 0, descrizione = "Description" });
}
}
public MacroCategoria getFirstMacro()
{
lock (locker)
{
if (database.Table<MacroCategoria>().Count() == 0)
return null;
else
return database.Table<MacroCategoria>().First();
}
}
}
}在App类中调用:
public partial class App : Application
{
static DBController dbController;
public App()
{
InitializeComponent();
DependencyService.Register<MockDataStore>();
MainPage = new MainPage();
}
[...Other Default Methods...]
public static DBController DBController
{
get
{
if(dbController == null)
{
dbController = new DBController();
}
return dbController;
}
}
}最后,在我的mainPage中,我有一个函数,它应该获取第一个元素:
private void CartIcon_Clicked(object sender, EventArgs e)
{
try
{
App.DBController.getFirstMacro();
} catch(Exception ex) { throw; }
}发布于 2019-09-04 20:14:22
看起来我只需要添加SQLitePCL.Raw包。
https://stackoverflow.com/questions/57785849
复制相似问题