Ios 我的sqlite3数据库没有';在设备中不显示列值,但在模拟器中显示
我的数据库没有被复制到我的设备上,但它会复制到模拟器上 以下是我正在做的: 从终端创建新的sqllite3数据库:Ios 我的sqlite3数据库没有';在设备中不显示列值,但在模拟器中显示,ios,sqlite,xamarin,ios-simulator,Ios,Sqlite,Xamarin,Ios Simulator,我的数据库没有被复制到我的设备上,但它会复制到模拟器上 以下是我正在做的: 从终端创建新的sqllite3数据库: sqlite> create table myTable (id integer primary key, name text); sqlite> insert into myTable (name) values ('john'); sqlite> select * from myTable; 1|john 这将在以下路径中创建一个db:users/John/
sqlite> create table myTable (id integer primary key, name text);
sqlite> insert into myTable (name) values ('john');
sqlite> select * from myTable;
1|john
这将在以下路径中创建一个db:users/John/iosApp.db
然后我关闭终端并将该数据库复制到我的xamarin项目中,并将其buildAction设置为“content”
这是我的模型:
[Table("myTable")]
public class MyTable
{
[PrimaryKey, AutoIncrementAttribute, Column("id")]
public int ID {get; set;}
[Column("name")]
public string Name { get; set; }
}
我这样做是为了将数据库复制到文档文件夹:
string pathToDatabase = "iosApp.db";
userPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), pathToDatabase);
File.Delete (userPath); // delete first and copy next
File.Copy (pathToDatabase, userPath);
var myDB = new SQLiteConnection (userPath);
MyTable myTable = myDB.Get<MyTable> (1);
string pathToDatabase=“iosApp.db”;
userPath=Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),pathToDatabase);
File.Delete(userPath);//先删除后复制
Copy(pathToDatabase,userPath);
var myDB=新的SQLiteConnection(userPath);
MyTable MyTable=myDB.Get(1);
然后我运行应用程序,在上面代码的最后一行之后设置断点,并将鼠标悬停在myTable上:
如果我使用模拟器,我会看到模式和值1表示ID,而'john'表示Name
如果我正在使用设备,我会看到模式,但ID为0,Name为null
查看我使用设备时的路径,指向以下内容:
“/private/var/mobile/Applications/277749D4-C5CC-4BF4-8EF0-23B23833FCB1/Documents/iosApp.db”
我使用iFunBox加载了文件,db文件的大小与实际大小相同
我尝试了以下所有方法:
- 清理项目中的所有垃圾
- 重建所有
- 已从项目中删除“调试”文件夹
- 沙马林
- 甚至重启机器
如果您有任何建议,请与我们分享我找不到解决问题的方法,但我找到了一种替代方法来创建数据库,结果比原来的更好。 需要注意的一点是,在最初的问题(上面的细节)中,DB代码自我开始开发应用程序以来已经运行了几个月。我不知道它什么时候开始表现不好,但我怀疑这是因为下载了新的Xamarin 3.0。我想不出任何其他原因 所以,为了解决我的问题,我做了两件主要的事情:
使用Organizer从设备下载文件,然后使用sqlite3命令打开db文件(在命令窗口中)。把你的数据放在那里,看看你有什么。很好的建议。我无法使用organizer下载文件(已禁用下载),但我使用ifunbox完成了下载。设备中的表没有id列。不知何故,模拟器db确实有id列,但设备没有。当您在Mac上更新db时,通常需要在重新安装之前删除手机(或模拟器)上的应用程序,以便db复制逻辑生效。我用一个新db启动了一个新示例。我首先在模拟器中测试了代码。我可以很好地看到我唯一行的值(id和名称)。然后我在设备上测试,结果没有显示。因此,我使用iFunBox和B验证了A.数据库在文档文件夹中。我带来了数据库并打开了它,值也在那里。我尝试从设备中删除应用程序并重新测试,但仍然无法工作。。。这一行的结果仍然是空行:MyTable MyTable=myDB.Get(“SELECT*FROM MyTable,其中id=1;”);奇怪的是它知道计数是1行!我不知道Xamarin是如何处理数据库的,所以我帮不了你。请仔细检查访问数据库所使用的顺序——有几种不同的“方案”(例如,编译语句与否),如果将它们混合在一起,通常会得到虚假的结果。