用于SQLite的可移植类库-没有类型验证



我在我的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的行为方式。基本上,它几乎总是忽略列类型,所以你要担心是否在列中输入了正确的值。

相关内容

  • 没有找到相关文章

最新更新