标签: sqlite

从C#连接和使用sqlite数据库的最佳方法是什么?

我之前在C++中通过包含sqlite.h完成了这个,但在C#中是否有类似的简单方法?

c# sqlite

43
推荐指数
6
解决办法
9万
查看次数

多列索引是否适用于单列选择?

我(例如)有一个索引:

CREATE INDEX someIndex ON orders (customer, date);
Run Code Online (Sandbox Code Playgroud)

此索引是否仅加速使用客户和日期的查询,还是加速了像这样的单列查询?

SELECT * FROM orders WHERE customer > 33;
Run Code Online (Sandbox Code Playgroud)

我正在使用SQLite.


如果答案是肯定的,为什么每个表可以创建多个索引?


还有一个问题:当您在查询中使用两个列时,组合索引与两个分离索引相比要快多少?

sqlite indexing

43
推荐指数
2
解决办法
2万
查看次数

如何在多线程应用程序中使用SQLite?

我正在开发一个使用SQLite作为数据库的应用程序,并且在理解如何在多个线程中使用它时遇到一些麻烦(遗憾的是,没有其他Stack Overflow问题对我有帮助).

我的用例:数据库有一个表,我们称之为"A",它有不同的行组(基于其中一个列).我有应用程序的"主线程",它从表A中读取内容.此外,我偶尔决定更新某一组行.为此,我想生成一个新线程,删除该组的所有行,然后重新插入它们(这是在我的应用程序上下文中执行此操作的唯一方法).这可能同时发生在不同的组中,因此我可能有2个以上的线程尝试更新数据库.

我在每个线程的更新周期开始时使用来自每个线程,IE的不同事务,我有一个开始.实际上,每个线程实际上做的是调用"BEGIN",从数据库中删除它需要"更新"的所有行,然后使用新值再次插入它们(这是必须在我的上下文中完成的方式)应用).

现在,我试图了解如何实现这一点.我试过阅读(Stack Overflow上的其他答案,SQLite网站),但我还没有找到所有的答案.以下是我想知道的一些事情:

  1. 我是否需要调用"open"并从每个线程创建一个新的sqlite结构?
  2. 我是否需要为所有这些添加任何特殊代码,或者是否足以生成不同的线程,更新行,这很好(因为我使用不同的事务)?
  3. 我看到有些东西在讨论不同的锁类型,以及我可能会因调用某些API而收到"SQLite忙"的事实,但老实说,当我需要考虑所有这些时,我没有看到任何完全解释的引用.我需要吗?

如果有人能够回答问题/指出我的良好资源方向,我将非常感激.

更新1:从我到目前为止阅读的所有内容看来,无论如何你都不能有两个线程要写入数据库文件.

请参阅:http://www.sqlite.org/lockingv3.html.在3.0节中:RESERVED锁意味着该进程计划在将来的某个时刻写入数据库文件,但它当前只是从文件中读取.虽然多个SHARED锁可以与单个RESERVED锁共存,但一次只能激活一个RESERVED锁.

这是否意味着我每次只能生成一个线程来更新一组行?即,有某种轮询线程决定我需要更新一些行,然后创建一个新线程来执行它,但一次不会超过一个?因为它看起来像我创建的任何其他线程将只获得SQLITE_BUSY,直到第一个线程完成,无论如何.

我理解正确吗?

顺便说一句,感谢到目前为止的答案,他们帮助了很多.

c++ sqlite multithreading

43
推荐指数
4
解决办法
4万
查看次数

数据库更改时,Android SimpleCursorAdapter不会更新

我有一个Android ListActivity是由数据库支持Cursor通过SimpleCursorAdapter.

单击项目时,将切换数据库中相应行中的标志字段,并且需要更新列表中的视图.

问题是,当更新的视图离开屏幕并被回收时,旧视图返回到视图时会显示在视图上.每当thr list重绘时(方向更改等),都会发生同样的事情.

notifydatasetchanged()用来刷新光标适配器,但似乎无效.

我应该如何更新数据库以便更新游标?

database sqlite android cursor listactivity

43
推荐指数
3
解决办法
4万
查看次数

在sqlite3中修改列的类型

我是SQLite 3的新手,刚才我必须在现有的表中添加一列.我这样做是为了做到这一点:ALTER TABLE thetable ADD COLUMN category;.

当然,我忘了指定列的类型.我想做的第一件事是删除该列,然后重新添加它.但是,似乎SQLite没有这么简单的方法,我不得不备份表并在没有列的情况下重新创建它.

这看起来很混乱,我想知道是否只有一种修改/添加列类型的方法.我想是这样,但我的搜索没有产生任何结果,对SQLite来说是新手,我想这是因为我的措辞在查询中没有了.

sqlite alter-table

