如何将双引号 ( " ) 插入 SQLite 数据库 Varchar 字段?

Posted

技术标签:

【中文标题】如何将双引号 ( " ) 插入 SQLite 数据库 Varchar 字段?【英文标题】:How can i insert double quote ( " ) into SQLite Database Varchar field? 【发布时间】:2011-11-30 14:53:21 【问题描述】:

我正在尝试用该字段TITLE varchar(200) NOT NULL 将下一句插入到表中:

INSERT OR IGNORE INTO EXAMPLETABLE VALUES ("1-Preludi \"Obrint Pas 2011\"", ... 

问题是 SQLite 误解了 \" 转义字符,我不知道如何解决我的 android 程序中的问题(可能是字符代码?)。

【问题讨论】:

【参考方案1】:

仅使用命令行中的 sqlite 和直接 sql insert 命令,我发现双引号会自行转义。 用你的例子

INSERT OR IGNORE INTO EXAMPLETABLE VALUES ("1-Preludi ""Obrint Pas 2011""", ...

【讨论】:

【参考方案2】:

要将值插入数据库,您应该始终使用SQLiteStatement (HowTo),因为它们会转义您的值并防止您的应用成为SQL-Injections 的目标。

此外,如果您要插入多个值(比如在循环中),执行具有不同绑定值的预编译语句比正常的插入语句要快得多。

【讨论】:

实际上,您应该使用 Android 特别提供的 SQLite 接口,并将值作为 ContentValues 传递,使用(例如)SQLiteDatabase#insert(String, String, ContentValues) 方法。 @Jens 你是对的,在 Android 中插入参数被转义了。但是大多数人只提供原始查询并将参数留给Null。这就是为什么我建议使用普通的 PreparedStatement。 啊,您指的是使用 SQLiteStatement:s,而不是实际的标准 Java PreparedStatements。 @Jens 是的,我打算去,但我从文档中得到了错误的课程。我的错。【参考方案3】:

尝试类似的方法:

ContentValues values = new ContentValues();
values.put("YOURCOLUMNNAME", "1-Preludi \"Obrint Pas 2011\"");
// ... other stuff you want to insert ...
SQLiteDatabase db = ... ; // Usually obtained using a SQLiteOpenHelper
long id = db.insertWithOnConflict("EXAMPLETABLE", BaseColumns._ID, values, SQLiteDatabase.CONFLICT_IGNORE);

【讨论】:

【参考方案4】:

使用它来插入任何特殊字符的数据

ContentValues initialValues = new ContentValues();
initialValues.put("Id", id);
initialValues.put("Name", Name);
// ...
myDataBase.insert("EXAMPLETABLE", null, initialValues);

【讨论】:

【参考方案5】:

试试这个:

INSERT OR IGNORE INTO EXAMPLETABLE VALUES ('1-Preludi "Obrint Pas 2011"', ... 

【讨论】:

+1 我试过了,但我遇到了 ' :D 的问题,然后这个解决方案无法运行,但如果你只有 " 的问题,它很容易。 如果您的输入混合了单/双引号,这将中断。

以上是关于如何将双引号 ( " ) 插入 SQLite 数据库 Varchar 字段?的主要内容,如果未能解决你的问题,请参考以下文章

Excel vba替换双引号怎么写?

sqli-labs(lesson1-lesson22)

如何将双引号放入字符串文字中?

如何将双引号中的路径传递给sql文件

如何将双引号字符串与字符进行比较?

sqli-labs less10 GET - Blind - Time based. - Double quotes (基于时间的双引号盲注)