我有一个文本字段,它打破了我的sql语句.我如何逃脱该领域的所有角色?我在C#中使用带有http://sqlite.phxsoftware.com/的 sqlite
我有一个带有表的Sqlite3数据库和一个由两个整数组成的主键,我正在尝试向其中插入大量数据(即大约1GB左右)
我遇到的问题是创建主键也隐式创建了一个索引,在我的情况下,在几次提交之后将插入陷入爬行(这可能是因为数据库文件在NFS上.. 叹息).
所以,我想以某种方式临时禁用该索引.到目前为止,我最好的计划是删除主键的自动索引,但似乎SQLite不喜欢它并且如果我尝试这样做会抛出错误.
我的第二个最佳计划将涉及应用程序在网络驱动器上制作透明的数据库副本,进行修改然后将其合并.请注意,与大多数SQlite/NFS问题相反,我不需要访问并发.
做这样的事情的正确方法是什么?
更新:
我忘了指定我已经使用的标志:
PRAGMA synchronous = OFF
PRAGMA journal_mode = OFF
PRAGMA locking_mode = EXCLUSIVE
PRAGMA temp_store = MEMORY
Run Code Online (Sandbox Code Playgroud)
更新2: 我实际上是批量插入项目,但是每个下一批次的提交都比前一个更慢(我假设这与索引的大小有关).我尝试了10k到50k元组之间的批处理,每个元组是两个整数和一个浮点数.
鉴于声明:
const char *sql = "INSERT INTO FooTable (barStr) VALUES (?)";
Run Code Online (Sandbox Code Playgroud)
以下使用sqlite3_bind_text(和相关sqlite3_bind_*函数)是否足以防止SQL注入攻击?
sqlite3 *db;
sqlite3_stmt *dbps;
int dbrc = sqlite3_open([dbFilePath UTF8String], &db);
if (dbrc) {
// handle error
return;
}
dbrc = sqlite3_prepare_v2 (db, sql, -1, &dbps, NULL);
sqlite3_bind_text(dbps, 1, [userContent UTF8String], -1, SQLITE_TRANSIENT);
dbrc = sqlite3_step(dbps);
if (SQLITE_DONE != dbrc) {
// handle error
}
sqlite3_finalize (dbps);
sqlite3_close(db);
Run Code Online (Sandbox Code Playgroud) 如何更改SQLite表中列的类型?
我有:
CREATE TABLE table(
id INTEGER,
salt TEXT NOT NULL UNIQUE,
step INT,
insert_date TIMESTAMP
);
Run Code Online (Sandbox Code Playgroud)
我想将salt's类型改为just TEXT和id的类型为INTEGER PRIMARY KEY.
如何打开并查看.sqlite已添加到iPhone应用程序中的执行文件中的记录,表格等?有没有这方面的教程?
我正在尝试从db中选择cpu_time,但时间必须与其他一些标准相对应 - 即build_version,test_letter,design_index,multi_thread和test_index
我认为会起作用(内部SELECT DISTINCT声明自己起作用):
set query [db eval \
{SELECT DISTINCT cpu_time WHERE cpu_time IN
(SELECT DISTINCT mgc_version, test_type_letter, design_index,
test_index, cpu_time, multi_thread
FROM TestExecutions WHERE test_type_letter
BETWEEN $testletter AND $testletter)}]
Run Code Online (Sandbox Code Playgroud)
***注意 - 这给了我一个"没有这样的列:cpu_time"错误
我的第一个SELECT将从不同的返回中提取所有项目.然后,从每次返回,我想只为每种类型的$ testletter使用cpu_time.
这用于生成仅具有cpu_time的CSV文件.我明白错了什么?
谢谢!
我有一张看起来像这样的桌子
user_id | name | created_on | updated_on
--------------------------------------------------
1 | Peter D | 1/1/2009 |
Run Code Online (Sandbox Code Playgroud)
如果我插入或更新记录,我想要一个触发器,用datetime('now')更新updated_on字段.但是我找不到函数名来定位sqlite3中最近更新的行.有吗?
我不小心跑了:
sudo gem install sqlite3
Run Code Online (Sandbox Code Playgroud)
代替:
sudo gem install sqlite3-ruby
Run Code Online (Sandbox Code Playgroud)
所以现在当我运行gem list时,我得到:
gem list
*** LOCAL GEMS ***
sqlite3 (0.0.7)
sqlite3-ruby (1.2.5)
Run Code Online (Sandbox Code Playgroud)
两者有什么区别?我需要两个吗?
我正在使用Mac OS X,我想创建一个新的SQLite数据库,我使用http://www.sqlite.org/quickstart.html作为参考.
我正在进入:sqlite3 test.db
并得到答复:
SQLite version 3.6.12
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
我正在使用Visual Studio 2010并使用Web部署将.Net MVC站点升级到特定环境.我安装了Elmah,它在我的DEV环境中工作得很好,但是当我推动TEST时,我得到了例外,因为SQLite不是一个好的格式.
我不是在Elmah中使用SQLite,也不是我知道的.我删除了所有可见的SQLite参考,我已从所有配置bin目录中删除.dll.但它仍然插入每个构建.我意识到异常问题是SQLite不能为CPU Any构建,我的环境从x86到x64不等.但我更希望SQLite甚至不在场.
我已经卸载了Elmah,SQLite仍然插入到\ bin目录中.我现在重新安装了Elmah,并在每次构建后从\ bin手动删除SQLite.dll.如何在每次构建后确定是什么原因导致SQLite插入到我的\ bin中?
sqlite ×10
iphone ×2
sql ×2
c# ×1
deployment ×1
elmah ×1
escaping ×1
gem ×1
indexing ×1
insert ×1
primary-key ×1
ruby ×1
sqlite3-ruby ×1
types ×1