Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 我的sqlite3数据库没有';在设备中不显示列值,但在模拟器中显示_Ios_Sqlite_Xamarin_Ios Simulator - Fatal编程技术网

Ios 我的sqlite3数据库没有';在设备中不显示列值,但在模拟器中显示

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/

我的数据库没有被复制到我的设备上,但它会复制到模拟器上

以下是我正在做的:

从终端创建新的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/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文件的大小与实际大小相同

我尝试了以下所有方法:

  • 清理项目中的所有垃圾
  • 重建所有
  • 已从项目中删除“调试”文件夹
  • 沙马林
  • 甚至重启机器
但仍然是相同的行为,我还应该尝试什么才能看到ID和Name的值呢

我的sdk版本已附加

更新:

在进行了大量更改和清理之后,我成功地显示了除显示为0的标识列之外的所有列的值。困惑不解,我回到了xamarin示例项目: 它正确地显示了标识的值。 试图在我的项目中引入类似的代码,但没有成功。 为了排除版本问题的可能性,我从以下链接下载了最新的sqlite:

同样的行为。。。我在我的项目中创建了一个全新的页面,使用了示例使用的引用,并且只有创建示例表的代码。相同的行为,标识值显示在其他项目中,但不显示在我的项目中。这让我得出结论,在我的项目中有一些完全古怪的东西。现在,我正在考虑创建一个全新的项目,并在确保首先能够在我的模型中看到我的id值后,将我的文件移动到新的项目中。保持音调,我将确保更新此线程


如果您有任何建议,请与我们分享

我找不到解决问题的方法,但我找到了一种替代方法来创建数据库,结果比原来的更好。 需要注意的一点是,在最初的问题(上面的细节)中,DB代码自我开始开发应用程序以来已经运行了几个月。我不知道它什么时候开始表现不好,但我怀疑这是因为下载了新的Xamarin 3.0。我想不出任何其他原因

所以,为了解决我的问题,我做了两件主要的事情:

  • 我按照以下链接介绍了如何创建数据库和表以及执行CRUD操作: 这种方法似乎是创建数据库的最新方法。它是:发表于 2014年6月24日。它有一个SQLite.dll,而我以前的解决方案是使用SQLite.cs文件。所以,现在我正在运行时创建数据库

  • 用这种新方法有些东西仍然不起作用。它给了我一个对象空异常错误。我没有花太多时间调查这件事。当我为主键和标识值提供值时,错误消失了。事实上,这本可以解决我之前的问题。如果我对新方法还不满意的话,我会尝试根据旧代码提供标识值

    我希望这对某人有帮助


  • 使用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是如何处理数据库的,所以我帮不了你。请仔细检查访问数据库所使用的顺序——有几种不同的“方案”(例如,编译语句与否),如果将它们混合在一起,通常会得到虚假的结果。