在SQLite查询中使用variables值的标准方法是“问号风格”,如下所示: import sqlite3 with sqlite3.connect(":memory:") as connection: connection.execute("CREATE TABLE foo(bar)") connection.execute("INSERT INTO foo(bar) VALUES (?)", ("cow",)) print(list(connection.execute("SELECT * from foo"))) # prints [(u'cow',)] 但是,这只适用于将值代入查询。 用于表名或列名时失败: import sqlite3 with sqlite3.connect(":memory:") as connection: connection.execute("CREATE TABLE foo(?)", ("bar",)) # raises sqlite3.OperationalError: near "?": syntax error sqlite3模块和PEP 249都没有提到转义名称或值的函数。 大概这是为了阻止用户用string来组装他们的查询,但是这让我不知所措。 什么函数或技术最适合在SQLite中为列或表使用variables名? 我宁愿能够做到这一点,没有任何其他的依赖,因为我将在我自己的包装使用它。 我查找了一下,但找不到SQLite语法相关部分的清晰完整的描述,用来写我自己的函数。 我想确保这将适用于SQLite所允许的任何标识符,所以对于我来说,一个反复试验的解决scheme是不太确定的。 SQLite 使用"来引用标识符,但是我不确定只是转义它们就足够了。PHP的sqlite_escape_string函数的文档表明某些二进制数据也可能需要被转义,但这可能是PHP库的怪癖。
我正在使用Android的SQLite,我想知道最好的方式来获取我插入的行的生成的ID。 一个解决scheme,我觉得包括之后进行search,但它不是最好的方式。
我正在为Android的即时通讯客户端,我正在与数据库存储联系人和其他信息…在我的应用程序,我有一个活动和一个服务。 我需要在服务和活动上同时打开三个数据库。 我使用三个数据库,因为我想要更容易地pipe理数据库,而不会有写入同步的问题。 (据我所知,我需要同步写入数据库,因为它可能会粉碎)。 为了同时pipe理服务和活动的数据库,我认为单身或者静态类的DatabaseHelper可以帮助我… 所以我已经开始通过在活动中创build两个数据库帮助器全局对象来进行testing,每一个在运行项目之后打开一个不同的数据库,我注意到最后打开的数据库在这两个对象中都保持打开:((为什么是这个发生了什么? 有人可以让我怎么做这个工作? 谢谢! LE:经过更多的testing,我做了一个数据库帮助器的Static对象,打开一个服务,从中取出数据库对象的活动,同时我做了两个for语句,一个在活动中,一个在服务中运行,从0到3000并将一些值添加到同一个数据库中,然后读取数据库。 在这个运行后,我注意到数据库仍然在脚下,运行没有错误。 奇怪的是服务只在活动完成后才运行。 这是为什么? 谢谢!
我试图用现有的SQLite数据库部署一个应用程序。 我已经阅读并试图在网上实现几个样本,但是我发现他们总是缺less一些代码,或者不能像公布的那样进行编译或工作。 有没有人有一个完整的Android数据库助手类在Android上部署现有的SQLite数据库?
我的数据库大约是25 MB,并且我已经validation了访问它的用户名以及文件权限在几个月内没有改变。 我遇到一个问题,由于“数据库或磁盘已满”而导致查询失败,然后有时“数据库磁盘映像格式错误”问题。 除非我正在读这个错误,否则我的磁盘没有接近完整(这是一个Ubuntu服务器,9.10,如果有任何区别的话) Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 19610300 2389596 16224560 13% / udev 10240 128 10112 2% /dev none 254136 0 254136 0% /dev/shm none 254136 36 254100 1% /var/run none 254136 0 254136 0% /var/lock none 254136 0 254136 0% /lib/init/rw 作为一个testing,我只是做了一个添加了新logging的操作,并没有问题。 我试图找出是否有一组特定的操作失败。 但是,在插入(并validation它在那里)之后,数据库在磁盘上的字节数没有变化(既不是向上也不是向下)。 使用命令行实用程序导致类似于以下内容,这是令人惊叹的:) SQLite version 3.6.12 Enter […]
如果我有大量SQLite数据库,都具有相同的模式,那么将它们合并在一起以便对所有数据库执行查询的最佳方法是什么? 我知道有可能使用ATTACH来做到这一点,但它有32和64数据库的限制 ,取决于机器上的内存系统。
如何使用Python在SQLite插入行后检索插入的ID? 我有这样的桌子: id INT AUTOINCREMENT PRIMARY KEY, username VARCHAR(50), password VARCHAR(50) 我用示例数据username="test"和password="test"插入新行。 如何以交易安全的方式检索生成的ID? 这是一个网站解决scheme,两个人可能同时插入数据。 我知道我可以得到最后一个读取行,但我不认为这是交易安全。 有人可以给我一些build议吗?
我正在寻找很难encryption我的Android设备上的SQLite数据库的可能性,但我无法find一个令人满意的解决scheme。 我需要像库文件引用,以便有一个“即时”encryption/解密我的数据库,而使用正常的sqlite函数。 我不想在存储之前encryption数据。 我不想encryption整个数据库文件,为了在使用之前解密它。 我了解以下项目: 看到 wxSQLite SQLCipher SQLiteCrypt 牡丹 但是我找不到任何有用的例子。 顺便说一句,我绝对愿意购买一个商业版本,但我必须在花数百美元之前testing。 有没有人为他自己解决这个问题? 编辑:问题是由commonsWare解决,如果你按照他的链接: SQLCypher端口到Android你将能够下载neccesary文件,并将其添加到您的项目。 这可能看起来像这样:
说,我们有一个表格创build为: create table notes (_id integer primary key autoincrement, created_date date) 要插入一条logging,我会用 ContentValues initialValues = new ContentValues(); initialValues.put("date_created", ""); long rowId = mDb.insert(DATABASE_TABLE, null, initialValues); 但如何设置date_created列到现在 ? 为了说清楚, initialValues.put("date_created", "datetime('now')"); 是不是正确的解决scheme。 它只是将列设置为“datetime('now')”文本。
在SQLITE中多于一列指定主键的语法是什么?