C# sqlite 如果记录已经存在就不插入

C# sqlite 如果记录已经存在就不插入,第1张

假设你的表叫:yourtable,其有二个字段:field1,field2(假设都是int型,field1为主键)

如果不存在就插入,存在就忽略的方式,用insert or ignore:

INSERT OR IGNORE INTO yourtable (field1,field2) VALUES(1,2)

或者如果不存在就插入,存在就更新的方式,用insert or replace:

INSERT OR REPLACE INTO yourtable (field1,field2) VALUES(1,2);

1   查询与判断表

查询sqlite中所有表,可用如下sql语句。原理是,sqlite中有一个内建表sqlite_master,这个表中存储这所有自建表的表名称等信息。

select name fromsqlite_master where type='table' order by name;

我们可以通过如下语句查看这个内建表的所有记录

select fromsqlite_master;

由此可以进一步引申:判断指定的表是否存在,可以用如下语句:

selectcount()  from sqlite_master wheretype='table' and name = 'yourtablename';

其中yourtablename表示你要判断的表名,如果查询结果大于0,表示该表存在于数据库中,否则不存在。

2   查询与判断列

通过以下语句可查询出某个表的所有字段信息

PRAGMA  table_info([tablename])

比如:我想查看表catalog的所有列信息,可以用下述代码,结果如图所示:

PRAGMA table_info(catalog)

3   Sqlite中新增、删除、重命名

31   新增一列

方法:使用sql命令

命令:ALTER  TABLE   table-name ADD COLUMN  column-namecolumn-type

例如:在student表中添加一列名为name,类型为varchar:

alter table student add column name varchar;

alter table catalog add column xxx1 char(20) default '';

32   删除一列

方法:由于drop命令在sqlite中不可用于删除列,

alter table student drop column name // 该行在SQlite中不能用,SQlite不支持drop

可采用如下思路,类似于swap()函数的过程。

比如我有表A,A中有x、y、z三列。我要将表A中的x列删掉。那么,

第1步,新建一个表B,B中含有y、z两个字段,且类型与A中的y、z类型相同。

第2步,将A中的所有y、z两列的值拷贝到B中。

上面两步使用一句命令即可完成

create table B asselect y,z from A

注意,如果A中y的类型为char,则上面create命令会在B中创建类型为TEXT的y列。即char类型会被改变。

第3步,将A表删除

drop table ifexists A

第4步,将B重命名为A

alter table Brename to A

33   重命名一列

方法:与删除一列相同,在sqlite中alter同样无法重命名一列。如果想重命名,那么思路与删除一列相同。

4   Sqlite中新增、删除、重命名表

Sql语句在32中已有。整理如下。

41   新增表

create table A(id char(20),channeltext,name text,primary key (id))

create table B as select y,z from A

42   删除表

drop table if exists A

43   重命名表

alter table B rename to A

关于数据库句柄,每次用完是必须手动调用close()方法关掉的;

关于cursor一般情况也是要求关掉的,如果只获取了一次结果集,不关掉cursor对程序的逻辑没有影响,只是会抛一个非必要性异常,但是如果多次获取结果集,就必须先关掉cursor,再重新获取结果集,否则cursor没释放,之后的结果集是获取不到的,且会报错。所以,总的来说,都要关掉。

以上就是关于C# sqlite 如果记录已经存在就不插入全部的内容,包括:C# sqlite 如果记录已经存在就不插入、sqlite查看所有表名及字段名,及判断是否存、如何判断SQLite数据库是否已经关闭等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10633517.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存