<div dir="ltr"><div>Sziasztok !</div><div><br></div><div>Megnéztem és mivel úgy kb. 300 ember van ezen a levelezőlistán, ennyi embernek kell hogy legyen frappáns ötlete egy látszólag </div><div>egyszerű probléma megoldására. A problémát már régebben is felvetettem, de akkor nem született igazi megoldás,</div>
<div>és mivel én sem oldottam meg azóta (mert nem elég elegánsak a megoldások), újra próbálkozom.</div><div><br></div><div>Arról van szó hogy egy SQL stringben kettősponttal jelöljük a paramétereket például:</div><div><br>
</div><div><font face="courier new, monospace" style="background-color:rgb(243,243,243)" color="#0000ff">String originalSql = "select * from telepules where kod = :x";</font></div><div><br></div><div>Mivel a JDBC-ben nincs ":x" ezért "?" -re kell alakítani. Erre a megoldás egyszerű, régen alkalmazom a következő kódot: </div>
<div><br></div><font color="#0000ff" face="courier new, monospace">Matcher matcher = Pattern.compile(":[a-z_0-9]+", Pattern.CASE_INSENSITIVE).matcher(originalSql);</font><br><div><br></div><div>majd a matcher.find() -dal mindent meg lehet oldani, a "?"-es cserét stb.</div>
<div><br></div><div>Azonban a probléma jelentkezik például egy ilyen sql-nél:</div><div><br></div><div><div><font color="#ff0000" face="courier new, monospace">String originalSql = "select to_char(datum,'hh24:mi:ss') from telepules where kod = :x";</font></div>
</div><div><br></div><div>Sajnos az előző pattern-es megoldás nem tudja figyelembe venni hogy aposztrófok között van a :mi és a :ss ezeknek nem kellene megfelelni </div><div>a feltételeknek, csak a :x -nek, csak az utóbbit kellene ?-re cserélni.</div>
<div><br></div><div>Szóval számomra az lenne az elfogadható frappáns megoldás ha ezt kizárólag a regexp kifejezés átírásával lehetne megoldani.</div><div><br></div><div>Ha van erre valakinek megoldása azt szívesen fogadnám.</div>
<div><br></div><div>Joe</div><div><br></div></div>