【发布时间】:2019-09-17 13:58:42
【问题描述】:
我正在打开一个数据库文件,并运行 select * 查询,但没有找到任何对象。我有:
- 在 SQLite 的 DB Browser 中创建了一个 DB,将 db 文件存储在公共项目中,以及具有适当构建操作 (AndroidAsset/BundleResource) 的 Droid/iOS 资产/资源
-
在通用代码中创建接口和在Droid中创建DatabaseService:
public SQLiteConnection CreateConnection() { var sqliteFilename = "StepsDatabase.db"; string documentsDirectoryPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); var path = Path.Combine(documentsDirectoryPath, sqliteFilename); var conn = new SQLite.SQLiteConnection(path); //conn.CreateTable<Step>(); //conn.CreateTable<SuperStep>(); return conn; }(我已经尝试过使用和不使用 .CreateTable,因为我看到这是另一个问题的可能解决方案)
- 为我的数据库中的两个表创建了 C# mdoels
namespace StepsDB
{
[Table("Step")]
public class Step
{
[PrimaryKey, AutoIncrement, Unique, Column("stepID")]
public int stepID
{
get;
set;
}
[NotNull, Column("name")]
public string name
{
get;
set;
}
[NotNull, Column("superStep")]
public int superStep
{
get;
set;
}
[Column("videoLocation")]
public string videoLocation
{
get;
set;
}
[Column("uploader")]
public string uploader
{
get;
set;
}
[Column("uploaderIG")]
public string uploaderIG
{
get;
set;
}
}
}
- 创建了一个调用 CreateConnection() 的 DatabaseManager,然后从表和空列表中创建了一个 select * 查询。
即使我调试并检查“conn”变量,它的 TableMappings Count = 0。
PS 使用安装在所有项目中的 sqlite-net-pcl NuGet。
我已经被这个问题困扰了很长时间,并且已经搜索了互联网,但没有一个对其他人有用的解决方案对我有用。请帮忙!
这也是我的第一个问题,如果我做错了什么,请告诉我。
【问题讨论】:
-
您正在创建一个空数据库,因为您使用的路径与您存储预先创建的数据库的位置(资源/资产)不匹配。如果您打算写入数据库,则需要在应用启动时将其复制到用户可写文件夹。
-
我只是想从中阅读。我检查了它创建的路径并查看了设备监视器,它就在那个位置。我还检查了 File.Exists(path),它返回 true。
-
如果不存在,SQLite 将创建一个新的 dB。所以 file.exists 可能实际上没有用。您需要阅读如何使用 android assets
-
你有资源或链接吗?我读过的所有内容和我看到的每个示例都具有该资产将在该路径中。谢谢。
标签: android database visual-studio sqlite xamarin