小编CL.*_*CL.的帖子

IN子句和占位符

我正在尝试在Android中执行以下SQL查询:

    String names = "'name1', 'name2";   // in the code this is dynamically generated

    String query = "SELECT * FROM table WHERE name IN (?)";
    Cursor cursor = mDb.rawQuery(query, new String[]{names});
Run Code Online (Sandbox Code Playgroud)

但是,Android不会使用正确的值替换问号.我可以执行以下操作,但是,这不能防止SQL注入:

    String query = "SELECT * FROM table WHERE name IN (" + names + ")";
    Cursor cursor = mDb.rawQuery(query, null);
Run Code Online (Sandbox Code Playgroud)

如何解决此问题并能够使用IN子句?

sqlite android

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

如何备份sqlite数据库?

这样做的正确方法是什么?我只是复制.sq3文件?

如果网站上有用户并且正在复制文件时正在编写文件怎么办?

database sqlite backup

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

为什么选择SELECT 0,...而不是SELECT

假设我有一个包含表的SQLite数据库:

sqlite> create table person (id integer, firstname varchar, lastname varchar);
Run Code Online (Sandbox Code Playgroud)

现在我想得到表中的每个条目.

sqlite> select t0.id, t0.firstname, t0.lastname from person t0;
Run Code Online (Sandbox Code Playgroud)

这很好用,这就是我要用的.但是,我使用了生成SQL的Apple(Core Data)框架.此框架生成略有不同的SQL查询:

sqlite> select 0, t0.id, t0.firstname, t0.lastname from person t0;
Run Code Online (Sandbox Code Playgroud)

此框架生成的每个SQL查询都以"select 0"开头.这是为什么?

我尝试使用explain命令来查看最新情况,但这是不确定的 - 至少对我而言.

sqlite> explain select t0.id, t0.firstname, t0.lastname from person t0;
addr        opcode      p1          p2          p3          p4          p5          comment   
----------  ----------  ----------  ----------  ----------  ----------  ----------  ----------
0           Trace       0           0           0                       00          NULL      
1           Goto        0           11          0                       00          NULL      
2           OpenRead    0           2           0 …
Run Code Online (Sandbox Code Playgroud)

sql sqlite core-data

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

从Python执行sqlite3"dot"命令或在命令行实用程序中注册排序规则

我的sqlite3数据库包含一个"collat​​e"列约束.我把它放在桌子的架构中,以防止意外地忽略使用必要的整理.但是,这意味着sqlite3从命令行运行而不是从我的Python代码运行时,架构中引用的排序规则不存在,并且我无法使用点命令.

sqlite> .import data.txt table_name
Error: no such collation sequence: my_collation
Run Code Online (Sandbox Code Playgroud)

此外,从Python创建连接并添加所需的排序规则会遇到此问题:

connWithCollation.execute(".import data.txt table_name")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
sqlite3.OperationalError: near ".": syntax error
Run Code Online (Sandbox Code Playgroud)

execute它出现的功能不想通过sqlite3 dot命令.

如果没有必要的校对功能,如何执行sqlite3 dot命令?或者,我如何从Python执行sqlite3 dot命令?

python sqlite collation

19
推荐指数
5
解决办法
7206
查看次数

何时使用SQLITE_TRANSIENT vs SQLITE_STATIC?

我想在sqlite3中创建/更新文本列.当我在创建/更新后检索行时,文本为"?".但是,整数值已正确保留.

我的文字陈述如下:

const char *sql = "INSERT INTO todo(title, description, priority, status, created, expires, posx, posy, updated)"
                  " VALUES('?', '?', '?', '?', '?', '?', '?', '?', '?');";
if (sqlite3_prepare_v2(database, sql, -1, &insert_statment, NULL) != SQLITE_OK)
    ...
sqlite3_bind_text(update_statment, 5, [[dt stringFromDate:self.updated] UTF8String], -1, SQLITE_TRANSIENT);
Run Code Online (Sandbox Code Playgroud)

我已经尝试过SQLITE_TRANSIENT以及SQLITE_STATIC.两种情况似乎都产生相同的结果('?').我还验证了文本值在传递到适当的sql语句时是有效的.

有任何想法吗?

sqlite static transient

17
推荐指数
1
解决办法
1万
查看次数

在sqlite android中搜索波斯语/阿拉伯语会给出错误的结果

我有一个sqlite数据库的问题.它似乎不支持完整的波斯语/阿拉伯语字符.当我基于波斯字符搜索某些字段时,大多数时候Sqlite无法识别那些字符.

我通过从HTML文件中复制数据将数据插入数据库.所以当我输入字符串和搜索时,没有结果显示.但如果我复制字符串和搜索,它的工作原理.

HTML文件中的字符串是:

"احكامخمس"

键入的字符串是:

"احکامخمس"

sqlite android arabic persian select-query

14
推荐指数
2
解决办法
1967
查看次数

12
推荐指数
1
解决办法
3259
查看次数

向现有SQLite表添加约束

我正在使用SQLite,它不支持向现有表添加约束.

所以我不能做这样的事情(仅作为一个例子):

ALTER TABLE [Customer]
ADD CONSTRAINT specify_either_phone_or_email
CHECK (([Phone] IS NOT NULL) OR ([Email] IS NOT NULL));
Run Code Online (Sandbox Code Playgroud)

这种情况有没有解决方法?

我知道:

  • 我可以为新表添加约束,但它不是新的(它由我的ORM,EF Core生成)
  • 我可以做一个"表重建"(重命名表,创建新表,复制旧数据,删除临时表)但这看起来真的很复杂

思路

  • 我可以以某种方式将表的副本复制到新表中,并进行一些架构更改吗?
  • 或以某种方式"获取"模式,并在SQL脚本中编辑它,然后添加具有该模式的表?

sqlite alter-table check-constraints database-schema entity-framework-core

12
推荐指数
1
解决办法
4938
查看次数

SQLite UTF-8 编码

我尝试运行.read FILE具有 UTF-8 字符串的脚本 ( )。我使用 pragma 命令:

PRAGMA encoding="UTF-8";
Run Code Online (Sandbox Code Playgroud)

但我得到了错误的字符。如果我自己创建表并插入值,则一切正常。我应该怎么做才能正确运行脚本?

顺便说一句,我检查了很多关于stackoverflow和其他资源的问题/文章+阅读文档。我尝试了一些方法,例如chcp 65001在Windows中使用cmd然后sqlite3在当前窗口中打开。但它没有帮助。

sqlite utf-8

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

当我在 sqlite3 中退出 VACUUM 时会发生什么?

我有一个 > 34 GB 的 sqlite3 数据库。VACUUM当我为此数据库执行显式命令时,该过程花费的时间太长。所以我想知道当我强迫它退出VACUUM任务时会发生什么。

可以认为VACUUM是原子事务吗?

sqlite vacuum

8
推荐指数
1
解决办法
870
查看次数