我们可以将正则表达式存储为android中的SqlLite数据库中的值吗?

时间:2016-10-27 09:44:15

标签: android regex database sqlite escaping

我试图在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?但是并没有真正回答我的问题...

2 个答案:

答案 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,并在bindArgsrdd1 = sc.newAPIHadoopFile("/Users/myname/data/compressed/target_file.ZIP", ZipFileInputFormat.class, Text.class, Text.class, new Job().getConfiguration()); 数组参数中提供值。