当前位置:  开发笔记 > 编程语言 > 正文

SQLite和Javascript:在插入之前检查数据是否存在或让SQLite抛出异常

如何解决《SQLite和Javascript:在插入之前检查数据是否存在或让SQLite抛出异常》经验,为你挑选了1个好方法。

我的主要问题是哪种方法更快.

一些简报

我正在使用Mozilla开发一个应用程序.

我有这个模块,我捕获一些数据并将其存储在数据库中.数据间歇性地进入.不存储重复项.为了便于讨论,我们可以假设一个表只有一列,让我们将该列命名为'keyword'.因此,如果我们得到一个已存在于数据库中的关键字,我们就不再存储它.是的,我们已将此列设置为PRIMARY KEY并使其成为独一无二的.:)

我的查询是:

1)在将新数据插入数据库之前,我应该进行数据库调用并检查关键字是否存在; 如果它不存在把它放入DB?就像是:

function insert_keyword(keyword)
{
   if(!SQL.exists(keyword))
   {
       SQL.insert(keyword);
   } 
}

要么

2)我只是插入并让数据库处理条件,有效地让它抛出异常,我抓住了.

function insert_keyword(keyword)
{
    try {
       SQL.insert(keyword);
    }
    catch (e)
    {
       // keyword exists!
    }
}

我知道捕捉异常而不做任何事情都是坏事!所以我不是在寻找什么是好的,什么是坏的:).我想了解的是哪种方法最快.(特别是关于Mozilla,JavaScript和SQLite,但欢迎一般性评论!)

图片的标题说明: SQL.我用过的语法仅用于说明目的.您可以假设我创建SQL语句,执行它们并获取结果,或者假设它是一个执行所有脏工作的JavaScript库调用.

这个问题有点像这样:

我应该检查代码中的数据库约束,还是应该捕获数据库抛出的异常

但我想具体了解与性能相关的差异,因为我正在处理的应用程序需要尽可能快(哪个应用程序没有?;))



1> Georg Schöll..:

只需告诉数据库忽略重复项(仅适用于强制使用唯一值的列):

INSERT OR IGNORE INTO table(keyword) VALUES("someWord");

或创建一个忽略重复的列.

CREATE TABLE someTable(keyword PRIMARY KEY ON CONFLICT IGNORE);

而不是忽略也有这些冲突条款:

ROLLBACK
ABORT
FAIL
IGNORE
REPLACE

有关更多信息,请阅读有关SQLite的冲突子句和INSERT语句文档的页面.


至于使用异常或检查值的存在是否更快:提升时异常是昂贵的,而不提高则是零成本.这意味着如果您希望有许多重复项使用该检查,并且如果只有少量关键字是重复项,则使用异常.毕竟,例外应该是例外.

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有