如何读取sqllite数据库
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何读取sqllite数据库相关的知识,希望对你有一定的参考价值。
参考技术A 1、添加右键引用NUGet包 安装VICI CoolStorage2、此时可以看到引用中多两个文件Vici.CoolStorage.WP8 和Vici.Core.WP8
3、
public class SQLite
private static SQLite _instance;
public static SQLite getInstance()
if (_instance == null)
_instance = new SQLite();
return _instance;
public SQLite()
///// <summary>
///// 通过!iStorage.FileExists(fn)保证 程序第一次
///// 运行的时候才会将数据库复制
///// 到隔离存储空间中,
///// fn为复制的数据库路径及名称
///// </summary>
///// <param name="fn"></param>
//private void move(string fn)
//
// //StreamResourceInfo sr = Application.GetResourceStream(new Uri(fn, UriKind.Relative));
// IsolatedStorageFile iStorage = IsolatedStorageFile.GetUserStoreForApplication();
// if (!iStorage.FileExists(fn))
//
// using (var outputStream = iStorage.OpenFile(fn, System.IO.FileMode.CreateNew))
//
// byte[] buffer = new byte[10000];
// for (; ; )
//
// int read = sr.Stream.Read(buffer, 0, buffer.Length);
// if (read <= 0)
// break;
// outputStream.Write(buffer, 0, read);
//
//
//
//
/// <summary>
/// 将文件存储到独立存储空间
/// </summary>
/// <param name="assemblyName">项目名</param>
/// <param name="dbName">文件名</param>
private void CopyFromContentToStorage(string assemblyName, String dbName)
IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication();
System.IO.Stream src = Application.GetResourceStream(new Uri("/" + assemblyName + ";component/DataBase/" + dbName, UriKind.Relative)).Stream;
IsolatedStorageFileStream dest = new IsolatedStorageFileStream(dbName, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write, store);
src.Position = 0;
CopyStream(src, dest);
dest.Flush();
dest.Close();
src.Close();
dest.Dispose();
/// <summary>
/// 复制流
/// </summary>
/// <param name="input"></param>
/// <param name="output"></param>
private static void CopyStream(System.IO.Stream input, IsolatedStorageFileStream output)
byte[] buffer = new byte[32768];
long TempPos = input.Position;
int readCount;
do
readCount = input.Read(buffer, 0, buffer.Length);
if (readCount > 0)
output.Write(buffer, 0, readCount);
while (readCount > 0);
input.Position = TempPos;
/// <summary>
/// 查询区域信息表中的所有数据信息
/// </summary>
/// <param name="sTableName">表名称</param>
/// <param name="sWhere">查询条件</param>
/// <param name="sOrder"></param>
/// <returns></returns>
public CSGenericRecordList queryAllData(String sSelect, String sTableName, String sWhere, String sOrder)
string strSql = string.Empty;
strSql += "SELECT " +sSelect+" FROM " + sTableName;
if (!sWhere.Equals(""))
strSql = strSql + " WHERE " + sWhere;
if (!sOrder.Equals(""))
strSql=strSql+" ORDER BY "+sOrder;
//move(fn);
CopyFromContentToStorage("PingAn_WP", "FinancialTel.db");
//设置使用的数据库
CSConfig.SetDB("FinancialTel.db");
CSGenericRecordList arealist = CSDatabase.RunQuery(strSql);
return arealist;
4、 调用
protected override void OnNavigatedTo(NavigationEventArgs e)
SQLite sqlLite = new SQLite();
CSGenericRecordList cslis = sqlLite.queryAllData("distinct level2,tel", "pingan", "level3=''", "sort");
lb_Main.ItemsSource = from cs in cslis select new PingAn_Model(cs["level2"].ToString(), cs["tel"].ToString());
//PingAn_Model是一个对象
base.OnNavigatedTo(e);
本回答被提问者和网友采纳
SQLlite数据库
SQLlite数据库可能是目前来说最轻量级、使用最为广泛的SQL数据库。它本身又是开源的,自身包含在C中的一个相对小的库中,支持ACID事务、零配置、储存在单一磁盘文件中的一个完整的数据库,它所使用的资源非常低,在几百K的内存环境下也可以稳定运行,而目前支持的数据大小到2TB,自身又没有什么额外的依赖、移植性好、支持多种开发语言,所以SQLlite被广泛运用在各个系统平台上、一些软件应用、小型网站、以及嵌入式应用、简单的数据分析、代替磁盘临时文件、文件档案、缓存等等。在Unix系统下一般默认就是有安装过的,即使是没有安装也可以同在Windows、macOS中一样到官网(http://www.sqlite.org/download.html)上把二进制包下载下来解压后配置好PATH环境变量就可以使用,或者是下载源码包编译亦可,平时可以在系统中使用shell直接交互或者使用各个gui来使用。建立好的一个schema在SQLlite就是一存储在磁盘上的一个文件,注意一旦删除了表的数据文件数据就会丢失,至于使用也很简单
[[email protected] data]# sqlite3 #调用二进制文件直接进入命令交互界面 [[email protected] data]# sqlite3 /data/my_test.db #建立一个名为my_test的schema后缀用什么都可以但是要注意不同的文件名后缀相同的文件名就是不同的文件,是完全2个完全独立的schema,建议是用.db是标准的容易区分,如果有这个文件名的schema则不创建数据文件,建好了默认有一个main的database,其次默认建立的schema是不加密的,如果是重要数据建议加密 [[email protected] data]# sqlite3 /data/my_test.db #进入my_test的schema,要注意的是,如果是新建立的schema在其中没有建立任何项目时是不会产生相应的数据文件的 SQLite version 3.6.20 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> .database #查看当前的schema下的database信息 seq name file --- --------------- ---------------------------------------------------------- 0 main /data/my_test.db sqlite> .help #帮助信息 sqlite> .exit #退出 sqlite> SELECT * FROM sqlite_master; #系统表,在SQLite中唯一的一张,是只读的,是无法删除的执行删除该表是是在做类似于flush的操作 sqlite> .show echo: off explain: off headers: off mode: list nullvalue: "" output: stdout separator: "|" width:
以上就是SQLlite数据库比较常用的交互命令,至于其他更多可以通过help查看,在这个就不做过多的介绍,在平时可以通过查询SQLlite数据库中唯一的一张系统表sqlite_master表获知当前的schema下所有表、视图、索引、触发器相关等等信息,在sqlite_master表中有4个列:
type列记录了项目的类型,如表、视图、索引、触发器 name列记录了项目的名称,如表名、索引名、视图名等 tbl_name列记录所从属的表名,如索引所在的表名。对于表来说,该列就是表名本身 rootpage列记录项目在数据库页中存储的编号。对于视图该列值为0,触发器该列值NULL。 sql列记录建表的DDL
一些常用的系统表查询:
sqlite> SELECT * FROM sqlite_master WHERE type = 'table'; #查看当前schema下所有表信息 sqlite> SELECT * FROM sqlite_master WHERE rootpage = 0; #查看当前schema下所有的视图信息 sqlite> SELECT * FROM sqlite_master WHERE rootpage IS NULL; #查看当前schema下所有的视图信息 sqlite> SELECT sql FROM sqlite_master WHERE type = 'table' AND tbl_name = 'tablename'; #查看tablenameDDL
在SQLlite目前下有5种数据存储类型:
数据存储类型 | 说明 |
---|---|
NULL | 值是一个 NULL 值 |
INTEGER | 值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中 |
REAL | 值是一个浮点值,存储为 8 字节的 IEEE 浮点数字 |
TEXT | 值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储 |
BLOB | 值是一个 blob 数据,完全根据它的输入存储 |
而SQLlite其自身有支持列的亲和数据类型、亲和数据名称概念。任何列仍然可以存储任何类型的数据,当数据插入时,该字段的数据将会优先采用亲缘类型作为该值的存储方式,
如各种int型存入INTEGER中,在建好的表中用的是INTEGER类型,或者还是用其它的数据类型名称,但是实际中还是存在INTEGER中,要注意的是SQLlite本身仅仅是一个很小的轻量级数据库平时不要把SQLlite当成其它大型数据来使用
以上是关于如何读取sqllite数据库的主要内容,如果未能解决你的问题,请参考以下文章