43
推荐指数
4
解决办法
8万
查看次数

django witih sqlite3中的"太多SQL变量"错误

我在django中使用sqlite3收到此错误:

vals = Company.objects.filter(id__in=comp_ids).values('id', 'name').order_by('name')
names_map = SortedDict(vals)
Run Code Online (Sandbox Code Playgroud)

我认为答案就是这个,来自http://www.sqlite.org/limits.html:

许多SQL程序员都熟悉使用问号("?")作为主机参数.SQLite还支持以":","$"或"@"开头的命名主机参数和"?123"形式的编号主机参数.

为防止过多的内存分配,主机参数号的最大值为SQLITE_MAX_VARIABLE_NUMBER,默认为999."

但是,还有一个我不明白的奇怪之处,就是同一个查询在django shell会话(启动时python manage.py shell)中运行良好,但是当我从我的调用中调用时却没有views.py.

这些是导致错误的代码行:

(2, 3, 4, 2053, 6, 7, 2732, 10, 3737, 13, 2063, 2064, 17, 18, 21, 2393, 2052, 29, 30, 32, 2456, 35, 36, 38, 40, 2396, 42, 2731, 45, 46, 2095, 3343, 49, 2098, 2252, 53, 54, 58, 59, 2058, 62, 63, 64, 66, 67, 72, 2123, 3426, 3344, 79, 80, 81, 85, 2134, 87, 91, 92, 95, …

python sqlite django

43
推荐指数
3
解决办法
3万
查看次数

如何在内存中创建sqlite数据库?

我曾尝试SQLiteConnection(":memory:")SQLiteConnection("sqlite::memory:"),但双方的这些失败,"无效的ConnectionString格式"

c# sqlite

43
推荐指数
2
解决办法
2万
查看次数

如何逃避像在android中的sqlite中的特殊字符

我有一个函数,它在SQLite数据库中的表上执行查询.我宣布一个常数:public static final String CANADA_HISTORY = "Canada's History";.这存储在一个String变量中,比方说difficulty,

我有一个问题:

Cursor c = mDb.rawQuery("select * from Questions_answers where CHAPTERS = '"+difficulty+"'" , null);
Run Code Online (Sandbox Code Playgroud)

它在撇号附近抛出异常.

Logcat输出:

I/Database( 1170): sqlite returned: error code = 1, msg = near "s": syntax error
D/AndroidRuntime( 1170): Shutting down VM
W/dalvikvm( 1170): threadid=1: thread exiting with uncaught exception (group=0x40015560)
E/AndroidRuntime( 1170): FATAL EXCEPTION: main
E/AndroidRuntime( 1170): android.database.sqlite.SQLiteException: near "s": syntax error: , while compiling: select * from Questions_answers where CHAPTERS  = …
Run Code Online (Sandbox Code Playgroud)

sqlite android special-characters

43
推荐指数
4
解决办法
8万
查看次数

使用外键创建表的SQLite语法

我正在创建一个包含外键引用的表.我想知道所需的语法.大多数情况下,我见过以下内容(来自http://www.sqlite.org/foreignkeys.html#fk_basics):

CREATE TABLE artist(  
  artistid    INTEGER PRIMARY KEY,  
  artistname  TEXT  
);  
CREATE TABLE track(  
  trackid     INTEGER,   
  trackname   TEXT,  
  trackartist INTEGER,  
  FOREIGN KEY(trackartist) REFERENCES artist(artistid)  
);
Run Code Online (Sandbox Code Playgroud)

但是,从同一个站点(http://www.sqlite.org/foreignkeys.html#fk_actions)我看到:

CREATE TABLE artist(  
  artistid    INTEGER PRIMARY KEY,  
  artistname  TEXT  
);  
CREATE TABLE track(  
  trackid     INTEGER,  
  trackname   TEXT,   
  trackartist INTEGER REFERENCES artist(artistid) ON UPDATE CASCADE  
);
Run Code Online (Sandbox Code Playgroud)

后一种语法更简洁,但我想知道结果是否有所不同(除了ON UPDATE CASCADE,当然有效果;我只包括它,因为我完全从引用的网站复制代码,因为我不知道上面的语法只在制作这样的规范时才适用).我在Android工作,如果重要的话.

sqlite android-sqlite

43
推荐指数
2
解决办法
5万
查看次数

Android设备监视器"data"文件夹为空

我已经测试了在我的应用程序数据库中创建,插入和检索数据,并且通过使用Log语句知道它的工作原理.

但是,我希望加快测试并使用Android设备监视器.但是,尽管存在db并且存储了数据,但在下面访问时,该data文件夹为空:

在此输入图像描述

为什么会这样呢?如何配置它来显示db文件和内容?

sqlite android android-studio

43
推荐指数
6
解决办法
5万
查看次数