加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

学习sqlite - 笔记

发布时间:2020-12-12 20:29:49 所属栏目:百科 来源:网络整理
导读:上下载最新的sqlite,下载下来压缩出来到D盘的sqlitetest目录下,如图: 然后打开CMD命令窗口,切换到D盘的sqlitetest目录下,如图: 新建立一个数据库,在CMD窗口下输入引用sqlite3 test,如图: test就是我们的数据库文件名,注意这里没有后缀名,实际你也
上下载最新的sqlite,下载下来压缩出来到D盘的sqlitetest目录下,如图:

然后打开CMD命令窗口,切换到D盘的sqlitetest目录下,如图:
新建立一个数据库,在CMD窗口下输入引用sqlite3 test,如图:
test就是我们的数据库文件名,注意这里没有后缀名,实际你也可以给他一个后缀名的,比如sqlite3 test.db,甚至可以是sqlite3 test.php,执行了这条命令之后,假如在当前的sqlitetest目录下没有建立过test数据库的话则是建立一个空的数据库,数据库名叫test,否则则是打开当前sqlitetest目录下的test数据库,注意,如果是新建立数据库的话那么这时数据库里是空的,这时候在当前的sqlitetest目录下新建立的数据库test并不会显示出来。如图,这是执行了创建命令之后的sqlitetest目录:
这时我们输入引用.database指令查看当前的数据库信息后,sqlitetest目录下才会生成一个test文件,即我们建立的数据库,如图:
这时候就看到sqlitetest目录生成的test文件了
接下来就轮到建立表了,在官网上看了一下,其实官网上的英文说明文档也都是些简单的英文的,基本上连词成句都能知道是什么意思了,上面说到sqlite数据库的表的字段的类型其实就5种类型(TEXT、NUMERIC、INTEGER、REAL、NONE),而且好像在建立表的时候写的类型不必写刚刚列出的几种类型的全称的,上面说
1、如果你写的类型中含有int字符的那么他就是INTEGER
2、如果写的类型中含有"CHAR","CLOB",或者 "TEXT" 字符的那么就是TEXT类型
3、如果写的类型中含有 "REAL","FLOA",或者 "DOUB" 字符的那么就是REAL类型
4、其他几句英文不太明白说什么了,呵呵,英文好的朋友可以来这里看, http://www.sqlite.org/datatype3.html
我们试试看创建一张表看看,在这里我创建的同时也设置主键primary key,不知道这个sqlite创建主键是不是这样子设置的,我们输入创建table的指令:引用create table person(id int primary key,name nvarchar(10),age integer,address text);如图:
我们可以看到,如果输入的语句出错的话是会直接在当前命令窗口中提示的,输入正确的话就什么都没提示了,而且每条SQL语句后都必须以分号;结尾,这个和MYSQL一样
我们可以通过引用.table指令来查看当前的数据库中所有的表的信息,如图:
那么除了.database和.table这两个sqlite指令外还有哪些指令呢?我们可以通过引用.help来查看,如图:
注意,在输入sqlite指令的时候不要又多余来个分号;结尾。。。
我们可以看到,又是一大串的E文,其实也都是些简单的E文,连词成句也基本搞掂。。
看到有个引用.schema指令,我们来试试,后面跟的是表的名称,如图:
可以看到,该指令把表的创建语句给我们打出来了。
我们来插入一条数据再选择出来试试看,在这里我不插入ID列,看看有没有什么问题。
我们可以看到,插进去了,但是选出来的前面的ID号是空的,我们再插入一条再选择看看
晕,也能插进去,也能选择出来,那么就是我前面建立的SQL语句中的primary key不起作用了,后来自己上网搜索了一下,发现其实在建立表的时候设置主键的时候必须得写integer primary key,这样在每插入一条数据库时候那个字段都会自动增长的,相应的起到一个主键的功能,我把整个表删除了再重新建立了一次,如图:
OK,这时我们插入数据的时候可以看到,前面的ID字段自增了,嘿嘿。
如果我们有很多条语句要批量插入的话怎么办?我们在sqlitetest目录下建立一个sql_ins.txt文本文档,里面写上我们的插入语句,如图:
然后我们可以使用sqlite中的.read指令来进行读取,如图:
这样我们就成功的导入了我们的数据了。
接下来是一个字段连接的问题,这个问题群里的朋友提过,自己试着用MSSQL的方法测试不成功,正常来说应该是如下SQL语句:
引用select '姓名:'+name+',年龄:'+age from person;
但是在SQLITE中执行了会选择出错误的数据,最后搜索后发现原来sqlite中的连接字符是||或符号,正确的SQL语句应该是:
引用select '姓名:'||name||',年龄:'||age from person;
接下来,就是至今为止最激动人心的时刻,就是sqlite的分页,呵呵,和MYSQL一样的,可以直接用limit来进行分页了,就是因为这个,我开始有把我的Access的博客转为sqlite存储数据的冲动了。呵呵。。。
命令行的操作就到这里,接下来该用图形管理工具了。。试用了下,感觉sqlitespy不错,其实我也就用过sqlitespy,其他的管理工具都没用过。。呵呵。。大家可以到该网站下载最新版: http://www.yunqa.de/delphi/doku.php/products/sqlitespy/index
下载下来后解压出来,其实也就两个文件,一个Exe,另一个应该是示例数据库:
运行那个exe文件,可以看到是英文界面,不过都是简单的英文,都应该能看得懂的,打开我们刚刚在命令行下创建的数据库,注意是打开,别选成上面那个new ....新建数据库了。
发现双击了exe文件运行以后目录下又会多出一个SQLiteSpy.db3数据库了,应该是他自动生成的吧
在打开的选择数据库的窗口中看不到我们刚刚建立的test数据库,因为我们没有用到后缀外,软件默认显示的是db3和db后缀名的文件的,我们选择显示所有文件,然后就可以看到了
选择test数据库后打开person表,问题出来了,竟然是乱码,晕。。可是刚刚我们在CMD命令窗口中明明是可以查询出中文出来的
我们执行一条语句看看,F9是执行语句
然后我们再查看表数据,可以看到,插入的中文竟然可以正常显示出来了
晕啊。。搞不懂是怎么回事,应该是编码的问题,可是我GOOGLE了蛮久都没有找到什么解决方法
先不管这些,继续下一步,.NET查询SQLITE,上网找了下,下载System.Data.SQLite.dll,可到这里下载 http://sqlite.phxsoftware.com/
用VS建立一个网站,把上面下载的DLL放到BIN目录下,然后写代码,和平时写的MSSQL的代码基本一样的,还真不错。
gv是一个gridview控件,这里只是简单的显示表中数据而已,结果出来的界面不出所料,有乱码,郁闷,但是最后一条记录又不是乱码,那条记录是我在sqlitespy软件中添加的
至于怎么解决这个乱码的问题,本人GOOGLE过多次,也找不到解决的方法,只能留待高人解决!!!
认真写篇博客还真累人。。。整整花了一上午。。。
因为这个乱码问题,把我从access转到sqlite的决心又降低了不少!!!
浏览(292) | 评论(2) | 分类: SQL 评论 220.173.55.* 发表于 2009-11-7 18:28:33问题已经解决,原因是我之前是在cmd命令窗口下写的insert语句,而那个是GB2312的编码,可以通过graftabl命令查看到当前窗口是936的代码页,也就是GB2312的编码的,所以在CMD窗口中写INSERT语句,插入的是GB2312编码的文字,那么在CMD窗口中查询显示的也当然是GB2312的文字,但是那个SQLITESPY软件里显示的是以UTF-8来显示的,在那软件里写INSERT也是以UTF-8来插入的,所以在那软件里显示的就只能正常显示用UTF-8插入的文字,而之前以GB编码插入的文字就显示出乱码了
在.NET中测试,他也是以UTF-8来显示的,所以显示的效果和那软件显示的效果一样
在.NET中测试插入,是以UTF-8来插入的,插入以后在那软件里也显示正常,在CMD下查询就显示出乱码了。。 源代码 复制(IE有效) 打印 关于
  1. </SPAN>
  2. <SPAN style="FONT-SIZE: 13px; COLOR: #333333; FONT-FAMILY: verdana,sans-serif"><SPAN style="FONT-SIZE: medium; COLOR: #000000; FONT-FAMILY: simsun">if (!IsPostBack)
  3. {
  4. string connStr = @"Data Source=D:sqlitetesttest;Version=3;UseUTF8Encoding=True;";
  5. SQLiteConnection conn = new SQLiteConnection(connStr);
  6. conn.Open();
  7. string sql = "select * from person;";
  8. SQLiteCommand cmd = new SQLiteCommand(sql,conn);
  9. DataTable dt = new DataTable();
  10. dt.Load(cmd.ExecuteReader());
  11. gv.DataSource = dt;
  12. gv.DataBind();
  13. //string sql_ins = "insert into person(name,age) values('呵呵要',12);";
  14. //cmd = new SQLiteCommand(sql_ins,conn);
  15. //int i = cmd.ExecuteNonQuery();
  16. //Response.Write("<br />执行插入结果:"+i);
  17. conn.Clone();
  18. }</SPAN></SPAN>
  19. <SPAN style="FONT-SIZE: 13px; COLOR: #333333; FONT-FAMILY: verdana,sans-serif">
if (!IsPostBack){ string connStr = @"Data Source=D:sqlitetesttest;Version=3;UseUTF8Encoding=True;"; SQLiteConnection conn = new SQLiteConnection(connStr); conn.Open(); string sql = "select * from person;"; SQLiteCommand cmd = new SQLiteCommand(sql,conn); DataTable dt = new DataTable(); dt.Load(cmd.ExecuteReader()); gv.DataSource = dt; gv.DataBind(); //string sql_ins = "insert into person(name,12);"; //cmd = new SQLiteCommand(sql_ins,conn); //int i = cmd.ExecuteNonQuery(); //Response.Write("<br />执行插入结果:"+i); conn.Clone();}
61.145.230.* 发表于 2009-11-6 21:28:45乱码的问题主要是你插入数据的编码的问题,你把那个sql_ins.txt改为utf-8编码再进行导入。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读