我正在使用SQLite,我正在尝试返回列buy_price中一列的总和,TOTAL同时返回所有数据.我不希望/需要对数据进行分组,因为我需要在每个返回的行中包含数据.
id date pool_name pool_id buy_price TOTAL
1 09/01/12 azp 5 20
2 09/02/12 mmp 6 10
3 09/03/12 pbp 4 5
4 09/04/12 azp 7 20
5 09/05/12 nyp 8 5 60
Run Code Online (Sandbox Code Playgroud)
当我包含类似的东西时 SUM(buy_price) as TOTAL,只返回一行.我需要返回所有行以及所有buy_price条目的总和.
我在嵌套循环中的单个sqlite数据库上使用多个游标时遇到问题.我找到了一个适合我的解决方案,但它有限,我没有看到在线记录这个具体问题.我这样发布: - 一个明确的问题/解决方案可用 - 看看是否有更好的解决方案 - 也许我在sqlite3 python模块中发现了一个缺陷
情况就是这样:我的Python应用程序将社交关系数据存储在sqlite中.数据集包括两个表之间的一对多关系:myConnections和sharedConnections.前者每个连接都有一行.sharedConnections表具有0:N行,具体取决于共享的连接数.为了构建结构,我使用嵌套循环.在外部循环中,我访问myConnections中的每一行.在内部循环中,我填充sharedConnections表.代码如下所示:
curOuter = db.cursor()
for row in curOuter.execute('SELECT * FROM myConnections'):
id = row[0]
curInner = db.cursor()
scList = retrieve_shared_connections(id)
for sc in scList:
curInner.execute('''INSERT INTO sharedConnections(IdConnectedToMe, IdShared) VALUES (?,?)''', (id,sc))
db.commit()
Run Code Online (Sandbox Code Playgroud)
结果很奇怪.该sqlite3表获取前两个记录的重复条目sharedConnections.他们有点整理.A的连接,B的连接,然后是A,然后是B.在最初的口吃之后,处理是正确的!例:
myConnections
-------------
a
b
c
d
sharedConnections
-------------
a->b
a->c
b->c
b->d
a->b
a->c
b->c
b->d
Run Code Online (Sandbox Code Playgroud)
解决方案不完善.而不是使用迭代器从外循环光标,我myConnections,然后SELECT和遍历结果列表.由于我的数据集很小,这没关系.
curOuter = db.cursor()
curOuter.execute('SELECT * FROM myConnections'):
rows = curOuter.fetchall()
for row in rows: …Run Code Online (Sandbox Code Playgroud) 我是Android开发的新手.我正在尝试创建一个从内部数据库(SQLite)读取的应用程序,并列出列表中的所有数据(我正在使用listView).
到目前为止,我得到了一个名为DatabaseHandlerextends 的类SQLiteOpenHelper,它正在执行所有数据库操作(选择数据,插入数据,删除数据......).
但是现在我想列出这些值,我正在阅读一些我必须使用的网站,Loader而不是Cursor一个ContentProvider.到目前为止,我理解ContentProvider提供对数据库的受控访问.
我的问题是:ContentProvider做同样的事SQLiteOpenHelper吗?
此外,我正在使用API级别8,并且ContentProvider只能在API级别11上使用.解决此问题的最佳方法是什么?
提前致谢.
最近我们开始研究一个新项目,其中包括Windows 8 Metro,Windows Phone和桌面应用程序的客户端.决定使用MVVM模式作为主要架构,因为在项目之间共享ViewModel对我们来说是更可接受的解决方案.
我们决定为此目的使用可移植类库,但问题是在我们尝试添加对适当库的引用后,从Visualstudio 2012扩展库下载并安装SQLite for Windows运行时,我们根本看不到这些库.这让我们想到,在Portable类库项目中不可能使用SQLite.
也许你已经完成了一些并且知道我们实现这种功能的方式?请提供正确的方法来开发此任务,因为使用SQLite并且在开发的这个阶段具有可重用的代码非常重要
我不是sql/sqlite的专家..假设我们有两个表:
CREATE TABLE child (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
);
CREATE TABLE MyTableB(
dog TEXT,
FOREIGN KEY(dogList) REFERENCES child(id)
);
Run Code Online (Sandbox Code Playgroud)
INSERT怎么样?我的createTable操作是否正确?我想:一个孩子可以有一只以上的狗,一只狗可以有更多的孩子
如果我希望所有孩子和每个孩子都有与该孩子相关的狗列表怎么办?
过去我们遇到过一个问题,即流氓进程阻止了sqlite数据库.我已经写了一些代码来通知我们是否发生这种情况,但需要对其进行测试.
我怎么能故意锁定一个sqlite数据库,以便我可以检查一下我是否可以检查它是否被锁定了?
我的C#/ SQLite工作正常,直到我决定更新SQLite DLL(从1.0.82.0到1.0.84.0).现在我遇到了这个崩溃:
无法在DLL"SQLite.Interop.dll"中找到名为"sqlite3_changes_interop"的入口点
A first chance exception of type 'System.EntryPointNotFoundException' occurred in System.Data.SQLite.dll
System.Transactions Critical: 0 : <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Critical"><TraceIdentifier>http://msdn.microsoft.com/TraceCodes/System/ActivityTracing/2004/07/Reliability/Exception/Unhandled</TraceIdentifier><Description>Unhandled exception</Description><AppDomain>SparkleShare.vshost.exe</AppDomain><Exception><ExceptionType>System.EntryPointNotFoundException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType><Message>Unable to find an entry point named 'sqlite3_changes_interop' in DLL 'SQLite.Interop.dll'.</Message><StackTrace> at System.Data.SQLite.UnsafeNativeMethods.sqlite3_changes_interop(IntPtr db)
at System.Data.SQLite.SQLite3.get_Changes()
at System.Data.SQLite.SQLiteStatement.TryGetChanges(Int32&amp; changes)
at System.Data.SQLite.SQLiteDataReader.NextResult()
at System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave)
at System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery()
Run Code Online (Sandbox Code Playgroud)
代码没有改变,所以我不认为这是一个代码问题(无论如何,这是它发生的行).
我下载的新版本有什么问题吗?我在http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wikisqlite-netFx40-static-binary-Win32-2010-1.0.84.0.zip的Precompiled Statically-Linked Binaries for 32-bit Windows (.NET Framework 4.0)段落中下载了
编辑:我恢复到以前的DLL,但问题仍然发生,可能是因为Visual C#在某处无法清理某些缓存.
我有一个sqlite数据库,我想用它从数据类型BLOB中提取一列信息.我在尝试这个:
SELECT cast(data as TEXT) FROM content
这显然不起作用.输出是乱码文本,如下所示:
x??Uak?0?>?8?0Ff;I?.??.i?%?A??s?M
内容列中的数据主要是文本,但也可能有图像(如果我将其转换为TEXT,我认为这可能会导致问题).我只想将该数据提取为可用格式.有任何想法吗?
我正在寻找在我的应用程序中减少SQLite3的内存消耗的方法.
在每次执行时,它都会创建具有以下模式的表:
(main TEXT NOT NULL PRIMARY KEY UNIQUE,count INTEGER DEFAULT 0)
Run Code Online (Sandbox Code Playgroud)
之后,数据库每秒充满50k操作.只写.
当一个项目已经存在时,它会使用更新查询更新"count"(我认为这称为UPSERT).这些是我的疑问:
INSERT OR IGNORE INTO table (main) VALUES (@SEQ);
UPDATE tables SET count=count+1 WHERE main = @SEQ;
Run Code Online (Sandbox Code Playgroud)
这样,每个事务有500万次操作,我可以非常快速地写入数据库.
我真的不关心这个问题的磁盘空间,但我有一个非常约束的RAM空间.因此,我不能浪费太多记忆.
使用sqlite3_user_memory()通知其执行期间内存消耗增长到近3GB.如果我通过sqlite3_soft_heap_limit64()将其限制为2GB,则当达到2GB时,数据库操作性能几乎降至零.
我不得不将缓存大小提高到1M(默认页面大小)以达到理想的性能.
我该怎么做才能减少内存消耗?
我正在使用带有SQLite3的Ruby,但我在Sqlite3中尝试使用外键却很不成功.根据sqlite3 --version,版本3.7.13已安装.据我所知,自3.6.x版以来,Sqlite3支持外键.
我知道默认情况下外键被禁用,必须激活PRAGMA foreign_keys = ON;.在我的Ruby db-create-script中,我正在做这样的事情:
sql = <<-SQL
PRAGMA foreign_keys = ON;
CREATE TABLE apps (
id ....
);
CREATE TABLE requests (
...
app_id INTEGER NOT NULL,
FOREIGN KEY(app_id) REFERENCES apps(id),
);
...
SQL
db.execute_batch(sql)
Run Code Online (Sandbox Code Playgroud)
不幸的是,我可以愉快地requests使用未知的app-id 插入行,它可以工作,但当然不应该.
有意思:直接使用sqlite3 shell,我可以观察到以下行为:
$ sqlite3 database.db
sqlite> PRAGMA foreign_keys = ON;
sqlite> PRAGMA foreign_keys;
1 // as expected
sqlite> .quit
$ sqlite3 database.db
sqlite> PRAGMA foreign_keys;
0 // off ?!
Run Code Online (Sandbox Code Playgroud)
在不退出sqlite3 shell的情况下,外键在激活它们之后正在工作(而不是退出shell),我不允许 …