我尝试在表中的行中增加整数键的值.然而,似乎没有任何事情发生.
db.rawQuery("UPDATE table SET key = key + 1 WHERE name=?", new String[] {name});
Run Code Online (Sandbox Code Playgroud)
但是,此代码工作正常(只需将密钥设置为硬编码值):
ContentValues values = new ContentValues();
values.put("key", 2);
db.update("table", values, "name=?", new String[] {name});
Run Code Online (Sandbox Code Playgroud)
还试过'?' 而不只是?,但它只是导致运行时错误.
我正在尝试使用foos和bars 建立一个SQLite3数据库,并在它们之间建立多对多关系.这是我到目前为止所得到的:
CREATE TABLE foo(
id INTEGER PRIMARY KEY NOT NULL,
foo_col INTEGER NOT NULL
);
CREATE TABLE bar(
id INTEGER PRIMARY KEY NOT NULL,
bar_col TEXT NOT NULL
);
CREATE TABLE foobar(
foo_id INTEGER,
bar_id INTEGER,
FOREIGN KEY(foo_id) REFERENCES foo(id) ON DELETE CASCADE,
FOREIGN KEY(bar_id) REFERENCES bar(id) ON DELETE CASCADE
);
CREATE INDEX fooindex ON foobar(foo_id);
CREATE INDEX tagindex ON foobar(tag_id);
Run Code Online (Sandbox Code Playgroud)
......但它似乎没有起作用.我可以删除一行foo,但不会影响foobar.我究竟做错了什么?
您是否知道任何可视化开发工具,如Microsoft Access或FileMaker,但使用SQlite作为数据库引擎?
我正在寻找一种Windows桌面软件(或简单的编程语言),我可以用它构建一个使用SQLite的数据库应用程序.
谢谢.
SQLite中是否有可用的内置函数来获取最后插入的行id.例如: - 在mysql中我们有LAST_INSERT_ID()这种功能.对于sqllite,任何可用于执行相同过程的函数.
请帮我.
谢谢
我试图从游标中获取列值,此列是在运行时通过查询内部的计算生成的,我得到此列的空值,我能够获得SQLite表中存在的所有其他列的值.
我在SQLite编辑器上执行相同的查询,它还显示结果集中生成的列的值.
当我从游标中检索它时,为什么这会给出null值?
我知道,在某些编程语言中,如果您执行以下操作:
'This is on first line \n This is on second line'
Run Code Online (Sandbox Code Playgroud)
然后它会像这样正确显示:
This is on first line
This is on second line
Run Code Online (Sandbox Code Playgroud)
当我在SQLite数据库中连接一个字符串时
SELECT *, [FIELD1] || '\n' || [FIELD2] from TABLE
Run Code Online (Sandbox Code Playgroud)
(其中[FIELD1] =这是在第一行[FIELD2] =这是在第二行)
它显示如下:
This is on first line \n This is on second line
Run Code Online (Sandbox Code Playgroud)
有没有理由不正确显示\n字符?
为了有效地提出我的问题,我们首先考虑一下我面临的确切情况:
常规设置
导致问题的事件顺序
用户启动主机应用程序.它开始从远程API资源获取数据.核心数据模型对象基于API响应创建,并"upserted"到主机应用程序的托管对象上下文中.每个API实体都有一个uniqueID,用于在远程API后端中标识它.通过"upsert",我的意思是,对于每个API实体,主机应用程序仅在无法找到给定唯一ID的现有条目时在Core Data中创建新条目.
同时,用户还启动了一个主机应用程序的扩展.它也可以从同一个远程API执行某种提取.它还尝试在解析API响应时执行"upsert".
问题:如果主机应用程序和扩展程序同时尝试为同一API实体插入Core Data条目,会发生什么?要了解这是如何产生的,让我们看看upsert的事件序列:
核心数据Upsert序列:
uniqueID等于已解析的唯一ID.uniqueID属性设置为已解析的uniqueID.问题详情
假设主机应用程序和扩展程序同时独立地解析同一API实体的API响应.如果主机应用程序和扩展程序在它们中的任何一个完成步骤4之前到达步骤3,则它们都将尝试为相同的唯一ID插入新的核心数据条目.当他们到达步骤4并调用save:他们各自的托管对象上下文时,Core Data将很乐意创建重复的条目.
据我所知,Core Data没有任何方法可以将属性标记为唯一.我需要一个等同于SQLite INSERT OR IGNORE+ UPDATE组合的核心数据..或者我需要一种方法来"锁定"持久存储的SQLite后备存储,这听起来像是一个麻烦的方法.
对iOS 8扩展引入的这个相当新颖的问题有一个已知的方法吗?
SQLite现在有一个实验性的JSON1扩展来使用JSON字段.可供选择的函数看起来很有前途,但我不知道如何在查询的上下文中使用它们.
假设我创建了下表:
sqlite> create table user(name,phone);
sqlite> insert into user values('oz', json_array(['+491765','+498973']));
Run Code Online (Sandbox Code Playgroud)
该文档显示了如何json_each在查询中使用,但所有其他函数在上下文文档中缺少一些.
具有SQLite经验的人可以提供一些如何使用的示例:
json_extractjson_set我正在开发一个独立的库项目,需要持久化一个简单的模型.这是我的SugarRecord样子:
/**
* Keeping track of previously received messages by ID
*/
public class MessageRequestIdModel extends SugarRecord {
protected String messageRequestId;
public MessageRequestIdModel() {
}
public MessageRequestIdModel(String messageRequestId) {
this.messageRequestId = messageRequestId;
}
public String getMessageRequestId() {
return this.messageRequestId;
}
public static boolean exists(String id) {
return MessageRequestIdModel.find(
MessageRequestIdModel.class,
"messageRequestId = ?",
id
).size() != 0;
}
}
Run Code Online (Sandbox Code Playgroud)
在存储库类中,我试图通过调用此方法来持久化它:
@Override
public void save(MessageRequestId messageRequestId) {
new MessageRequestIdModel(messageRequestId.getId()).save();
}
Run Code Online (Sandbox Code Playgroud)
我现在尝试通过使用android.test.InstrumentationTestCase我传递Context给Sugar 的地方来测试它,如下所示:
SugarContext.init(getInstrumentation().getContext());
Run Code Online (Sandbox Code Playgroud)
当我运行测试时,这会导致此错误:(截断以使此问题简洁易读)
android.database.sqlite.SQLiteException: no …Run Code Online (Sandbox Code Playgroud) 我将从TL开始; DR版本,因为这可能足够你们中的一些人:
sqlite3_open_v2,据说超时完成需要60多秒(我们只给它60s).所以问题是,是否有一些已知的场景sqlite3_open_v2可以花费那么长时间(在Windows上)?
现在详细说明:
3.10.2SQLite 版本.我们通过从这个版本更新日志现在去钱柜,没有什么我们已经发现的错误修正节似乎表明,有一些问题,这是在连续的sqlite的版本解决,并可能导致我们的问题.sqlite3_open_v2花费很长时间.DELETE日志模式上也发生在WAL.sqlite3_open_v2都会花费很长时间,直到用户重新启动整个应用程序(可能是机器,无法从我们的数据中判断).sqlite3_open_v2(如在Poco中):sqlite3_open_v2(..., ..., SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_URI, NULL);
即使我们尝试了不同的事情,我们也无法在本地重现此问题:
sqlite3_open_v2总是快速返回 - 只是出错.SQLITE_IOERR,但没有运气再现讨论的问题.我们试图在网上寻找类似的问题,但我们发现的任何相关内容都在http://sqlite.1065341.n5.nabble.com/sqlite3-open-v2-performance-degrades-as-number-of- opens-increase-td37482.html.这似乎并不能解释我们的情况,因为并行连接的数量超出了我们的范围以及典型的Windows用户所拥有的数量(除非有一些有点流行的应用程序正在利用我们不知道的sqlite) .
%appdata%,除非有一些非常标准的Windows配置设置 …