CREATE VIRTUAL TABLE
创建虚拟表stmt :
一个虚表是一个接口,外部存储或计算引擎,它似乎是一个表,但实际上并没有存储信息的数据库文件。
一般情况下,您可以做任何事情,以虚表 ,可以做一个普通的表,但你不能创建索引或触发器的虚拟表。.有些虚表的实现可能会施加额外的限制。 例如,许多虚拟表是只读的。虚拟表中不能使用共享缓存模式 。
该<module-name>的名字是一个对象,实现虚拟就座。 该<module-name>必须是注册的SQLite数据库连接使用sqlite3_create_module ( )或sqlite3_create_module_v2 ( )之前发出创建虚拟TABLE语句。模块需要零个或多个用逗号分隔的参数。参数可以只是任何文字只要有均衡的括号内。 可显示为列在传统的定义创建表声明。通过模块的SQLite论点直接向模块在没有任何解释。它的责任是执行该模块剖析和解释自己的参数。
一个虚拟表被删除,使用普通的删除表声明。 没有删除虚表的声明。
您需要启用全文检索使用的SQLite的FTS3索引机制,建立一个像谷歌的搜索功能。 使用所有的SQLite索引字的文字栏,请SQLite3数据库。 解决方案。本文将告诉您如何开始与FTS3特点的SQLite 。http://dotnetperls.com/Content/SQLite-FTS3.aspx
Code
1 internal static void FullTextTest(DbConnection cnn)
2 {
3 using (DbCommand cmd = cnn.CreateCommand())
4 {
5 cmd.CommandText = "CREATE VIRTUAL TABLE FullText USING FTS3(name, ingredients);";
6 cmd.ExecuteNonQuery();
7
8 string[] names = { "broccoli stew", "pumpkin stew", "broccoli pie", "pumpkin pie" };
9 string[] ingredients = { "broccoli peppers cheese tomatoes", "pumpkin onions garlic celery", "broccoli cheese onions flour", "pumpkin sugar flour butter" };
10 int n;
11
12 cmd.CommandText = "insert into FullText (name, ingredients) values (@name, @ingredient);";
13 DbParameter name = cmd.CreateParameter();
14 DbParameter ingredient = cmd.CreateParameter();
15
16 name.ParameterName = "@name";
17 ingredient.ParameterName = "@ingredient";
18
19 cmd.Parameters.Add(name);
20 cmd.Parameters.Add(ingredient);
21
22 for (n = 0; n < names.Length; n++)
23 {
24 name.Value = names[n];
25 ingredient.Value = ingredients[n];
26
27 cmd.ExecuteNonQuery();
28 }
29
30 cmd.CommandText = "select rowid, name, ingredients from FullText where name match 'pie';";
31
32 int[] rowids = { 3, 4 };
33 n = 0;
34
35 using (DbDataReader reader = cmd.ExecuteReader())
36 {
37 while (reader.Read())
38 {
39 if (reader.GetInt64(0) != rowids[n++])
40 throw new ArgumentException("Unexpected rowid returned");
41
42 if (n > rowids.Length) throw new ArgumentException("Too many rows returned");
43 }
44 }
45 }
46 }