我在我的PCL中为我的通用应用程序项目使用新的SQLite可移植类库(PCL)。
我可以将字符串放到整数中,我可以将字符串放到大小有限的字段中。插入所有值时不会出现警告或错误。
我可以创建没有传递数据类型的表,或者我可以将任何内容设置为数据类型。这让我想到所有字段都是相同的数据类型(也许是一个TEXT,你可以放任何东西)。这方面看起来会影响性能。我是否配置了其他内容?
例如:
using (var c = new SQLiteConnection(_dbName))
{
using (var statement = c.Prepare(@"CREATE TABLE IF NOT EXISTS Test (
Id INTEGER NOT NULL PRIMARY KEY,
MyString LALALA NOT NULL,
MyInt INTEGER NOT NULL);"))
{
statement.Step();
}
}
using (var statement = c.Prepare(@"INSERT INTO Test (MyString, MyInt)
VALUES(@myString, @myInt);"))
{
statement.Bind("@myString", "hello tablehello tablehello tablehello tablehello tablehello tablehello table");
statement.Bind("@myInt", "9asd");
// Inserts data.
statement.Step();
// Resets the statement, to that it can be used again (with different parameters).
statement.Reset();
statement.ClearBindings();
statement.Bind("@myString", "hello world");
statement.Bind("@myInt", "asdasd");
// Inserts data.
statement.Step();
}
一切正常 - 为什么?
此外,还可以打开readonly连接吗? 在其他sqlite库中,这是可能的。
再见 马库斯
答案 0 :(得分:0)
请参阅“Manifest Typing”
下的http://www.sqlite.org/different.html大多数SQL数据库引擎都使用静态类型。数据类型已关联 表中的每一列,只有该特定的值 允许将数据类型存储在该列中。 SQLite放松了这一点 使用清单打字限制。在清单类型中,数据类型 是值本身的属性,而不是其中的列的属性 值存储。因此,SQLite允许用户存储任何值 数据类型进入任何列,无论其声明的类型如何 柱。 (此规则有一些例外:INTEGER PRIMARY KEY列只能存储整数。而SQLite试图强迫 值可以在列的声明数据类型中使用。)
到目前为止 我们可以说,SQL语言规范允许使用 清单打字。不过,大多数其他SQL数据库引擎都是 静态打字,所以有些人觉得使用清单 打字是SQLite中的一个错误。但SQLite的作者非常感觉 强烈认为这是一个功能。在SQLite中使用清单键入 是一项经过深思熟虑的设计决定,已经在实践中证明了这一点 SQLite更可靠,更易于使用,尤其是在使用时 与动态类型编程语言(如Tcl)结合使用 和Python。
现在我不一定相信这是一件好事(我从来没有相信过更宽松的打字会让任何事情变得更可靠'),但这确实是SQLite的表现方式。基本上它几乎在所有时间都忽略了列类型,因此您可以担心是否将正确的值放入其中。