[JAVA] escaping

Pagina: 1
Acties:

  • MDVej
  • Registratie: September 2001
  • Laatst online: 04-10-2025
Ik probeer in java het volgende om te escapen.

code:
1
2
3
PreparedStatement preparedStatement = conn.prepareStatement(sql);
preparedStatement.setEscapeProcessing(true);
ResultSet rs = preparedStatement.executeQuery();

alleen hij escaped dus niet goed...

Ik heb al van alles getest, maar kan niet vinden wat ik nu verkeerd doe.

JDK 1.4.x

Help!?

Bvd

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15:26

Janoz

Moderator Devschuur®

!litemod

Waneer je met parameters werkt hoef je niet te escapen. Verder is het misschien handig om ook de rest even te laten zien. Wat staat er bijvoorbeeld in sql. Wat verwacht je dat er zou moeten gebeuren, en wat gebeurt er en wat is het verschil tussen beide. Krijg je ook een SQLException en zo ja wat houd deze in?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • MDVej
  • Registratie: September 2001
  • Laatst online: 04-10-2025
Bedankt voor je snelle reactie.

in sql kan bijvoorbeeld het volgende komen te staan.

code:
1
sql = "UPDATE test SET var = 'i'm busy'";

de exception is dan als volgt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
java.sql.SQLException: Syntax error or access violation,  message from server: "You have an error in your SQL syntax near 'm busy'"

    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1825)

    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1020)

    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1109)

An exception has been intercepted

    at com.mysql.jdbc.Connection.execSQL(Connection.java:2030)

    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1563)

    at statsbot.writeStats.writeStats(writeStats.java:26)

    at statsbot.statsBot.quakeServer(statsBot.java:138)

    at statsbot.statsBot.<init>(statsBot.java:45)

    at statsbot.statsBot.main(statsBot.java:54)

  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13

MaxxRide

Surf's up

ehm, zit de fout niet in 'I'm busy', je zou de tweede ' moeten "escapen", gaat dat op deze manier in JAVA (ben geen JAVA expert), misschien met:
code:
1
'i'''m busy' of 'I\'m busy'??

If you are not wiping out you are nog pushing enough...


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15:26

Janoz

Moderator Devschuur®

!litemod

Ten eerste raad ik je ten sterkste aan om gebruik te maken van parameters. Op die manier heb je hier helemaal geen last van.
Java:
1
2
3
4
String sql = "UPDATE test SET var = ?";
PreparedStatement preparedStatement = conn.prepareStatement(sql);
preparedStatement.setString(1,"I'm busy");
ResultSet rs = preparedStatement.executeQuery();


Om op je probleem terug te komen: Hoe moet het prepared statement weten dat de ' niet een einde van de string is? Het is niet mogenlijk om achteraf dit nog toe te voegen. De sql die je heenstuurt moet sql zijn die je bijvoorbeeld ook rechtstreeks in je sql client intikt. Soms is dat \' en soms is dat '' (2x').

PS: de java code doe ik nu uit het blote hoofdje. Het kan dus zijn dat het niet compleet compileert.

[ Voor 10% gewijzigd door Janoz op 30-11-2003 16:09 . Reden: Het is voorbereid, en niet vooraf in paren verdeeld ;) ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • MDVej
  • Registratie: September 2001
  • Laatst online: 04-10-2025
Thanks!!!

je voorbeeld maakte in 1x alles heel erg duidelijk.
Pagina: 1