如何在 Android sqlite 中使用准备好的语句? [复制]
Posted
技术标签:
【中文标题】如何在 Android sqlite 中使用准备好的语句? [复制]【英文标题】:How to use prepared statements with Android sqlite? [duplicate] 【发布时间】:2014-03-23 05:33:43 【问题描述】:所以我想了解如何准确处理准备好的语句?我有这段代码,但我不确定它是否使用预准备语句或如何向其中添加预准备语句。
代码:
/*
* Creating a word
*/
public long createword(DatabaseWords word)
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_DICTIONARYID, word.get_dictionaryId());
values.put(KEY_WORD1, word.get_word1());
values.put(KEY_WORD2, word.get_word2());
values.put(KEY_WORD3, word.get_word3());
values.put(KEY_WORD4, word.get_word4());
// insert row
long word_id = db.insert(TABLE_WORDS, null, values);
return word_id;
如何将准备好的语句包含到 A. 让它运行得更快,B. 防止对 db 的攻击
【问题讨论】:
insertHelper 已折旧,您应该使用事务。 问题是什么,真的吗? 如何将准备好的语句包含到 A. 让它运行得更快,B. 防止对 db 的攻击 @Nun Chai 我什至在使用 insertHelper 吗? 我在您的预期目标的视图(愿景)中发布了该评论。 【参考方案1】:是的,insert()
在后台使用准备好的语句:sqlite_prepare_v2()
编译 SQL,然后 sqlite3_bind_*()
绑定来自ContentValues
的参数。这可以防止常见的 SQL 注入攻击。
要使用准备好的语句来提高性能,即只编译一次 SQL,并为具有不同绑定参数的多个查询重用相同的准备好的语句,请参阅 SQLiteDatabase.compileStatement()
和 SQLiteStatement
。
【讨论】:
哦,好的,所以我不需要做任何其他事情了吗? 它本质上不是已经为多个查询调用了相同的东西(我的代码),只是与每个单词有关的参数? 不,目前对insert()
的每次调用都会准备一个新语句(本质上是sqlite“字节码”中的程序)并使用给定的参数运行它。使用SQLiteStatement
s,您可以使用不同的参数运行相同的程序 - 如果您一遍又一遍地使用相同类型的查询,这很有用。
你能给我举个例子吗?
Artoo Detoo链接的副本有一个简单的例子。以上是关于如何在 Android sqlite 中使用准备好的语句? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 node.js 中使用 sqlite3 执行批量插入?