我正在尝试在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子句?
这样做的正确方法是什么?我只是复制.sq3文件?
如果网站上有用户并且正在复制文件时正在编写文件怎么办?
假设我有一个包含表的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) 我的sqlite3数据库包含一个"collate"列约束.我把它放在桌子的架构中,以防止意外地忽略使用必要的整理.但是,这意味着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命令?
我想在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数据库的问题.它似乎不支持完整的波斯语/阿拉伯语字符.当我基于波斯字符搜索某些字段时,大多数时候Sqlite无法识别那些字符.
我通过从HTML文件中复制数据将数据插入数据库.所以当我输入字符串和搜索时,没有结果显示.但如果我复制字符串和搜索,它的工作原理.
HTML文件中的字符串是:
"احكامخمس"
键入的字符串是:
"احکامخمس"
所以我不能做这样的事情(仅作为一个例子):
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)
这种情况有没有解决方法?
我知道:
思路
sqlite alter-table check-constraints database-schema entity-framework-core
我尝试运行.read FILE
具有 UTF-8 字符串的脚本 ( )。我使用 pragma 命令:
PRAGMA encoding="UTF-8";
Run Code Online (Sandbox Code Playgroud)
但我得到了错误的字符。如果我自己创建表并插入值,则一切正常。我应该怎么做才能正确运行脚本?
顺便说一句,我检查了很多关于stackoverflow和其他资源的问题/文章+阅读文档。我尝试了一些方法,例如chcp 65001
在Windows中使用cmd
然后sqlite3
在当前窗口中打开。但它没有帮助。
我有一个 > 34 GB 的 sqlite3 数据库。VACUUM
当我为此数据库执行显式命令时,该过程花费的时间太长。所以我想知道当我强迫它退出VACUUM
任务时会发生什么。
可以认为VACUUM
是原子事务吗?