我在我的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();
}
所有的都有效-为什么?
也可以打开只读连接?在其他sqlite库中这是可能的。
再见马库斯
参见http://www.sqlite.org/different.html
大多数SQL数据库引擎使用静态类型。关联一个数据类型使用表中的每一列,并且只使用该列的值数据类型允许存储在该列中。SQLite放宽了这一点使用清单类型进行限制。在清单类型中,数据类型是值本身的属性,而不是其中的列的属性值被存储。因此,SQLite允许用户存储任意的值将数据类型转换为任何列,而不管该列的声明类型如何列。(这条规则有一些例外:INTEGER PRIMARYKEY列只能存储整数。而SQLite试图强制)
正如我们所知,SQL语言规范允许使用清单打字。然而,大多数其他SQL数据库引擎都是如此静态类型等有些人觉得应该使用清单类型化是SQLite中的一个bug。但是SQLite的作者感觉非常这是一个非常重要的特性。清单类型在SQLite中的使用是经过深思熟虑的设计决策,在实践中被证明是可行的吗SQLite更可靠,更容易使用,特别是在与动态类型编程语言(如Tcl)的组合和Python .
现在我不一定相信这是一件好事(我从来没有,从来没有相信松散类型使任何事情"更可靠"),但这确实是SQLite的行为方式。基本上,它几乎总是忽略列类型,所以你要担心是否在列中输入了正确的值。