我试图在Sqllite数据库中存储类似正则表达式的值(大多数是像正则表达式这样的特殊字符),但我收到此错误
android.database.sqlite.SQLiteException: near "com":
syntax error (code 1): , while compiling:
insert into sample (indexId,tag) values (1,'dfvfdv/ ;''e;g=[;''''/.'';.')
我正在尝试使用以下方法解析转义序列:
public String escapeSequence(String s){
return DatabaseUtils.sqlEscapeString(s);
}
但它没有帮助,有什么我做错了吗?或者有没有办法正确地做到这一点?
甚至尝试过public String escapeSequence(String s){
String a=s.replaceAll("'", "''");
String b=DatabaseUtils.sqlEscapeString(a);
return b;
}
我试图创建一个信使类应用程序,我必须存储消息,其中消息可以是任何东西......(大多数时候我不能控制它)
我已经检查了Is there a database that can store regex as values?但是并没有真正回答我的问题...
答案 0 :(得分:2)
您必须逃脱的唯一字符是typeof(A) # Array{UnitRange{Int64},1}
到'
也就是说,我正在使用这个包装器:
''
http://www.sqlite.org/lang_expr.html
通过将字符串括在单引号(')中形成字符串常量。字符串中的单引号可以通过在行中放入两个单引号来编码 - 如Pascal中所示。不支持使用反斜杠字符的C样式转义,因为它们不是标准SQL。
我在这里测试了您的代码:http://sqliteonline.com/
这不起作用:
mystring.replaceAll("'", "''")
但这有效:
CREATE TABLE regexp (name VARCHAR2(20), regexp VARCHAR2(50));
insert into regexp (name,regexp) values {'test','dfvfdv/ ;''e;g=[;''''/.'';.'}
select * from regexp
只需将此带括号的CREATE TABLE regexp (name VARCHAR2(20), regexp VARCHAR2(50));
insert into regexp (name,regexp) values ('test','dfvfdv/ ;''e;g=[;''''/.'';.')
select * from regexp
替换为{}
答案 1 :(得分:1)
根据从不受信任的来源(例如用户输入)获取的值构建SQL字符串会打开您的应用程序以查找SQL injection问题以及您现在看到的语法问题。
使用?
variables and binding the values可以避免语法问题和SQL注入。
在Android SQLite上,您可以使用ContentValues
SQLiteDatabase
方法使用insert()
接受变量绑定,例如update()
或?
。对于选择或原始SQL,在SQL表达式中将变量提供为selectionArgs
,并在bindArgs
或rdd1 = sc.newAPIHadoopFile("/Users/myname/data/compressed/target_file.ZIP", ZipFileInputFormat.class, Text.class, Text.class, new Job().getConfiguration());
数组参数中提供值。