Re: rounded brackets in prepared statement
От | dmp |
---|---|
Тема | Re: rounded brackets in prepared statement |
Дата | |
Msg-id | 511D1BFA.4080303@ttc-cmc.net обсуждение исходный текст |
Ответ на | Re: rounded brackets in prepared statement (Ladislav DANKO <ladislav.danko@enaktyment.cz>) |
Список | pgsql-jdbc |
Hello laco, I would read futher in the documentation, but a little experiementing will results. Given column content: 'the(ishere' col LIKE '%(%' (OK) col='the(ishere' (OK) col~'the(ishere' (FAILS) So: (=) - matches exact string input (LIKE) - same as equal, but can use wild card character, etc, ie % (~) - Throws the PQLException: Error: invalid regular expression: parentheses () not balanced It not a matter of escaping. Certain operators, {=, LIKE, ?, ?, ... } use the given input string of characters and do matching directly without using Regular Expession Patterns looks like. Where as {~, ?, ?, ... } interepret the input as being a Regular Expression Pattern. danap. Ladislav DANKO wrote: > so JDBC driver is detecting matching type and if there's "=" (equal) > then it's > doing escaping and if there is "~" (regular expression pattern) the i > need to do > escaping by hand? > > laco > > > > On 13.2.2013 3:32, dmp wrote: >> It appears that since the argument to your prepare statement is a WHERE >> operation and you are using the ~, Match Regular Expression Case >> Sensitive, operator then the input is deemed as such. So parenthesis >> are valid constructs in these cases. >> >> Example from Documentation: POSIX Regular Expression Patterns >> Chapter 9. Functions & Operators >> >> 'abc' ~ '(b|d)' true >> 'abc' ~ '(^(b|c)' false >> >> danap. >> >> Ladislav DANKO wrote: >>> Hi folks, >>> >>> my setup: Java 1.6, JDBC PostgreSQL JDBC4 driver 9.1-903. >>> >>> Why when I do: >>> >>> PreparedStatement ps = myConnection.prepareStatement("SELECT a,b,c FROM >>> mytable WHERE category ~ ?"); >>> ps.setString(1, "my/super/category/a(bcdef"); >>> result = ps.executeQuery(); >>> >>> I need to escape rounded bracket in setString in this way: >>> ps.setString(1, "super/category/a(bcdef".replaceAll("\\(", "\\\\("))); >>> >>> I think it has somethink to do with regular expessions but ot know much >>> more about it. >>> >>> -- >>> With kind regards, >>> >>> Ladislav DANKO
В списке pgsql-jdbc по дате отправления: