Peter,
Thanks for the explanation!
-Gary
>Gary
>
>For reasons that even I can't figure out, InstantDB always assumes that you
>don't want the external quotes or double quotes on a string literal. But as
>you've discovered, it doesn't understand the escape sequence \" unless it's
>actually inside a literal. The result of this is that InstantDB has to get
a
>quoted string with quotes inside of it. Which translates to the following
> (pretty horrible) sequence:
>
>p.setString (1,"\"\\\"name2\\\"\"");
>
>What does all that mean? The outer quotes and triple \ are for the Java
>compiler's benefit. So what InstantDB sees is:
>
>"\"name2\""
>
>InstantDB assumes you don't want the outer quotes so it parses this as the
>string literal:
>
>\"name2\"
>
>As it's now inside of a string literal, it will accept the \" escape
>sequence and you finally end up with what you wanted, i.e.:
>
>"name2"
>
>I think the best long term solution here would be for InstantDB to
recognise
>the \" sequence outside of string literals. In which case you would only
>have to provide the slightly less awkward:
>
>p.setString (1,"\\\"name2\\\"");
>
>For the moment though, I'm afraid you're stuck with the above solution.
>
>Regards
>
>Peter Hearty
>Lutris Technologies (UK)
>----- Original Message -----
>From: "Gary Myers" <gary.myers@us.ubizen.com>
>To: <instantdb@enhydra.org>
>Sent: Wednesday, August 30, 2000 10:32 PM
>Subject: InstantDB: Embedded Quotes
>
>
> I have an application that uses PreparedStatements, which 99% of the time
> works great with embedded quote (") and single-quote (') characters
without
> doing any explicit escape sequences.
>
> The 1% is where I have a problem. If the setString() call on my prepared
> statement starts with a quote (") or single-quote (') character, InstantDB
> skips it and goes to the next character. Obviously, this starting quote
> character is very important to my application. I have tried prepending a
> slash to the string, but InstantDB then complains with:
> Unknown escape character: \
>
> My code (snippet of):
>
> PreparedStatement stmt = conn.prepareStatement(
> "INSERT INTO MY_TABLE (aString) VALUES (?)");
> s = file://someString;
> // if it starts with a quote or single-quote, prepend the slash
> c = s.charAt(0);
> if (c == '"')
> {
> s = "\\" + s;
> // I even tried
> // s = "\\\"" + s.substring(1);
> }
> else if (c == '\'')
> {
> s = "\\" + s;
> }
> stmt.setString(1, s);
>
> Any help or suggestions?
>
> Thanks.
> Gary Myers
>
>
>
-----------------------------------------------------------------------------
To unsubscribe from this mailing list, send email to majordomo@enhydra.org
with the text "unsubscribe instantdb" in the body of the email.
If you have other questions regarding this mailing list, send email to
the list admin at owner-instantdb@enhydra.org.
|